我有2个工作库,repo1
和repo2
。
我只想从repo1克隆几个文件夹到repo2,以及这些文件的提交历史。
的例子:
copy repo1/src/build
到repo2/src1/build
我试着克隆所有有历史的东西,但是有很多合并冲突,这是一场噩梦。因此,我希望将repo1的特定内容与其历史记录放在repo2/src1文件夹中,并保留我需要的内容。
谢谢。
要对git-filter-repo
实现相同的操作,请遵循以下步骤:
本指南假设您有克隆存储库A,并且您有存储库b的文件夹。
在存储库B中,添加一个远程连接到存储库a作为分支。
git remote add repo-A-branch /path/to/example-repo-A
创建一个只包含目录1的历史记录和文件的新分支:
git filter-repo --path example-dir-1 --refs repo-A-branch --branch-name example-dir-1-branch
这将在存储库B中创建一个新的分支,其中仅包含存储库a中目录1的历史记录和文件。
将新分支合并到存储库B的主分支
git checkout master
git merge example-dir-1-branch
通过删除到存储库A的远程连接进行清理
git remote rm repo-A-branch
这个博客页面包含了你想要实现的目标。
让我引用重要的部分:
目标:将目录1从Git存储库A移动到Git存储库b。
:
- Git repository A包含了我们不想移动的其他目录。
- 保存我们要移动的目录的Git提交历史。
这些步骤参考下面的代码,查看完整的说明页面:
- 复制存储库a。这让你可以随意使用它,而不用太担心出错。
- 删除指向原始存储库的链接,以避免意外地进行任何远程更改(第3行)。
- 第四行[…]]会检查你的历史记录和文件,删除目录
中没有的任何内容。
git clone <git repository A url>
cd <git repository A directory>
git remote rm origin
git filter-branch --subdirectory-filter <directory 1> -- --all
mkdir <directory 1>
mv * <directory 1>
git add .
git commit
这些步骤参考下面的代码,查看完整的说明页面:
- 如果你还没有仓库B,复制一个。
在第3行,您将创建到存储库a的远程连接,作为存储库b中的分支。- 从这个分支(只包含你想要移动的目录)拉入存储库b。拉复制文件和历史记录。
git clone <git repository B url>
cd <git repository B directory>
git remote add repo-A-branch <git repository A directory>
git pull repo-A-branch master --allow-unrelated-histories
git remote rm repo-A-branch
其他引用:
- https://git-scm.com/docs/git-filter-branch
- https://www-acc.gsi.de/wiki/Applications/AppHowToGitMoveWithHistory