修改一个svn迁移到git
Amend a svn migration to git
在过去的某个时候,在我开始为我现在的雇主工作之前,一位 devops 工程师(他将保持匿名)似乎采取了直接而粗略的方式从 SVN 迁移到 git。我的评估是所采取的行动达到:
svn export repos /tmp/repos
cd /tmp/repos
git init
git add --all
git commit -m 'Initial Commit'
当然没有历史。 2018 年 3 月 5 日,许多存储库似乎从金属中脱颖而出。
事后我可以采取什么行动来“修改”这些 git 存储库的 SVN 历史记录——如果我仍然可以访问这些存储库?那里有指南吗?
还是每次看到注释代码就挥拳骂输?考虑到 git 的 SHA 和提交树模型,我怀疑我要摇拳头了。
假设您仍然有 SVN 存储库,用 svn2git
转换它,使该存储库成为上游,然后在其上重写您的存储库。
首先,备份您的存储库以防万一。
完成 svn2git
转换后,切换到其他存储库并将 svn2git 设为远程。
$ git remote add svn <path to the svn2git repo>
$ git fetch svn
A - B - C [svn/master]
D - E - F [master]
D 这是原始的 svn export
提交。
现在可以在 svn/master 的基础上变基,但是 git filter-repo
可能会更好地处理这种复杂的事情。 Replace 旧的 svn export
以 svn/master
的提示提交。然后 git filter-repo
重写历史以使其永久化。
$ git replace D C
$ git filter-repo --force
A - B - C [svn/master]
\
E1 - F1 [master]
在过去的某个时候,在我开始为我现在的雇主工作之前,一位 devops 工程师(他将保持匿名)似乎采取了直接而粗略的方式从 SVN 迁移到 git。我的评估是所采取的行动达到:
svn export repos /tmp/repos
cd /tmp/repos
git init
git add --all
git commit -m 'Initial Commit'
当然没有历史。 2018 年 3 月 5 日,许多存储库似乎从金属中脱颖而出。
事后我可以采取什么行动来“修改”这些 git 存储库的 SVN 历史记录——如果我仍然可以访问这些存储库?那里有指南吗?
还是每次看到注释代码就挥拳骂输?考虑到 git 的 SHA 和提交树模型,我怀疑我要摇拳头了。
假设您仍然有 SVN 存储库,用 svn2git
转换它,使该存储库成为上游,然后在其上重写您的存储库。
首先,备份您的存储库以防万一。
完成 svn2git
转换后,切换到其他存储库并将 svn2git 设为远程。
$ git remote add svn <path to the svn2git repo>
$ git fetch svn
A - B - C [svn/master]
D - E - F [master]
D 这是原始的 svn export
提交。
现在可以在 svn/master 的基础上变基,但是 git filter-repo
可能会更好地处理这种复杂的事情。 Replace 旧的 svn export
以 svn/master
的提示提交。然后 git filter-repo
重写历史以使其永久化。
$ git replace D C
$ git filter-repo --force
A - B - C [svn/master]
\
E1 - F1 [master]