将带有历史记录的 Git 仓库导出到另一个仓库中

4
我有一个名为"A"的代码库,需要将其移动到名为"B"的另一个代码库中,但不能丢失历史记录,就好像它一直在"B"上一样。请注意,我不是想移动一个文件夹或代码库的部分内容,而是要将整个代码库的内容移动到另一个代码库中,基本上是将代码库"A"重命名为"B",但保留"A"。如有帮助,不胜感激。

为什么不直接使用git clone呢?这样你总是可以得到完整的历史记录... - madflow
问题在于远程仓库被清空了,因此我有一个本地的"A"副本,希望将其推送到"B"中而不丢失历史记录。 - Flupkear
Flupkear,请看下面@yuri的答案,那个简单且有效。 - Barnabas Kecskes
3个回答

3

将A添加为B的一个远程。在B仓库中执行git fetch remote_A,这样你就导入了整个历史记录。


问题在于本地副本的"A"不再代表远程版本,这就是我有一个本地的"A"副本,如果我执行"git pull",它将被完全清除,因此我想在被清除之前将本地的"A"保存到另一个仓库中,不确定是否可能。 - Flupkear
这并不重要。当你进行fetch操作时,所有的分支都将以“remate_A”为前缀。如果需要,可以使用它们。Git log --all命令将显示它们,你可以使用grep命令查找特定内容。如果repo B中没有任何内容,则只需进行文件复制即可。 - Adam Dymitruk
谢谢,我还在努力理解它。如果我理解得正确,我需要在一个新文件夹中克隆“B”,将“A”复制到“B”中(我想是不包括.git文件夹),然后提交/推送。 - Flupkear
不,你需要同时复制 .git 文件夹。那里包含了历史记录。 - Adam Dymitruk

1

只需将DirA中包括隐藏的.git目录在内的所有文件复制到DirB中。

然后打开DirB/.git/config并将存储库位置从RemoteRepoA更改为RemoteRepoB所在位置。

然后在DirB中执行以下操作:

git push origin master

所有带历史记录的代码都应添加到RemoteRepoB。我在GitHub上已经为2个仓库执行了此操作。

+1,我设法做了同样的事情 - 这看起来是所有创建/应用补丁等方法中最简单的方法。它对我有效,并且所有内容看起来都完好无损 - 不过我不确定它是否有任何缺点。 - Barnabas Kecskes

1

Git仓库只是文件夹,您可以将A复制到B以“重命名而不丢失”A。


我尝试过这个方法,只是将"A"复制到"A-copy",然后进行git-init、git add-remote <repo>、git commit和git push,但失败了。我在git上编辑了.config文件,两个仓库都在那里,如果我只删除"A"的定义并重试,会成功吗? - Flupkear
@Flupkear git add-remote是什么?请给出确切的步骤并编辑到您的问题中。 - manojlds
抱歉,我是指“git remote add”,但这并不重要,因为这只是我做的一个测试。如果我理解正确,只需将空的“B”存储库克隆到文件夹中,并将“A”文件夹内容复制粘贴到“B”中即可完成。 - Flupkear

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