簡體   English   中英

gitignore 目錄下所有擴展名文件

[英]gitignore all files of extension in directory

有沒有辦法忽略目錄中某個類型的所有文件?

**顯然對 git 毫無意義,所以這不起作用:

/public/static/**/*.js

這個想法是匹配任意嵌套文件夾。

根據文檔,從1.8.2.1版本開始, git似乎支持**語法。

與完整路徑名匹配的模式中的兩個連續星號(“ ** ”)可能具有特殊含義:

  • 前導“ ** ”后跟斜杠表示在所有目錄中都匹配。 例如,“ **/foo ”在任何地方匹配文件或目錄“ foo ”,與模式“ foo ”相同。 **/foo/bar ” 匹配文件或目錄“ bar ” 直接在目錄“ foo ”下的任何地方。

  • 尾隨的“ /** ”匹配里面的所有內容。 例如,“ abc/** ”匹配目錄“ abc ”中的所有文件,相對於.gitignore文件的位置,具有無限深度。

  • 斜杠后跟兩個連續的星號,然后斜杠匹配零個或多個目錄。 例如,“ a/**/b ”匹配“ a/b ”、“ a/x/b ”、“ a/x/y/b ”等。

  • 其他連續的星號被認為是無效的。

從未嘗試過,但git help ignore建議如果你在/public/static中放置一個帶有*.js.gitignore ,它會做你想做的事。

注意:請務必在下面查看 Joeys 的回答:如果您想忽略特定子目錄中的文件,那么本地 .gitignore 是正確的解決方案(本地性很好)。 但是,如果您需要將相同的模式應用於整個 repo,那么 ** 解決方案會更好。

更新:看看@Joey 的回答:Git 現在支持模式中的**語法。 兩種方法都應該可以正常工作。


gitignore(5) 手冊頁指出:

從與路徑相同的目錄或任何父目錄中的 .gitignore 文件讀取的模式,較高級別文件(直到工作樹的頂層)中的模式被低級別文件中的模式覆蓋到目錄包含文件。

這意味着在您的 repo 的任何給定目錄中的.gitignore文件中的模式都會影響該目錄所有子目錄

您提供的模式

/public/static/**/*.js

不太正確,首先是因為(正如您正確指出的)Git 不使用**語法。 此外,前導/將該模式錨定到路徑名的開頭。 (因此, /public/static/*.js將匹配/public/static/foo.js匹配/public/static/foo/bar.js 。) 刪除前導 /也不起作用,匹配諸如 public/static/foo.js之類的路徑 public/static/foo.jsfoo/public/static/bar.js 編輯:僅僅刪除前導斜杠也不起作用——因為該模式仍然包含一個斜杠,它被 Git 視為一個普通的、非遞歸的 shell glob(感謝@Joey Hoer指出這一點)。

正如@ptyx 建議的那樣,您需要做的是創建文件<repo>/public/static/.gitignore並僅包含以下模式:

*.js

沒有前導/ ,因此它將匹配路徑的任何部分,並且該模式只會應用於/public/static目錄及其子目錄中的文件。

我嘗試在我的 vscode windows 10中打開.gitignore文件。 在那里你可以看到,一些以前添加的忽略文件(如果有的話)。

要創建一個新規則以忽略具有(.js)擴展名的文件,請附加文件的擴展名,如下所示:

*.js

這將忽略git存儲庫中的所有.js文件。

要從特定目錄中排除某些類型的文件,您可以添加以下內容:

**/foo/*.js

這將忽略僅 /foo/ 目錄中的所有 .js 文件。

詳細學習可以訪問: about git-ignore

要忽略未跟蹤的文件,只需轉到 .git/info/exclude。 排除是具有忽略擴展名或文件列表的文件。

我相信最簡單的解決方案是使用find 我不喜歡在子目錄中有多個.gitignore ,我更喜歡管理一個獨特的頂級.gitignore 為此,您只需將找到的文件附加到您的.gitignore 假設/public/static/是你的項目/git home 我會使用類似的東西:

find . -type f -name *.js | cut -c 3- >> .gitignore

我發現在開始時刪除./通常是 git 了解要避免哪些文件所必需的。 因此cut -c 3-

除了其他答案之外,幾乎沒有其他提示(如果您很幸運並且問題是由於其他原因引起的,這可能會起作用):

  1. 確保你忽略代碼中大於 100mb 的文件
  2. 只需重新啟動 git 工作流程。 刪除本地 .git 文件夾並再次 git init 並重試推送到 github。

正如其他答案已經說過的那樣,像**/*.exe這樣的模式將忽略存儲庫中任何位置的所有.exe文件。

但是,很多人(像我一樣)在故障排除時肯定會遇到這個問題......
為什么這不起作用。

因此,命令git status或您的 IDE 可能會告訴您xyz.exe即將提交,並且您可能正在拼命想弄清楚為什么會這樣,因為您確實有**/*.exe在您的 .gitignore 文件中,並且由於此問答確認這實際上是正確的魔法咒語,應該可以防止這種情況發生。 但事實並非如此。

您處於這種荒謬情況的實際原因是您(或者,更有可能是您的 IDE 自動為您准備)已經暫存了該文件。

解決方案是先取消暫存它,然后將其忽略。

<rant> “暫存區”是 git 的一個完全沒用的功能,它是一個主要的痛苦來源,沒有任何值得一提的好處; 但是,它是 git 工作方式的核心,因此您必須始終注意它。 現在,您的 IDE 可能試圖讓您不必擔心暫存,(因為它應該如此)但沒有什么是完美的,所以不可避免地,每隔一段時間就會有痛苦。 </rant>

暫無
暫無

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

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