[英]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.