我想在我的repo中创建一个新分支,它只包含来自master 中特定目录的文件及其历史记录,然后将该分支推送到新的存储库。
...或类似的东西 - 例如,可以将目录推送到新的存储库到新的存储库,而无需创建分支。
到目前为止,我认为以下内容可行,但我想知道是否有更简化的方法。
1 - 创建一个空分支:
git symbolic-ref HEAD refs/heads/<new-branch>
rm .git/index
git clean -fdx
2 - 从master中签出目录:
git checkout master <paths> ...
git add <paths> ...
git commit
3 - 将分支推送到新远程:
git push -u <remote-URL> <new-branch>
4 - 然后,在新的repo中,合并分支与master:
git checkout -t origin/<new-branch>
git checkout master
git merge <new-branch>
git branch -d afterimage
git branch -d -r afterimage
我正在尝试做一些与Detach subdirectory into separate Git repository相当的事情,但没有git filter-branch
混乱。
答案 0 :(得分:18)
为什么不想使用git filter-branch
?它专门为您想要的任务而构建。
git branch subdir_branch HEAD
git filter-branch --subdirectory-filter dir/to/filter -- subdir_branch
git push git://.../new_repo.git subdir_branch:master
这将只为您提供新dir/to/filter
在新存储库中的内容,包括其所有历史记录,仅此而已。由于您只会过滤新创建的分支,因此您的存储库的其余部分保持不变。您可以在之后删除subdir_branch
。