簡體   English   中英

Git忽略除特定文件之外的所有文件

[英]Git ignore all files except particular ones

我在目錄中有很多文件,我不希望它們被git跟蹤。 所以我想忽略除.bashrc.gitignore.config/terminator/config之外的所有文件。

我正試圖在.gitignore中做這樣的事情:

*
!.gitignore
!.bashrc
!.config/terminator/config

.bashrc.gitignore文件現在沒有簽名但仍無法獲得.config/terminator/config unignored。 我怎么能用git做到這一點?

我有一個可能的解決方案但更優雅的一個沒有指定子目錄?

*
!.gitignore
!.bashrc
!.gitconfig

!.config/
!.config/terminator/
!.config/terminator/config

答案的短版是一旦混帳忽略了一些目錄 ,它前進不費心去找這個目錄 ,除非別的東西已經迫使它這樣做。 1要停止這一點,你必須明確列出目錄,或者你不想忽視,使用目錄! 項:

*
!/.bashrc
!/.config
!.config/terminator
!.config/terminator/config
!/.gitignore

那是:

*

告訴Git: 除非被覆蓋,否則忽略一切 然后最終:

!.bashrc

覆蓋.bashrc的忽略規則,依此類推。 但Git所做的是它從閱讀開始. 找到所有條目。 假設它按字母順序找到它們: .bashrc.config.editorthing.gitignore.history等等; 並假設我們有你原來的.gitignore文件:

  1. 嗯,我看.bashrc ,讓我們檢查一下......啊,第1行說忽略但是3說沒有,所以不要忽視。 結果:不予理睬。
  2. 現在我看到.config ,讓我們檢查一下。 第1行表示忽略,第2行表示.gitignore ,第3行表示.bashrc ,第4行表示保留.config/terminator/config 這不是任何一個,所以第1行適用! 結果:忽略了!
  3. 重復上述步驟。

可以說,步驟2中的操作是愚蠢的:如果忽略較短的.config則顯然不可能應用長規則,因此.config/<something>的存在應該是未被忽略的,應該觸發Git取消忽略.config 事實上,最新版本的Git試圖對此更加聰明,但是舊版本沒有:你必須明確地忽略.config (或/.config ,這里更好,因為我不會進入,但這就是為什么我在上面那樣寫的2 )。

還有一個更優雅的伎倆,但它造成的Git要慢得多,所以你可能不希望使用它。 訣竅是顯式取消忽略所有目錄:

*
!*/
!/.bashrc

等等。 但是現在,如果你有一個目錄, a數以百萬計子目錄和文件的a ,Git會掃描所有a和所有的子目錄,而在此之前,它會跳過它。


1 索引中包含.config中的文件會強制Git掃描.config 但是,您將遇到與.config/terminator相同的問題,除非索引包含.config/terminator中的文件。

2好的,我會稍微介紹一下。 它不適用於這種特殊情況,但假設你是在忽略.bashrc ,如果Git由於某種原因掃描a/ ,並且a/包含一個名為.bashrc的文件,Git就不會忽略a/.bashrc 但是,我們不需要.config/terminator上的前導斜杠,因為它包含一個嵌入的斜杠(一個不在末尾)。 這使得該名稱上的匹配成為根,而.bashrc上的匹配是非root的,因此匹配a/.bashrc

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM