Linux與命令列基礎
在以 Git 管理的專案的 .gitignore 中寫了「build/」,但以前提交過的 build/out.log 的變更,仍持續出現在 git status 中。理由是下列何者?
- A.gitignore 只對尚未追蹤的檔案有效,所以已追蹤的檔案必須用 git rm --cached 取消追蹤
- B.gitignore 中不能寫目錄,必須逐一寫出要忽略的檔案名稱
- C在 .gitignore 檔案本身被 git add 並提交之前,它對任何檔案都沒有效果
查看答案與解析
正確答案:A. .gitignore 只對尚未追蹤的檔案有效,所以已追蹤的檔案必須用 git rm --cached 取消追蹤
.gitignore 是把尚未追蹤(從未提交或 git add 過)的檔案,排除在 git status 的清單與 git add 的對象之外的設定。已經在追蹤的檔案,即使寫進 .gitignore 也會繼續被追蹤,所以變更會持續顯示。執行 git rm --cached build/out.log 會保留工作目錄中的檔案,只取消追蹤,把這項變更提交之後,.gitignore 的設定就會生效。模擬的輸出或建置結果這類大型產物,最好一開始就寫進 .gitignore。
- A. 正確。.gitignore 對追蹤中的檔案無效,要用 git rm --cached 取消追蹤。
- B. 像「build/」這樣在末尾加上斜線,就能忽略名為 build 的目錄的全部內容。
- C. .gitignore 只要存在於工作目錄中,即使沒有提交也會生效。不過,為了讓團隊使用相同設定,一般會把它提交。