提问人:feiyuerenhai 提问时间:11/16/2023 更新时间:11/21/2023 访问量:33
将 git repo 移动到另一个存储库的子目录,同时保留提交历史记录
move git repo to another repo's subdirectory while preserving commit history
问:
将 git repo 移动到另一个存储库的子目录,同时保留提交历史记录。比如说,我有一个名为 old_repo 的 git,我希望将其移动到 new_repo/sub_dir_4_old_repo。
答:
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 来救援)
修复了一些细微差别,
评论