解決.gitignore文件忽略規(guī)則無(wú)效git依然跟蹤修改的問(wèn)題

本文主要記錄了在使用Git過(guò)程中遇到的一個(gè)問(wèn)題愁拭,也就是標(biāo)題所說(shuō)的在.gitignore文件里添加的忽略規(guī)則沒(méi)有生效癣疟,導(dǎo)致本應(yīng)該被忽略的文件/文件夾和目錄總是不斷的被Git納入版本管理弊琴,每當(dāng)項(xiàng)目文件修改都會(huì)重復(fù)引發(fā)跟蹤!

首先要說(shuō)明下,本文所提及的問(wèn)題啄清,Git官方是有很詳細(xì)的文檔進(jìn)行說(shuō)明的晋修,包括具體的情景和解決辦法吧碾,所以后面會(huì)引用Git官方中文文檔的說(shuō)明,本文算是一篇記錄筆記墓卦,會(huì)結(jié)合我自己的理解和案例來(lái)寫倦春,這里建議先看Git文檔的這一章節(jié):2.2 Git 基礎(chǔ) - 記錄每次更新到倉(cāng)庫(kù),重點(diǎn)在文檔底部的移除文件節(jié)點(diǎn)落剪,如果對(duì)Git比較不熟悉的朋友睁本,強(qiáng)烈建議讀完整個(gè)章節(jié)

一凡泣、.gitignore規(guī)則無(wú)效的原因

據(jù)我所知導(dǎo)致.gitignore里的忽略規(guī)則失效只有兩種情況枉疼,當(dāng)然我對(duì)Git的使用和理解比較淺薄,也只能想到這兩個(gè)方面:一種是忽略規(guī)則的語(yǔ)法錯(cuò)誤鞋拟,這種情形好處理骂维,只要修正錯(cuò)誤的語(yǔ)法就可以了。PS:本文不對(duì)語(yǔ)法錯(cuò)誤的問(wèn)題詳細(xì)說(shuō)明贺纲,畢竟每個(gè)人情況不同席舍。排查語(yǔ)法問(wèn)題這事我也不知道怎么舉例,總之只要符合官方規(guī)范的就可以了哮笆,需要注意的好像也就一個(gè)路徑問(wèn)題吧来颤?!

另一種則是本文要重點(diǎn)說(shuō)明的情況:項(xiàng)目中的文件或目錄已經(jīng)被納入到Git的版本管理里面/跟蹤文件清單稠肘,此時(shí)你再往.gitignore里添加此文件/目錄的忽略規(guī)則就會(huì)發(fā)現(xiàn)毫無(wú)作用福铅,因?yàn)橐呀?jīng)被Git跟蹤(track)的文件/目錄無(wú)法被.gitignore忽略掉!项阴。

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

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

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

這里額外提下,如果按照反向理解汛兜,也就是說(shuō)只要是文件/目錄還沒(méi)有被Git跟蹤巴粪,那么你添加的忽略規(guī)則都是有效的,重點(diǎn)在于文件的是否屬于被跟蹤(track)狀態(tài)粥谬。

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

先說(shuō)使用Git命令處理的方法,這也是我比較推薦的方式漏策,后面還會(huì)講一個(gè)簡(jiǎn)單的方法但并不推薦派哲,因?yàn)椴焕贕it的學(xué)習(xí)與掌握,而且有部分限制掺喻。這里額外再提醒下芭届,官方文檔是有詳細(xì)的解決方法的,建議閱讀官方文檔感耙,接下來(lái)會(huì)結(jié)合一個(gè)案例來(lái)進(jìn)行說(shuō)明喉脖。

2.1 案例背景說(shuō)明

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

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

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

.gitignore無(wú)效截圖

GUI界面截圖:

可視化界面依然顯示綠色加號(hào)

2.2 未進(jìn)行提交操作的處理方式

如果此時(shí)還未進(jìn)行提交操作层皱,趕緊使用如下命令可及時(shí)挽救:git rm --cached <file>,其中<file>表示要從暫存區(qū)移除出去的文件名或者目錄路徑赠潦,注意可以使用通配符叫胖。不過(guò)Git有自己的通配符規(guī)則,所以要注意下差異她奥,例如官方文檔有提到在*號(hào)前面是需要加反斜杠\的(我有測(cè)試過(guò)不加也沒(méi)事但是最好按照規(guī)范來(lái))瓮增,結(jié)合上面的案例,因?yàn)槲覀円瞥?code>bin文件夾下的所有文件哩俭,所以完整的Git命令為(注意路徑一定要正確):

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

這里要留意忽略規(guī)則的添加時(shí)機(jī)绷跑,在命令執(zhí)行后會(huì)有不同的影響,假設(shè)忽略規(guī)則是在git rm --cached <file>命令執(zhí)行前就設(shè)置了凡资,那么當(dāng)命令執(zhí)行完成后馬上就可以看到效果砸捏,bin文件夾及里面的所有文件會(huì)被Git直接忽略。如果在命令執(zhí)行后還沒(méi)有添加忽略規(guī)則,你會(huì)發(fā)現(xiàn)bin文件夾下的文件變成未被跟蹤的狀態(tài)垦藏,也就是最初的狀態(tài)梆暖,此時(shí)你再添加忽略規(guī)則這些文件就會(huì)被忽略了。

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

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

