Git只创建一个只有指定目录的新分支,然后将其历史记录推送到新的存储库

ter*_*ace 10 git branch git-filter-branch

我想在我的仓库中创建一个新的分支,它只包含来自master中特定目录的文件及其历史记录,然后将该分支推送到新的存储库.

...或类似的东西 - 例如,可以将目录推送到新的存储库到新的存储库而无需创建分支.

到目前为止,我认为以下内容可行,但我想知道是否有更简化的方法.

1 - 创建一个空分支:

git symbolic-ref HEAD refs/heads/<new-branch>
rm .git/index 
git clean -fdx
Run Code Online (Sandbox Code Playgroud)

2 - 从主服务器中检出目录:

git checkout master <paths> ...
git add <paths> ...
git commit
Run Code Online (Sandbox Code Playgroud)

3 - 将分支推送到新远程:

git push -u <remote-URL> <new-branch>
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

我正在尝试将与Detach子目录等效的东西放到单独的Git存储库中,但没有git filter-branch乱七八糟的东西.

kni*_*ttl 19

你为什么不想用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
Run Code Online (Sandbox Code Playgroud)

这将只为您dir/to/filter提供新存储库中的内容,包括其所有历史记录,仅此而已.由于您只会过滤新创建的分支,因此您的存储库的其余部分保持不变.您可以删除subdir_branch之后的内容.