Shell脚本从GIT仓库读取更改,然后将这些更改提交到SVN

时间:2013-06-26 06:48:05

标签: git bash shell jenkins jenkins-plugins

我没有shell脚本编写经验。 我想创建一个shell脚本,它将从GIT获取更改并将这些更改提交到SVN存储库。

在网上搜索并阅读此链接后: Shell script to check git for changes and then loop through changed files?

我能想出以下内容......

#!/bin/sh

#checks if there are any changes
if ! git --git-dir="/dir/.git" diff --quiet
then
    # do stuff...
    git --git-dir="/dir/.git" diff-tree ORIG_HEAD.. | \
    while read srcmode dstmode srcsha dstsha status srcfile dstfile
    do
        # do something with $srcfile and $dstfile
    done
fi

我猜以上内容会从GIT回购中获得更改。我在正确的道路上吗? 现在在循环中我想提交从GIT获得的更改。

如何做到这一点?

我将在Jenkins中添加此脚本,它将作为构建后操作执行。

1 个答案:

答案 0 :(得分:0)

您希望将git-svn用作Ju Liu suggested。假设您有以下设置:

  • /repos/project.git的Git存储库。
  • branches处的标准tagstrunkhttp://svn/project目录结构。

将提交从git存储库复制到project Subversion主干:

  1. 从Subversion创建一个Git存储库:

    cd /repos
    git svn clone --stdlayout --revision 1:HEAD --no-minimize-url http://svn/project
    
  2. git存储库添加为远程:

    cd project
    git remote add /repos/project.git
    
  3. 获取您想要的git次提交。例如,您可以git pull然后git rebase [commit-id-of-the-subversion-head]删除不需要的提交,或者使用git cherry-pick来获取其中的部分内容。

  4. 当您拥有所需的提交时,git svn dcommit将提交Subversion。
  5. 您可以保留两个git存储库,只需使用/repos/project更新git svn rebase,然后再从pull执行其他cherry-pick/repos/project.git s