将Git仓库移动到另一个仓库作为目录

3

如何将存储库(old_rep)作为目录移动到另一个存储库(new_rep),同时保留存储库的历史记录和文件?

以下是我从其他堆栈问题中尝试的方法。我在new_repo中有像目录、.txt、.sql文件这样带有历史记录的文件。当我运行下面的代码时,看起来--mirror正在将old_rep中的所有内容替换为new_rep。

mkdir foo
cd foo 

git clone --bare ssh://git@test.test.test/test/old_rep.git

cd old_rep.git 
git clone --bare ssh://git@test.test.test/test/new_rep.git

cd ..
rm -rf old_rep.git

如果你进入 old_rep.git,执行一些操作,然后输入 cd .. 和 rm -Rf old_rep.git,那么你不就是删除了所有东西吗? - VonC
2个回答

6
假设您想将所有内容从old_repo移动到new_repo的目录dir1中:
  1. old_repo中创建dir1,将工作目录中的所有文件和目录移动到dir1并提交。

    这就是关于old_repo的全部内容。下面的其他步骤在new_repo中进行。

  2. new_repo中使用git remote add old_repo <path-to-old-repo>将旧仓库添加为新仓库的远程仓库。用旧存储库的实际路径(全路径或相对路径)替换<path-to-old-repo>。我假设您在本地计算机上拥有两个仓库。

  3. 确保没有未提交的更改。如果有,则在分支上提交它们或将它们存储起来。

  4. 运行git fetch old_repo将旧仓库的提交获取到新仓库中。假设您已经检出了要从old_repo导入代码的分支,请运行git merge old_repo/master。将master替换为您要导入的来自old_repo的实际分支。

  5. 检查在new_repo中是否一切正常,并且您拥有来自old_repo的所有文件及其历史记录。

  6. 清理。仅在您仔细检查了第5步后,运行git remote remove old_repo取消链接仓库,然后,如果您确定不需要从old_repo获取任何内容,则可以删除包含old_repo的目录。我会在一段时间(1-2周)后进行删除,以确保我不会失去任何东西。

  7. 就这些。


3
请注意,对于某些Git版本,合并将需要--allow-unrelated-histories标志。 - whitfin

1

我发现这个方法更简单。下面的答案假设像我一样,您不太关心这个旧仓库,因为它很老或者新仓库只是旧仓库的存储。这就是为什么我不介意用这种方式。

  1. 克隆旧仓库并将其移动到本地计算机上
  2. 从本地计算机创建新目标仓库或从现有仓库中进行git克隆
  3. 将所有文件夹和文件从旧仓库复制并粘贴到本地计算机上的目标仓库文件夹中
  4. git add . 然后 git commit 最后 git push
  5. 删除旧仓库

OP说他们想要保留所有提交历史记录。 - mfaith

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