git的文件操作本質上來講是基於文件索引來做追蹤的。
至於忽略未跟蹤(untrack)文件文件,git提供了三種方式
1 .gitignore
2 git config --global core.excludesfile
3 git/info/exclude
網上有很多參考資料,可自行查閱。
不同語言項目大致需要忽略的文件,也已有大量現成模板。
至於如何忽略已跟蹤(tracked)文件,使得當本地某系文件(尤其是配置文件發生改變時,不需要體現在git變化列表中)有以下兩種方式:
1.git update-index --assume-unchanged /path/file 與git update-index --no-assume-unchanged /path/file
2.git update-index --skip-worktree /path/file 與git update-index --no-skip-worktree /path/file
此時再對/path/file進行更改,你會發現不會體現在git status列表中
有很多文章介紹采取git rm --cache的方式,不可取,這種方法本質上是將所有文件都刪除了
解釋:
--assume-unchanged 假定開發人員不會更改文件。此標記旨在為無變化文件夾(如 SDK)改善性能。
--skip-worktree 用於命 GIT 不再染指特定文件——即便開發人員可能更改它——的情形。例如,如果主源碼庫上游承載某些即將投入生產的配置文件而你不希望意外的提交影響到那些文件,--skip-worktree 正是你的菜。
所以我建議使用git update-index --skip-worktree來進行忽略
用以下命令可以查詢被skip-worktree命令忽略的文件
git ls-files -v | grep -i ^S
極端情況:
某些已跟蹤且被跳過的文件在master分支上發生了變化,與本地沖突導致無法進行pull操作。
建議解決步驟如下:
1.檢查被跳過的文件
git ls-files -v | grep -i ^S
window下沒有grep命令,執行
git ls-files -v
2.發現被跳過的文件在沖突列表中則取消跳過
git update-index --no-skip-worktree /path/file
3.使用stash暫存本地版本
git stash
4.拉取最新文件
git pull
5.自動解決
git stash pop
6.各種方式解決沖突
...
7.重新將該文件加入跳過列表
git update-index --assume-unchanged path/file
git 提供多種處理沖突的方法,自行搜索。