注意;稀!袜爪!在命令執(zhí)行后受影響的文件都會(huì)變成未跟蹤狀態(tài)蠕趁,此時(shí)一定要馬上使用git commit -m '備注信息'命令提交這部分修改,如果還未設(shè)置.gitignore文件則可以設(shè)置后一并提交此次更新到本地倉(cāng)庫(kù)辛馆。這里千萬(wàn)不要使用任何GUI客戶端去操作俺陋!因?yàn)椴煌珿UI客戶端可能有不一樣的執(zhí)行結(jié)果(例如可能會(huì)將文件重新納入跟蹤,等于剛剛的操作白費(fèi)了)昙篙。

commit命令

2.4 簡(jiǎn)單的解決方法:直接刪除物理文件

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

如果遇到實(shí)在依賴GUI客戶端或者對(duì)Git命令不熟悉映屋,也沒(méi)有時(shí)間去查閱官方文檔的情況,也只能通過(guò)簡(jiǎn)單的方法去處理了同蜻,大體操作流程如下:

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

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

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

三瘫析、總結(jié)

先來(lái)一段碎碎念,作為一名輕度的Git使用者默责,總是為了圖方便而使用類似GitHub DeskTop的GUI客戶端贬循。偷懶的結(jié)果就是對(duì)Git的掌握處于半桶水的水平,只知道怎么用而沒(méi)有深入理解和搞懂桃序,也就是所謂的“只知其然甘有,而不知其所以然”。最近遇到了這個(gè)小問(wèn)題徹底暴露了隱藏的缺陷葡缰,只好靜下心來(lái)好好讀一遍官方文檔亏掀,從頭理解Git并學(xué)習(xí)命令行的使用方式忱反。

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

  1. 良好的開(kāi)發(fā)習(xí)慣還是要有的,在項(xiàng)目添加到Git版本控制庫(kù)之前滤愕,一定要先設(shè)置好忽略規(guī)則温算。
  2. 已經(jīng)被Git跟蹤(track)的文件是不受.gitignore影響的。

轉(zhuǎn)載:由十有三創(chuàng)作**
來(lái)源 https://shiyousan.com/post/636470505667009340

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末间影,一起剝皮案震驚了整個(gè)濱河市注竿,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌魂贬,老刑警劉巖巩割,帶你破解...
    沈念sama閱讀 206,311評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異付燥,居然都是意外死亡宣谈,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,339評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門键科,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)闻丑,“玉大人,你說(shuō)我怎么就攤上這事勋颖∴挛耍” “怎么了?”我有些...
    開(kāi)封第一講書(shū)人閱讀 152,671評(píng)論 0 342
  • 文/不壞的土叔 我叫張陵饭玲,是天一觀的道長(zhǎng)侥祭。 經(jīng)常有香客問(wèn)我,道長(zhǎng)茄厘,這世上最難降的妖魔是什么矮冬? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 55,252評(píng)論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮蚕断,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘入挣。我一直安慰自己亿乳,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,253評(píng)論 5 371
  • 文/花漫 我一把揭開(kāi)白布径筏。 她就那樣靜靜地躺著葛假,像睡著了一般。 火紅的嫁衣襯著肌膚如雪滋恬。 梳的紋絲不亂的頭發(fā)上聊训,一...
    開(kāi)封第一講書(shū)人閱讀 49,031評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音恢氯,去河邊找鬼带斑。 笑死鼓寺,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的勋磕。 我是一名探鬼主播妈候,決...
    沈念sama閱讀 38,340評(píng)論 3 399
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼挂滓!你這毒婦竟也來(lái)了苦银?” 一聲冷哼從身側(cè)響起,我...
    開(kāi)封第一講書(shū)人閱讀 36,973評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤赶站,失蹤者是張志新(化名)和其女友劉穎幔虏,沒(méi)想到半個(gè)月后,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體贝椿,經(jīng)...
    沈念sama閱讀 43,466評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡想括,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,937評(píng)論 2 323
  • 正文 我和宋清朗相戀三年,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了团秽。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片主胧。...
    茶點(diǎn)故事閱讀 38,039評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖习勤,靈堂內(nèi)的尸體忽然破棺而出踪栋,到底是詐尸還是另有隱情,我是刑警寧澤图毕,帶...
    沈念sama閱讀 33,701評(píng)論 4 323
  • 正文 年R本政府宣布夷都,位于F島的核電站,受9級(jí)特大地震影響予颤,放射性物質(zhì)發(fā)生泄漏囤官。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,254評(píng)論 3 307
  • 文/蒙蒙 一蛤虐、第九天 我趴在偏房一處隱蔽的房頂上張望党饮。 院中可真熱鬧,春花似錦驳庭、人聲如沸刑顺。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 30,259評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蹲堂。三九已至,卻和暖如春贝淤,著一層夾襖步出監(jiān)牢的瞬間柒竞,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 31,485評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工播聪, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留朽基,地道東北人布隔。 一個(gè)月前我還...
    沈念sama閱讀 45,497評(píng)論 2 354
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像踩晶,于是被迫代替她去往敵國(guó)和親执泰。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,786評(píng)論 2 345