首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >将许多子目录分离到一个新的、独立的Git存储库中

将许多子目录分离到一个新的、独立的Git存储库中
EN

Stack Overflow用户
提问于 2010-06-06 04:51:53
回答 5查看 46.5K关注 0票数 150

此问题基于Detach subdirectory into separate Git repository

我想要分离两个子目录,而不是分离单个子目录。例如,我的当前目录树如下所示:

代码语言:javascript
复制
/apps
  /AAA
  /BBB
  /CCC
/libs
  /XXX
  /YYY
  /ZZZ

我希望是这样的:

代码语言:javascript
复制
/apps
  /AAA
/libs
  /XXX

git filter-branch--subdirectory-filter参数将不起作用,因为它在第一次运行时会删除除给定目录之外的所有内容。我认为对所有不需要的文件使用--index-filter参数都可以(尽管很繁琐),但是如果我尝试多次运行它,我会得到以下消息:

代码语言:javascript
复制
Cannot create a new backup.
A previous backup already exists in refs/original/
Force overwriting the backup with -f

有什么想法吗?提亚

EN

回答 5

Stack Overflow用户

发布于 2011-10-21 20:52:15

为什么要多次运行filter-branch?您可以在一次扫描中完成所有操作,因此不需要强制执行(请注意,您需要在shell中启用extglob才能正常工作):

代码语言:javascript
复制
git filter-branch --index-filter "git rm -r -f --cached --ignore-unmatch $(ls -xd apps/!(AAA) libs/!(XXX))" --prune-empty -- --all

这应该会消除不需要的子目录中的所有更改,并保留所有的分支和提交(除非它们只影响修剪子目录中的文件,由于--prune-empty) -不会出现重复提交等问题。

执行此操作后,不需要的目录将被git status列为未跟踪目录。

$(ls ...)是必需的s.t.外壳程序而不是索引过滤器对extglob求值,后者使用sh内置的eval (其中extglob不可用)。有关这方面的更多详细信息,请参阅How do I enable shell options in git?

票数 29
EN

Stack Overflow用户

发布于 2014-02-18 05:06:04

我已经写了一个git过滤器来解决这个问题。它有一个很棒的名字叫git_filter,位于github上:

https://github.com/slobobaby/git_filter

它是基于优秀的libgit2实现的。

我需要拆分一个包含多个提交(大约100000个)的大型存储库,而基于git filter-branch的解决方案需要几天时间才能运行。git_filter需要一分钟来做同样的事情。

票数 7
EN

Stack Overflow用户

发布于 2018-08-07 21:37:52

代码语言:javascript
复制
git clone git@example.com:thing.git
cd thing
git fetch
for originBranch in `git branch -r | grep -v master`; do
    branch=${originBranch:7:${#originBranch}}
    git checkout $branch
done
git checkout master

git filter-branch --index-filter 'git rm --cached -qr --ignore-unmatch -- . && git reset -q $GIT_COMMIT -- dir1 dir2 .gitignore' --prune-empty -- --all

git remote set-url origin git@example.com:newthing.git
git push --all
票数 6
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/2982055

复制
相关文章

相似问题

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