将git-svn的标签转化为git的标签
我创建了一个bash脚本,以便将git-svn与svn存储库配合使用。这样一来,我可以读取svn存储库上的所有标签,但是在git中,这些标签会作为分支被存储。而我希望将它们作为git的标签使用。
#!/bin/bash
for branch in `git for-each-ref --format='%(refname)' | grep tags/`
do
git show --pretty=format:%s%n%n%b "$branch" | git tag -F - "`basename $branch`" "$branch^"
done
我不会删除提交,所以不会有破坏性的事情发生。
只需简单地将git branch命令插入xargs即可完成,但我将解释为什么对其进行了如上的额外处理。
在Subversion中创建标签时,我们会按照“在trunk上进行工作→将其复制到tags目录”这样的方式。由于git-svn将每个SVN提交忠实地转换为一个个git提交,所以最后复制的提交也会成为单独的提交。这样一来,没有任何更改的提交会出现在每个分支的最前端。而冒开头的脚本就是要去除这些空提交。
我决定将复制时的消息包含在标签中。
(参考:for-each-ref)
参考:对于每个参考