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

问题描述 投票:0回答:2

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

git commit subdirectory
2个回答
0
投票

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

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

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,所以这不是最终的解决方案。其他选项包括:

  • 保留相同的存储库,只需将所有旧文件移至子目录即可。 IE。
    mkdir sub_dir_4_old_repo && git mv * sub_dir_4_old_repo && git commit
  • 只需将旧版本留在未合并的分支上并重新开始即可。 IE。
    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
    进行更改。这是一项大量的工作,并且可能会导致各种问题,除非每个人都重新克隆您的存储库。

0
投票

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

如何合并两个 Git 存储库?

修复了一些细微差别,

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

© www.soinside.com 2019 - 2024. All rights reserved.