首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >git过滤器分支内的倒壳球状

git过滤器分支内的倒壳球状
EN

Stack Overflow用户
提问于 2016-06-10 02:40:27
回答 2查看 244关注 0票数 1

我正在尝试一个相当复杂的git历史记录,但没有找到一个与git filter-branch一起工作的命令。本质上,我想删除所有的东西,除了几个匹配的文件和目录。

我想要运行的命令是有效的

代码语言:javascript
复制
git filter-branch -f --prune-empty --tree-filter 'rm -rf ^(FileA.java|dirB)' HEAD

但是git-filter-branch脚本会在父母身上出现。

代码语言:javascript
复制
/usr/local/Cellar/git/HEAD/libexec/git-core/git-filter-branch: eval: line 360: syntax error near unexpected token `('
/usr/local/Cellar/git/HEAD/libexec/git-core/git-filter-branch: eval: line 360: `rm -rf ^(FileA.java|dirB)'
tree filter failed: rm -rf ^(FileA.java|dirB)

我本来希望eval能够很好地处理嵌入的父类,但这也超出了我对shell/zsh的理解。

git-filter-branch中的违规代码

代码语言:javascript
复制
if [ "$filter_tree" ]; then
    git checkout-index -f -u -a ||
        die "Could not checkout the index"
    # files that $commit removed are now still in the working tree;
    # remove them, else they would be added again
    git clean -d -q -f -x
    eval "$filter_tree" < /dev/null ||
        die "tree filter failed: $filter_tree"
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2016-06-10 04:39:39

代码语言:javascript
复制
git filter-branch -f --index-filter '
        git read-tree --empty
        git reset $GIT_COMMIT fileA.java dirB dirC
' -- --all -- fileA.java dirB dirC

只会看到接触到这些路径的提交,并且(b)不会费心地签出永远不会被检查的内容。唯一需要--prune-empty的时间是当您遇到或生成不改变任何内容的提交时,rev列表args (在第一个--之后)跳过了所有这些。

票数 3
EN

Stack Overflow用户

发布于 2016-06-10 03:10:53

仍然不确定为什么我不能让它与zsh一起工作,所以不得不用bash脚本包装。

代码语言:javascript
复制
$ cat ../purge.sh
#!/bin/bash
shopt -s extglob
rm -rf -- !(FileA.java|dirB|dirC)

$ git filter-branch -f --prune-empty --tree-filter '../purge.sh' HEAD
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/37739109

复制
相关文章

相似问题

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