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命令,執行
2.發現被跳過的文件在衝突列表中則取消跳過html
git update-index --no-skip-worktree /path/file
3.使用stash暫存本地版本nginx
7.從新將該文件加入跳過列表
git update-index --assume-unchanged path/file
git 提供多種處理衝突的方法,自行搜索。