有時候我們本地開發的時會需要忽略一些個人使用的檔案,避免 commit 到不需要的檔案,通常會這樣做:

  1. .gitconfig 加入 core.excludesfile
  2. 直接修改 .git/info/exclude

但是某些情況要忽略已追蹤的檔案,這些方法行不通,該怎麼處理?


1. 忽略已追蹤

git update-index --skip-worktree [<file>...]

2. 解除忽略

git update-index --no-skip-worktree [<file>...]

3. 顯示忽略

git ls-files -v | grep ^S


Aliases

可以加入 alias 方便操作

ignore = update-index --skip-worktree
unignore = update-index --no-skip-worktree
ignored = !git ls-files -v | grep ^S

assume-unchanged vs skip-worktree

update-index 有兩個很相似的參數:

  • assume-unchanged 在使用 git reset --hard 時會改變 index,如果 repository 被忽略的檔案有修改時,git pull 會直接覆蓋被忽略的狀態

  • skip-worktree 則一定要手動下 --no-skip-worktree 才能成功進行 git pull

所以為了了解被忽略的檔案在 remote 是否有發生改變,還是推薦使用 --skip-worktree


References


2019-01-13