如何合并来自错误 svn 迁移的 git 历史 - 旧存储库
How to combine git history from wrong svn migration - old repository
我们有一个从 SVN 迁移而来的 git 存储库。我们将其命名为 WORKING。
由于 svn 复制文件夹操作,历史没有很好地迁移。
错误是:
SVN : r1 \ --> common folder --> Project1 \ folder1
file2
.
. some time later
.
.
SVN : r1000 \ --> Common folder
--> Project1 \ folder1
file2
^
|
------> this folder has been migrated to GIT
此更改导致不完整的历史迁移(仅出现从 HEAD 到 r1000)
现在我们想将旧历史添加到工作中(从 r1000 到 r1),我们创建了一个新的 git 存储库,其中包含缺少的历史(我们将其命名为 OLDEST)。历史日志显示为:
WORKING --> A (1.2018) - B (2.2018) - C (3.2018) - D (HEAD)
OLDEST --> E (1.2016) ... F (1.2017)
我们想要这个日志历史
WORKING --> E ... F --> A - B - C
路径完全相同,我们希望在您看到文件的完整历史记录时保留历史记录。我做的测试无法混合这些历史记录,这可能吗?
更多详情
我使用以下方法迁移了存储库:
URL=http://server.name/project1
git svn clone --authors-file=authors.txt $URL -r1000:HEAD first-migration
一段时间后我完成了
URL=http://server.name/common/
git svn clone --authors-file=authors.txt $URL -r1:1000 second_migration
cd second_migration
git filter-branch
现在我们有两个存储库。第一次迁移正在使用并包含积极的开发,second_migration 包含旧修订版(从 1-1000)
Mi目前的解决方案是:
mkdir migration
cd migration
git init
git remote add newest ssh://gitserver:first-migration
git remote add older ssh://gitserver:second-migration
git remote update
git checkout newest/master -b new.master
git checkout 1abc2def3 -b new.firstcommit
git checkout older/master -b old.master
git rebase --preserve-merges --root --committer-date-is-author-date new.master
git checkout new.master -b master
git remote add fullhistory ssh://gitserver:final.git
git push fullhistory --all
在这种情况下,new.firstcommit 是我在第一次迁移 (r1000) 期间所做的第一次提交(作为文档参考)
在这些操作之后,完整的历史记录在远程存储库上可用,但历史记录似乎断开连接
我的问题是如何更好地整合旧历史。
感谢 alo-malbarez here and this page 的评论,我可以解决问题。最后我做到了:
git checkout old.master
git cherry-pick new.firstcommit
# I commit the day I merged histories.
git commit --allow-empty -m "Mixing histories"
git rebase -s recursive -Xtheirs --onto old.master new.firstcommit new.master
git push --all --tags
这解决了我的问题。
我们有一个从 SVN 迁移而来的 git 存储库。我们将其命名为 WORKING。 由于 svn 复制文件夹操作,历史没有很好地迁移。 错误是:
SVN : r1 \ --> common folder --> Project1 \ folder1
file2
.
. some time later
.
.
SVN : r1000 \ --> Common folder
--> Project1 \ folder1
file2
^
|
------> this folder has been migrated to GIT
此更改导致不完整的历史迁移(仅出现从 HEAD 到 r1000) 现在我们想将旧历史添加到工作中(从 r1000 到 r1),我们创建了一个新的 git 存储库,其中包含缺少的历史(我们将其命名为 OLDEST)。历史日志显示为:
WORKING --> A (1.2018) - B (2.2018) - C (3.2018) - D (HEAD)
OLDEST --> E (1.2016) ... F (1.2017)
我们想要这个日志历史
WORKING --> E ... F --> A - B - C
路径完全相同,我们希望在您看到文件的完整历史记录时保留历史记录。我做的测试无法混合这些历史记录,这可能吗?
更多详情
我使用以下方法迁移了存储库:
URL=http://server.name/project1
git svn clone --authors-file=authors.txt $URL -r1000:HEAD first-migration
一段时间后我完成了
URL=http://server.name/common/
git svn clone --authors-file=authors.txt $URL -r1:1000 second_migration
cd second_migration
git filter-branch
现在我们有两个存储库。第一次迁移正在使用并包含积极的开发,second_migration 包含旧修订版(从 1-1000)
Mi目前的解决方案是:
mkdir migration
cd migration
git init
git remote add newest ssh://gitserver:first-migration
git remote add older ssh://gitserver:second-migration
git remote update
git checkout newest/master -b new.master
git checkout 1abc2def3 -b new.firstcommit
git checkout older/master -b old.master
git rebase --preserve-merges --root --committer-date-is-author-date new.master
git checkout new.master -b master
git remote add fullhistory ssh://gitserver:final.git
git push fullhistory --all
在这种情况下,new.firstcommit 是我在第一次迁移 (r1000) 期间所做的第一次提交(作为文档参考)
在这些操作之后,完整的历史记录在远程存储库上可用,但历史记录似乎断开连接
我的问题是如何更好地整合旧历史。
感谢 alo-malbarez here and this page 的评论,我可以解决问题。最后我做到了:
git checkout old.master
git cherry-pick new.firstcommit
# I commit the day I merged histories.
git commit --allow-empty -m "Mixing histories"
git rebase -s recursive -Xtheirs --onto old.master new.firstcommit new.master
git push --all --tags
这解决了我的问题。