vscode中 .gitignore 規(guī)則不生效

本文主要記錄了在使用Git過程中遇到的一個問題味悄,也就是標題所說的在.gitignore文件里添加的忽略規(guī)則沒有生效,導(dǎo)致本應(yīng)該被忽略的文件/文件夾和目錄總是不斷的被Git納入版本管理塌鸯,每當項目文件修改都會重復(fù)引發(fā)跟蹤侍瑟!

首先要說明下,本文所提及的問題丙猬,Git官方是有很詳細的文檔進行說明的涨颜,包括具體的情景和解決辦法,所以后面會引用Git官方中文文檔的說明茧球,本文算是一篇記錄筆記庭瑰,會結(jié)合我自己的理解和案例來寫,這里建議先看Git文檔的這一章節(jié):2.2 Git 基礎(chǔ) - 記錄每次更新到倉庫抢埋,重點在文檔底部的移除文件節(jié)點弹灭,如果對Git比較不熟悉的朋友,強烈建議讀完整個章節(jié)揪垄。

一捡鱼、.gitignore規(guī)則無效的原因

據(jù)我所知導(dǎo)致.gitignore里的忽略規(guī)則失效只有兩種情況,當然我對Git的使用和理解比較淺薄酷愧,也只能想到這兩個方面:一種是忽略規(guī)則的語法錯誤驾诈,這種情形好處理,只要修正錯誤的語法就可以了伟墙。PS:本文不對語法錯誤的問題詳細說明翘鸭,畢竟每個人情況不同。排查語法問題這事我也不知道怎么舉例戳葵,總之只要符合官方規(guī)范的就可以了就乓,需要注意的好像也就一個路徑問題吧?拱烁!

另一種則是本文要重點說明的情況:項目中的文件或目錄已經(jīng)被納入到Git的版本管理里面/跟蹤文件清單生蚁,此時你再往.gitignore里添加此文件/目錄的忽略規(guī)則就會發(fā)現(xiàn)毫無作用,因為已經(jīng)被Git跟蹤(track)的文件/目錄無法被.gitignore忽略掉戏自!邦投。

這里再對上面一段所說的進行詳細說明,所謂“已經(jīng)被納入到Git的版本管理里面/跟蹤文件清單”擅笔,大體上指的是下面的三種情況:

  1. 已使用add命令開始跟蹤項目文件或者將修改的文件放入暫存區(qū)/索引
  2. 已使用commit命令提交更新到本地倉庫
  3. 已使用push命令將項目文件推送到了Git遠程倉庫了(例如GitHub)

上述的三種操作只要進行了其中一項志衣,再添加對應(yīng)文件的忽略規(guī)則都是不生效的屯援!PS:這三個命令在GUI客戶端上一般都可以找到對應(yīng)的按鈕和操作。

這里額外提下念脯,如果按照反向理解狞洋,也就是說只要是文件/目錄還沒有被Git跟蹤,那么你添加的忽略規(guī)則都是有效的绿店,重點在于文件的是否屬于被跟蹤(track)狀態(tài)吉懊。

二、具體的解決方法-配合案例演示

先說使用Git命令處理的方法假勿,這也是我比較推薦的方式借嗽,后面還會講一個簡單的方法但并不推薦,因為不利于Git的學習與掌握转培,而且有部分限制恶导。這里額外再提醒下,官方文檔是有詳細的解決方法的堡距,建議閱讀官方文檔甲锡,接下來會結(jié)合一個案例來進行說明。

2.1 案例背景說明

這里我在VS里新建了一個ASP.NET MVC項目并進行生成羽戒,項目生成后會創(chuàng)建bin文件夾(注意這時候還未添加對應(yīng)的忽略規(guī)則,bin文件夾里都是編譯生成的文件):

案例文件夾結(jié)構(gòu)

