[英]remove all but selected files in all Git commits
因此,此脚本中git filter-branch --index-filter
的棘手部分是从索引中获取文件列表,过滤掉特定文件,然后删除结果列表。
我已经将其实现为单独的可执行脚本git-update-index-keeping-only
; 这是粗略的实现:
git ls-files --full-name \
| fgrep -v -x -f <(echo "$FILELIST") \
| xargs git rm --cached "$@" --
在这里,我对文件名中的换行符和空格不会怎么想(对于xargs
,空格必须是个问题,除非告诉它为每个参数再次调用该命令,而我并不是为了提高效率),对此我没有太多考虑。
在另一个对我的用例有用的脚本中记录了一个用法示例:在2次提交(例如,“上游”提交和最重要的一次提交)之间的差异中获取那些经过修改或添加的有趣列表。
因为是git-filter-only-files-modified-since ; 其本质是这样的:
FILES="$(git diff-tree "$SINCE": HEAD: \
-r --name-only --diff-filter=MACRT)"
export FILES
git filter-branch \
--index-filter 'echo "$FILES" | git-update-index-keeping-only -q'
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.