将 git repo 移动到另一个存储库的子目录,同时保留提交历史记录

move git repo to another repo's subdirectory while preserving commit history

提问人:feiyuerenhai 提问时间:11/16/2023 更新时间:11/21/2023 访问量:33

问:

将 git repo 移动到另一个存储库的子目录,同时保留提交历史记录。比如说,我有一个名为 old_repo 的 git,我希望将其移动到 new_repo/sub_dir_4_old_repo。

git commit 子目录

评论


答:

0赞 amphetamachine 11/17/2023 #1

对于子模块来说,这似乎是一个完美的工作。

基本上,您将从头开始一个新项目,然后引用旧存储库作为路径。

git init
git submodule add https://example.com/myuser/oldrepo.git sub_dir_4_old_repo
git commit -m 'Initial commit - add old repo as submodule'

这两个存储库将具有单独的历史记录,但您可以[在新项目中]定期签入对子模块指针的更改。

如果从现有存储库开始,例如托管在 codeberg.org 上,则步骤会略有不同:

git clone https://codeberg.org/h3xx/perl-Chicken-Ipsum
git submodule add https://example.com/myuser/oldrepo.git sub_dir_4_old_repo
git commit -m 'Initial commit - add old repo as submodule'

新服务器和存储库不必位于同一服务器上。

TMTOWTDI,所以这并不是解决方案的最终目的。其他选项包括:

  • 保留相同的存储库,只需将所有旧文件移动到子目录即可。J.F.mkdir sub_dir_4_old_repo && git mv * sub_dir_4_old_repo && git commit
  • 只需将旧版本保留在未合并的分支上,然后重新开始即可。J.F.git checkout -b starting-over && git rm -rf * && git commit -m 'Starting over'
  • 重写整个旧存储库的历史记录,使其全部发生在内部,而不是(不推荐)。即使用和编辑每个提交,而不是进行更改以将其更改为 .这是一项重的工作,可能会导致各种问题,除非每个人都重新克隆您的存储库。/sub_dir_4_old_repo/git rebase -i --root/path/foo.txt/sub_dir_4_old_repo/path/foo.txt
0赞 Krishnakumar Natarajan 11/21/2023 #2

如果您不想使用子模块并合并这些存储库,请按照此操作(git filter repo 来救援)

如何合并两个 Git 存储库?

修复了一些细微差别,

将一个 git 存储库合并到另一个 git 存储库的子目录中,同时在不使用 --follow 的情况下保留历史记录