git 将存储库作为目录移动到另一个存储库

sha*_*arp 3 git github

如何将存储库 (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
Run Code Online (Sandbox Code Playgroud)

axi*_*iac 7

假设您要将所有内容从以下old_repo目录移至:dir1new_repo

  1. old_repocreate中dir1,将所有文件和目录从工作目录移动到dir1并提交。

    这就是全部了old_repo。下面的其他步骤发生在new_repo.

  2. 用于new_repogit 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. 就这样。

  • 请注意,对于某些 Git 版本,合并将需要 `--allow-unrelated-histories` 标志 (3认同)