从SVN转换为Git时,如何将修订号放在提交消息中?

时间:2011-08-18 15:20:22

标签: git clone git-svn

我们将把我们的存储库从Subversion转换为Git,但是希望能够保留SVN版本号,因为bug跟踪器中的注释会定期引用它。

我们将使用git svn cloneJohn Albin's blog中描述的流程。

有没有办法在提交邮件中包含修订号?我宁愿在克隆过程中这样做,但后处理步骤是可以接受的。

是的,我知道git svn find-rev,但这需要SVN存储库并且用户可以通过网络访问它。

3 个答案:

答案 0 :(得分:5)

git svn默认情况下执行此操作:通常在每个提交消息中包含一行,该行具有该提交的SVN修订号(以及其他一些数据)。

但是,您发布的链接会使用--no-metadata克隆,告知git svn不要附加git-svn-id行。

答案 1 :(得分:3)

目前尚不清楚为什么要在提交消息中使用svn修订号。正如@John Flatness所示,git-svn在提交消息中包含svn修订号。

我们发现为每个修订版创建标记更有用。这似乎更好地平行了svn修订号的有用性。使用git svn find-rev的脚本快速添加了10000个标签。现在我们可以访问任何历史svn版本号。


此处的每个请求是脚本(此处添加,因为注释似乎不能很好地处理代码)

#!/bin/bash

declare -i rev

for ((rev = 1; rev < 100; ++rev))
do
    hash=$(git svn find-rev "r$rev")
    if [ -z $hash ]; then
        break
    fi
    # TODO Pad with 0's for small values of rev
    tag="svn_r$rev"
    git tag -a -m "$tag" $tag $hash
done

这只是前100次修订。我们以前1000个转速为1000,然后是100步。最后2000个左右的提交都有单独的标签。

答案 2 :(得分:0)

此脚本对采用svn部分分支的人更有效。 因为当没有修订返回时,中断将退出。试试这个。 只需将每个最大修订号都设为50000。

declare -i rev

for rev in {1..50000}
do
    echo $rev
    hash=$(git svn find-rev "r$rev")
    tag="svn_r$rev"
    if [ -z $hash ] 
    then
        echo no tag
    else
        echo $hash
        echo $tag
        git tag -a -m "$tag" $tag $hash
    fi
done

echo Thats it !