将Git仓库的内容移动到另一个仓库并保留历史记录

281

我正在尝试使用以下命令将一个存储库(repo1)的内容移动到另一个现有的存储库(repo2):

git clone repo1
git clone repo2
cd repo1
git remote rm origin
git remote add repo1
git push

但它没有起作用。我查阅了一个类似的帖子,但我只找到了一个移动文件夹而不是其内容的方法。


你想把repo1的内容作为repo2上的一个分支,还是作为master的一部分,这样两个repo的文件夹都存在于你的工作目录中? - Chronial
我想将它作为主程序的一部分移动。 - Mario
5
这篇教程非常棒!http://www.smashingmagazine.com/2014/05/19/moving-git-repository-new-server/ - Idemax
不是重复的,这是一个不同的问题 - Liam
2
对于GitHub用户,您可以通过https://github.com/new/import导入另一个存储库。 - Noam Manos
15个回答

1
看起来你已经很接近了。假设你提交的不只是一个打字错误,第三步应该是cd repo2而不是repo1。第六步应该是git pull而不是push。改进后的列表:
  1. git clone repo1
  2. git clone repo2
  3. cd repo2
  4. git remote rm origin
  5. git remote add repo1
  6. git pull
  7. git remote rm repo1
  8. git remote add newremote

谢谢Eric,但在第三步中,我想删除原始存储库的链接,以避免进行任何远程更改..因为我想将内容从repo1移动到repo2。 - Mario
好的,我已经编辑了我的回答,试图反映出来。只是为了确认一下,您是想创建一个名为repo2的存储库,它是repo1的副本,但不保留repo1或origin作为远程吗? - Eric Palace
不,我并不是想创建一个新的仓库“repo2”。实际上,我已经有一个名为repo2的现有仓库,其中包含其他内容。现在我想将repo1的所有内容与历史记录一起移动到repo2中。我将保持服务器上的repo1为空。 - Mario
你有没有考虑不使用Git?似乎你可以通过GUI或SCP或FTP复制文件并手动将它们添加到Git仓库中。这样可能不太高效,但是更简单易行。 - Eric Palace
1
我已经尝试过了,但它留下了历史记录。我想要移动它的所有历史记录。 - Mario

0
一些方法对我来说并不适用,因为我想要转移内容的新存储库已经有一个初始提交,其中包含一些在设置新存储库时进行的更改(例如README等文件)。
对我有效的步骤:
1. 在repo1的github远程中从master分支创建一个新的分支(比如snapshot)。
2. 在本地镜像repo1。
 git clone --mirror **url-of-repo1**

3. 导航到 repo1,然后将新的远程设置为 repo2。
git remote remove origin
git remote add origin **url-of-repo2**

4. 将所有的轨道和标签推送到新的远程仓库。主分支会被拒绝,但其他分支都会正常。
git push --all
git push --tags

5. 清除本地的镜像仓库:
rm -rf repo1.git 

6. 现在在本地克隆repo2,然后进入内部:
git clone **url-of-repo2.git**
cd repo2

7. 切换到 "snapshot" 分支,然后执行以下操作:
git checkout --track origin/snapshot 

8. 切换到主分支并与快照合并:
git merge snapshot  --allow-unrelated-histories

9. 解决冲突并为修改添加提交以完成合并:
git add README.md 
git commit -m "merge track to master"

10. 检查日志以确保所有提交都正确存在。然后推送到远程:
git push origin master

0
有一种方法可以复制一个 Git 仓库,包括所有的历史记录、标签和分支,非常简单!我见过很多复杂的答案,但找到了一个非常简单的答案。它来自于 https://dev.to/ismailpe/duplicating-a-github-repo-with-history-3223 ,以下是步骤:
  1. 创建一个新的仓库(可以使用 Git 命令行或在 github.com 上创建)
  2. 使用命令行克隆现有/旧仓库:git clone --bare https://oldRepoURL
  3. 进入新创建的文件夹:cd oldRepoURL
  4. 将新文件夹推送到新仓库:git push --mirror https://newRepoURL

就是这样。非常简单!


-2

我不太确定我所做的是否正确,但它仍然起作用。我重命名了repo1中存在的repo2文件夹,并提交了更改。在我的情况下,我只想合并一个repo,所以这种方法有效。后来进行了一些路径更改。


-2

我在这里看到了很多解决方案。过去对我有用的一个快速一行代码的解决方案是使用--mirror选项。首先进入您想要复制的存储库。然后假设您已经设置了一个新的存储库,使用克隆链接即可。它将复制所有历史记录到您的新存储库。

cd repoOne

git --mirror linktonewrepo.git


似乎您输入的命令不存在,您是否缺少实际的命令而 --mirror 只是某个命令的标志? - aaossa
未知选项:--mirror 用法:git [--version] [--help] [-C <path>] [-c <name>=<value>] [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path] [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare] [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>] <command> [<args>] - ekkis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接