我们将把我们的存储库从Subversion转换为Git,但是希望能够保留SVN版本号,因为bug跟踪器中的注释会定期引用它。
我们将使用git svn clone
和John Albin's blog中描述的流程。
有没有办法在提交邮件中包含修订号?我宁愿在克隆过程中这样做,但后处理步骤是可以接受的。
是的,我知道git svn find-rev
,但这需要SVN存储库并且用户可以通过网络访问它。
答案 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 !