Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/25.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Git创建一个只包含指定目录及其历史记录的新分支,然后推送到新存储库_Git_Branch_Git Filter Branch - Fatal编程技术网

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

Git创建一个只包含指定目录及其历史记录的新分支,然后推送到新存储库,git,branch,git-filter-branch,Git,Branch,Git Filter Branch,我想在我的repo中创建一个新分支,它只包含master中特定目录的文件及其历史记录,然后将该分支推送到一个新的存储库 …或类似的东西–例如,可以将目录推送到新存储库,再推送到新的repo,而无需创建分支 到目前为止,我认为下面的方法会起作用,但我想知道是否有一种更精简的方法 1-创建空分支: git symbolic-ref HEAD refs/heads/<new-branch> rm .git/index git clean -fdx git符号参考头参考/头/ 吉特令吉/

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

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

到目前为止,我认为下面的方法会起作用,但我想知道是否有一种更精简的方法

1-创建空分支:

git symbolic-ref HEAD refs/heads/<new-branch>
rm .git/index 
git clean -fdx
git符号参考头参考/头/
吉特令吉/索引
git-clean-fdx
2-从主服务器签出目录:

git checkout master <paths> ...
git add <paths> ...
git commit
git签出主机。。。
git添加。。。
git提交
3-将分支推送到新的远程:

git push -u <remote-URL> <new-branch>
git推送-u
4-然后,在新回购协议中,将分支机构与主机构合并:

git checkout -t origin/<new-branch>
git checkout master
git merge <new-branch>
git branch -d afterimage
git branch -d -r afterimage
git签出-t源/
切换到主分支
git合并
git分支-d后像
git分支-d-r后像

我正在尝试做一些与相同的事情,但是没有
git过滤器分支
mess。

为什么不使用
git过滤器分支
?它是专门为您想要的任务而构建的

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
的内容,包括其所有历史记录,仅此而已。因为您将只过滤新创建的分支,所以存储库的其余部分保持不变。您可以随后删除
子目录分支

…但实际上需要使用
git filter分支
来提取子目录的历史记录。没有这些,你只会得到文件。我真的看不出不关注PostYou链接的兴趣。按照您建议的方式进行操作是可行的,但这是一种蛮力,不会清理您的历史记录或存储库数据。