此時由于疏忽大意或操作失誤不小心使用add命令對bin文件夾以及里面所有文件進行了跟蹤(例如使用git add -A虎韵,或者直接用GUI客戶端批量操作)易稠,發(fā)現(xiàn)后想要亡羊補牢在.gitignore里添加了[Bb]in/這條規(guī)則([Bb]in/=Bin/+bin/,也就是大小寫都能匹配到)包蓝,但是發(fā)現(xiàn)并沒什么用驶社,在命令行窗口使用git status可以看到bin文件夾里的文件無法被忽略:

.gitignore無效截圖

GUI界面截圖:

可視化界面依然顯示綠色加號

2.2 未進行提交操作的處理方式

如果此時還未進行提交操作,趕緊使用如下命令可及時挽救:git rm --cached <file>测萎,其中<file>表示要從暫存區(qū)移除出去的文件名或者目錄路徑亡电,注意可以使用通配符。不過Git有自己的通配符規(guī)則硅瞧,所以要注意下差異份乒,例如官方文檔有提到在*號前面是需要加反斜杠\的(我有測試過不加也沒事但是最好按照規(guī)范來),結(jié)合上面的案例腕唧,因為我們要移除bin文件夾下的所有文件或辖,所以完整的Git命令為(注意路徑一定要正確):

git rm --cached WebApplication1/WebApplication1/bin/\*
使用git rm --cached刪除暫存
刪除暫存后查詢狀態(tài)

這里要留意忽略規(guī)則的添加時機,在命令執(zhí)行后會有不同的影響枣接,假設(shè)忽略規(guī)則是在git rm --cached <file>命令執(zhí)行前就設(shè)置了颂暇,那么當命令執(zhí)行完成后馬上就可以看到效果,bin文件夾及里面的所有文件會被Git直接忽略但惶。如果在命令執(zhí)行后還沒有添加忽略規(guī)則耳鸯,你會發(fā)現(xiàn)bin文件夾下的文件變成未被跟蹤的狀態(tài)湿蛔,也就是最初的狀態(tài),此時你再添加忽略規(guī)則這些文件就會被忽略了县爬。

2.3 文件已經(jīng)進行提交操作的處理方式

如果bin文件夾已經(jīng)被Git跟蹤并提交到了本地版本庫甚至遠程版本庫(例如GitHub)阳啥,解決方法和上一小節(jié)2.2中的方法是一樣的,依然是使用git rm --cached <file> 這個命令捌省。PS:在執(zhí)行此命令前Git最好能保持干凈的狀態(tài),也就是"nothing to commit, working tree clean"苫纤。

注意!8倩骸卷拘!在命令執(zhí)行后受影響的文件都會變成未跟蹤狀態(tài),此時一定要馬上使用git commit -m '備注信息'命令提交這部分修改祝高,如果還未設(shè)置.gitignore文件則可以設(shè)置后一并提交此次更新到本地倉庫栗弟。這里千萬不要使用任何GUI客戶端去操作!因為不同GUI客戶端可能有不一樣的執(zhí)行結(jié)果(例如可能會將文件重新納入跟蹤工闺,等于剛剛的操作白費了)乍赫。

commit命令

2.4 簡單的解決方法:直接刪除物理文件

在上面兩小節(jié)2.2-2.3中使用git rm --cached <file>命令最終只是將文件從暫存區(qū)移除而不刪除物理文件(也就是只刪除Git對文件或目錄的跟蹤狀態(tài)),這樣的好處是一些項目開發(fā)或調(diào)試需要的文件都可以保留下來陆蟆,例如本地日志文件雷厂、編譯文件、本地數(shù)據(jù)庫叠殷、測試圖片之類的改鲫。

如果遇到實在依賴GUI客戶端或者對Git命令不熟悉,也沒有時間去查閱官方文檔的情況林束,也只能通過簡單的方法去處理了像棘,大體操作流程如下:

  1. 先將文件進行備份,除非能確定文件刪除后不需要還原回來壶冒,否則一定要做好備份
  2. 備份完成后直接從硬盤/本地工作目錄里刪除這些無法被忽略掉的文件或文件夾
  3. 然后馬上提交這部分修改到Git版本庫里(通過GUI客戶端進行操作或者使用Git命令都可以)
  4. 接著在.gitignore文件中添加忽略規(guī)則并提交到Git版本庫里
  5. 最后將之前刪除的文件拷貝回來(注意第一步已經(jīng)做了備份)

