我有一个git repo,说repoA,有很多子目录。如何分离其中一个子目录,例如dir1,并将其作为单独的分支(带历史记录)添加到另一个仓库中?
其次,如何从repoA中删除分离的子目录?
答案 0 :(得分:1)
如何分离其中一个子目录,例如dir1,并将其作为单独的分支(带历史记录)添加到另一个仓库?
git checkout -b tempBranch
git filter-branch --subdirectory-filter dir1 --prune-empty
在第二个存储库中:
git remote add filtered_dir1 ../original_repo
git fetch filtered_dir1
git merge filtered_dir1/tempBranch
其次,如何从repoA中删除分离的子目录?
$ git filter-branch --index-filter“git rm -r -f --cached --ignore-unmatch dir1”--prune-empty
这可能会失败并显示无法进行备份的警告;我不确定这是什么意思,但添加-f
会迫使git-filter-branch
继续运行。
这将仅在当前分支中运行。如果您想在所有分支上运行它,请附加-- --all
。请注意-- --all
。
有些说明:
运行git filter-branch
时,您将过滤您所在的分支。 (显然,如果你考虑一下)。如果您尝试提取某些历史记录以推送到第二个存储库,您可能希望在新分支上git filter-branch
,以便原始存储库不会丢失任何内容。
This question中包含一些有用的信息。
git filter-branch --subdirectory-filter
将subdirectory
设为分支的新根目录 - 它会将文件从subdirectory
移至/
。要解决此问题,EXAMPLES
的{{1}}部分底部有一个示例:
将整个树移动到子目录中,或从中删除它:
man git-filter-branch