修改一个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 exportsvn/master 的提示提交。然后 git filter-repo 重写历史以使其永久化。

$ git replace D C
$ git filter-repo --force

A - B - C [svn/master]
         \
          E1 - F1 [master]