修改.gitignore后不生效


 

1.問題背景

 

 

項目有一些開發時用的配置文件,需要用到所以不能刪,但是卻不想提交改動。

理所當然地想到將它加入 .gitignore 規則中,但是我的改動還是被 git 被捕捉到了,為啥呢?

gitignore - Specifies intentionally untracked files to ignore

官方文檔給出了標准答案,原來 .gitignore 只對未跟蹤的文件起作用!

已跟蹤的文件是指那些被納入了版本控制的文件,在上一次提交中有它們的記錄。那么未跟蹤文件就是指那些從沒提交過的文件。

因為我之前已經使用提交過了,所以.gitignore也救不了我 。

那我現在已經覆水難收的情況下,想要忽略 index.scss 該怎么做?

2.解決方案

我與 git 的對話

【我】:我的目的是在倉庫里面保留 index.scss,但是要所有人忽略它的改動。你能做到嗎?

【git】:我做不到,我是個版本控制的倉庫,我要為所有文件的版本負責,而不是你存儲文件的中轉站!但是你可以這樣:

  • 別讓我管理你的 index.scss,踢出我的版本控制,存在自個兒的電腦里。
  • 暫時只忽略你的文件改動,別人已加到版本庫的文件改動,你可管不着。

讓我們來看看根據 git 提供的思路,如何實踐。

(1)取消跟蹤,刪除遠程文件(推薦)

你要做的

  • 先將 src/index.scss 加入 .gitignore 文件。
  • 再執行以下命令:
git rm -r --cached .

git add .

git commit -m "update gitignore"

 

在你的電腦進行以上操作后,index.scss 正式脫離了版本管理的管制。git rm --cached 會保留你本機的文件,但是會從版本庫里面刪除。

其他電腦要做的

  • git pull
  • 將 index.scss 加回來

因為其他主機(您同事的電腦等等)在 git pull 你以上的改動時,index.scss 會被刪除,所以 index.scss 需要加回來。

可以手動加回來,也可以使用構建工具初始化自動生成 index.scss 文件。

(2)暫時忽略已跟蹤文件的變更,不刪除遠程文件(不推薦)

你要做的

git update-index --assume-unchanged src/index.scss

其他電腦要做的

git update-index --assume-unchanged src/index.scss

git update-index 為一個單獨文件創建暫存區,--assume-unchanged 通知 git 不要再監控這個文件的改動了。

合起來的意思是:我單獨把你拎出來,暫時先跟蹤你。因為命令只對當前工作區生效,同理其他主機也要進行同樣的操作。

為什么推薦方案(1)不推薦方案(2)?

方案(2)非常純粹,一招鮮吃遍天。

但是它容易出錯,如果某個同事忘記執行這條指令,將 index.scss 提交到了版本庫, 那么其他人都需要一起——重新執行命令,再次讓版本庫忽略 index.scss。

過來人告訴你,這方法真的不好維護。

使用方案(1),因為文件已經刪了,且已經將其加入到了 .gitignore,后續的提交都不會跟蹤這份新的 index.scss 文件。同事忘不忘記操作也只是影響他自己,而且只需一次操作,無后顧之憂。

資料

 

來源:https://zhuanlan.zhihu.com/p/270144760

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM