将 git 存储库移动到另一个存储库的子目录,同时保留提交历史记录。比如说,我有一个名为 old_repo 的 git,我希望将其移至 new_repo/sub_dir_4_old_repo。
这对于子模块来说似乎是一项完美的工作。
基本上,您将从头开始一个新项目,然后引用旧的存储库作为路径。
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,所以这不是最终的解决方案。其他选项包括:
mkdir sub_dir_4_old_repo && git mv * sub_dir_4_old_repo && git commit
git checkout -b starting-over && git rm -rf * && git commit -m 'Starting over'
/sub_dir_4_old_repo
内,而不是 /
(不推荐)。 IE。使用 git rebase -i --root
并编辑 每个提交,而不是对 /path/foo.txt
进行更改,而是对 /sub_dir_4_old_repo/path/foo.txt
进行更改。这是一项大量的工作,并且可能会导致各种问题,除非每个人都重新克隆您的存储库。如果您不想使用子模块并合并这些存储库,请按照此操作(git 过滤存储库来救援)
修复了一些细微差别,