Git:如何在另一个仓库中移动仓库而不丢失历史记录?

fcg9iug3  于 2022-12-17  发布在  Git
关注(0)|答案(2)|浏览(154)

我想把这两个仓库移到第一个仓库中,我怎样才能做到这一点而不丢失提交的历史记录呢?谢谢!This is what Im trying to do
我试图搜索有关此问题的信息,但我所找到的都是如何克隆存储库,但如果我只是将它们克隆到新的存储库中,然后删除旧的存储库,则使用克隆会丢失历史记录=/我想做的是以某种方式移动它们

cpjpxq1n

cpjpxq1n1#

假设您有一个旧存储库的本地克隆。在此本地上,将新存储库添加为新远程存储库:

git remote add new-repo url-to-new-repo

然后,对于您拥有的本地分支机构,您可以

git push new-repo local-branch

对于在旧回购协议中但在本地没有的分支机构:

git push new-repo old-repo/some-branch:refs/heads/some-branch

当然,old-repo也可能是origin

fd3cxomn

fd3cxomn2#

在这种情况下,我的策略是使用git merge --allow-unrelated-histories,合并后的回购协议将有两个不相关的初始提交,当您查看历史记录时,这可能看起来很奇怪,但这两个回购协议的历史记录将包含在合并后的回购协议中,您不必重写任何历史记录,只需将它们合并即可。
现在,你说你想把文件从一个存储库移到一个子目录中。在合并之前,先这样做。然后合并不相关的历史记录,并推送结果。
这里有一个完整的注解食谱做到这一点:

# Start in a fresh sandbox - this is important, I'm assuming later you've done so,
# and it's easy to throw away and start fresh if anything goes wrong.
git clone URL/repo1.git
cd repo1
# Add a second remote in this sandbox, pointing to the second repo
git remote add r2 URL/repo2.git
git fetch r2
# Make and checkout a branch r2-main tracking the second remote's main
git checkout -b r2-main r2/main
# in this branch, move everything to folder repo2
mkdir repo2
git mv $(git ls-tree --name-only HEAD .) repo2
# commit (but don't push!)
git commit -m'Moving repo2 contents to folder repo2/ ahead of big merge'
# Go back to repo1's main - this local branch tracking it was created by the initial clone.
git checkout main
# And do the big merge
git merge --allow-unrelated-histories r2-main
# finally, if everything looks good, you can push to origin
git push

现在你应该都设置好了你想要的!

相关问题