完成上面5個步驟可以測試下忽略規(guī)則是否有重新生效缕题。

最后附上官方文檔的截圖:

三、總結(jié)

先來一段碎碎念胖腾,作為一名輕度的Git使用者烟零,總是為了圖方便而使用類似GitHub DeskTop的GUI客戶端。偷懶的結(jié)果就是對Git的掌握處于半桶水的水平胸嘁,只知道怎么用而沒有深入理解和搞懂瓶摆,也就是所謂的“只知其然,而不知其所以然”性宏。最近遇到了這個小問題徹底暴露了隱藏的缺陷群井,只好靜下心來好好讀一遍官方文檔,從頭理解Git并學習命令行的使用方式毫胜。

最后總結(jié)下兩點:

  1. 良好的開發(fā)習慣還是要有的书斜,在項目添加到Git版本控制庫之前诬辈,一定要先設(shè)置好忽略規(guī)則。
  2. 已經(jīng)被Git跟蹤(track)的文件是不受.gitignore影響的荐吉。
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末焙糟,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子样屠,更是在濱河造成了極大的恐慌穿撮,老刑警劉巖,帶你破解...
    沈念sama閱讀 207,248評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件痪欲,死亡現(xiàn)場離奇詭異悦穿,居然都是意外死亡,警方通過查閱死者的電腦和手機业踢,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,681評論 2 381
  • 文/潘曉璐 我一進店門栗柒,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人知举,你說我怎么就攤上這事瞬沦。” “怎么了雇锡?”我有些...
    開封第一講書人閱讀 153,443評論 0 344
  • 文/不壞的土叔 我叫張陵逛钻,是天一觀的道長。 經(jīng)常有香客問我锰提,道長绣的,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 55,475評論 1 279
  • 正文 為了忘掉前任欲账,我火速辦了婚禮,結(jié)果婚禮上芭概,老公的妹妹穿的比我還像新娘赛不。我一直安慰自己,他們只是感情好罢洲,可當我...
    茶點故事閱讀 64,458評論 5 374
  • 文/花漫 我一把揭開白布踢故。 她就那樣靜靜地躺著,像睡著了一般惹苗。 火紅的嫁衣襯著肌膚如雪殿较。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,185評論 1 284
  • 那天桩蓉,我揣著相機與錄音淋纲,去河邊找鬼。 笑死院究,一個胖子當著我的面吹牛洽瞬,可吹牛的內(nèi)容都是我干的本涕。 我是一名探鬼主播,決...
    沈念sama閱讀 38,451評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼伙窃,長吁一口氣:“原來是場噩夢啊……” “哼菩颖!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起为障,我...
    開封第一講書人閱讀 37,112評論 0 261
  • 序言:老撾萬榮一對情侶失蹤晦闰,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后鳍怨,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體呻右,經(jīng)...
    沈念sama閱讀 43,609評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,083評論 2 325
  • 正文 我和宋清朗相戀三年京景,在試婚紗的時候發(fā)現(xiàn)自己被綠了窿冯。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,163評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡确徙,死狀恐怖醒串,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情鄙皇,我是刑警寧澤芜赌,帶...
    沈念sama閱讀 33,803評論 4 323
  • 正文 年R本政府宣布,位于F島的核電站伴逸,受9級特大地震影響缠沈,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜错蝴,卻給世界環(huán)境...
    茶點故事閱讀 39,357評論 3 307
  • 文/蒙蒙 一洲愤、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧顷锰,春花似錦柬赐、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,357評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至束世,卻和暖如春酝陈,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背毁涉。 一陣腳步聲響...
    開封第一講書人閱讀 31,590評論 1 261
  • 我被黑心中介騙來泰國打工沉帮, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 45,636評論 2 355
  • 正文 我出身青樓遇西,卻偏偏與公主長得像馅精,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子粱檀,可洞房花燭夜當晚...
    茶點故事閱讀 42,925評論 2 344

推薦閱讀更多精彩內(nèi)容