我已将我的 SVN 存储库导入新的 git 裸存储库。
有没有一种方法可以将所有内容恢复到 master 中的一行?
像这样 :
(我是 git 的初学者)
提前致谢
您所要做的就是将标签移动到正确的提交(它们的父提交)。您可以使用以下命令一一手动执行此操作:
git tag -f v2.8.0 v2.8.0~1
替换v2.8.0
为每个标签的名称。
如果有很多标签要移动,您可以使用git tag -l > tags.txt
它们来生成它们的列表并将其保存到tags.txt
文件中。在文本编辑器中打开文件并删除您不想修改的标签(如果问题中发布的图像仅显示当前历史记录行v2.8.2
并且v2.8.3
放置正确;从文件中删除它们)。保存文件然后运行:
for t in $(cat tags.txt); do git tag -f $t ${t}~1; done
它将处理文件中的所有标签。
更新:
为了将标签的更新位置推送到上游存储库,运行:
git push --force --tags origin
替换origin
为您要推送标签的所有远程存储库的名称。
git-svn
不是一次性转换存储库或存储库部分的正确工具。如果您想使用 Git 作为现有 SVN 服务器的前端,这是一个很棒的工具,但对于一次性转换,您不应该使用,git-svn
但svn2git
它更适合这个用例。
从您的屏幕截图中,我可以看到您很可能使用了基于git-svn
nirvdrum 之类的工具svn2git
,因为这些“标签分支”是使用git-svn
.
有很多称为svn2git
的工具,可能最好的是来自https://github.com/svn-all-fast-export/svn2git的 KDE 工具。我强烈建议使用该svn2git
工具。这是我所知道的最好的,并且在你可以用它的规则文件做什么方面非常灵活。
您将能够轻松地配置svn2git
规则文件以生成您想要的历史结果,或者将所有 SVN 子存储库集成到一个 Git 存储库中,或者将您的项目从 SVN 拆分到多个独立的 Git 存储库。
如果您不是 100% 了解存储库的历史,那么在将 SVN 存储库迁移到 Git 时,svneverever
http ://blog.hartwork.org/ ?p=763是一个调查 SVN 存储库历史的好工具。
尽管git-svn
更容易开始,但除了灵活性之外,还有一些使用 KDEsvn2git
而不是更优越的原因:git-svn
svn2git
对于具有分支和合并等的更复杂的历史尤其如此git-svn
一个额外的空提交,这也使它们不是分支的一部分,因此在fetch
您提供命令之前,正常情况下不会获取它们,--tags
因为默认情况下也只会获取指向已获取分支的标签。使用正确的 svn2git 标签是它们所属的地方svn2git
,git-svn
最终您将失去历史svn2git
将一个 SVN 存储库拆分为多个 Git 存储库svn2git
正确的转换比使用正确的要快无数倍git-svn
有很多原因导致git-svn
KDE 更差,而 KDEsvn2git
更胜一筹。:-)