首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >分离一个存储库的子目录并使其成为另一个存储库的分支?

问分离一个存储库的子目录并使其成为另一个存储库的分支?
EN

Stack Overflow用户
提问于 2012-03-01 05:13:36
回答 1查看 438关注 0票数 1

我有一个git代码库,比如repoA,里面有很多子目录。我如何分离其中一个子目录,比如dir1,并将其作为单独的分支(带历史记录)添加到另一个存储库?

其次,如何从repoA中删除分离的子目录的历史记录?

EN

回答 1

Stack Overflow用户

发布于 2012-03-02 21:23:45

问题的第一部分:

如何分离其中一个子目录,例如dir1,并将其作为单独的分支(带历史记录)添加到另一个存储库?

代码语言:javascript
复制
git checkout -b tempBranch
git filter-branch --subdirectory-filter dir1 --prune-empty 

在第二个存储库中:

代码语言:javascript
复制
git remote add filtered_dir1 ../original_repo
git fetch filtered_dir1
git merge filtered_dir1/tempBranch

问题的第二部分:

其次,如何从repoA中删除分离的子目录的历史记录?

$ git筛选器分支--索引-筛选器"git rm -r -f --cached --ignore--unmatch dir1“--prune-empty

这可能会失败,并显示无法进行备份的警告;我不确定这是怎么回事,但是添加-f将强制git-filter-branch运行。

这将在current分支only中运行。如果您想在所有分支上运行它,可以附加-- --all。请注意-- --all。

一些注意事项:

  1. 运行git filter-branch时,您将过滤您所在的分支。(很明显,如果你仔细想想的话)。如果您正在尝试提取一些历史记录以推送到第二个存储库,您可能希望在的新分支上执行git filter-branch,这样原始存储库就不会丢失任何内容。
  2. This question中有一些有用的信息。
  3. git filter-branch --subdirectory-filter将使subdirectory成为分支的新根目录-它会将文件从subdirectory移动到/。为了解决这个问题,在man git-filter-branch的EXAMPLES部分的底部有一个示例:

要将整个树移动到子目录中或从中删除,请执行以下操作:

代码语言:javascript
复制
git filter-branch --index-filter \            'git ls-files -s | sed "s-\t\"\*-&newsubdir/-" |                    GIT\_INDEX\_FILE=$GIT\_INDEX\_FILE.new \                            git update-index --index-info &&             mv "$GIT\_INDEX\_FILE.new" "$GIT\_INDEX\_FILE"' HEAD
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/9506710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档