[英]How do I tell Git to ignore everything except a subdirectory?
我想忽略存儲庫中的所有文件,除了bin
子目錄中出現的文件。 我嘗試將以下內容添加到我的.gitignore
:
*
!bin/*
然而,這並沒有達到預期的效果:我在bin/
內創建了一個新文件,但是執行git status
仍然顯示nothing to commit (working directory clean)
。
有什么建議?
這將忽略根文件和根目錄,然后取消忽略根 bin 目錄:
/*
/*/
!/bin/
這樣你就可以得到所有的 bin 目錄,包括子目錄和它們的文件。
這里如何忽略某些目錄中除一個目錄“ MY_SUPER_DUPER_TEMPLATE_directory ”之外的所有內容
結構:/bitrix/templates/ MY_SUPER_DUPER_TEMPLATE_directory
/*
!/bitrix
/bitrix/*
!/bitrix/templates
/bitrix/templates/*
!/bitrix/templates/MY_SUPER_DUPER_TEMPLATE_directory
*.DS_Store
*.gitignore
您必須排除前往目的地途中的所有內容,但必須包括目的地:
注意:這是一個排除文件(即 .gitignore),所以邏輯顛倒了。 忽略所有,除了 tsp 目錄,忽略 tsp 目錄中的所有,除了 src 目錄...
/*
!/tsp
/tsp/*
!/tsp/src
/tsp/src/*
!/tsp/src/*.h
!/tsp/src/*.cpp
!/tsp/src/data.txt
!/.gitignore
您遇到的唯一問題是bin
目錄本身與bin/*
模式不匹配,因此 git 甚至不在bin
目錄中查找。
腦海中浮現出兩種解決方案。
.gitignore
:
*
!/bin/
!bin/*
或者
.gitignore
:
*
!/bin/
bin/.gitignore
:
!*
我更喜歡第二個解決方案,因為第一個解決方案不會停止忽略bin
目錄中未稱為bin
子目錄中的文件。 這在您的情況下可能重要也可能無關緊要。
從官方git doc ,其中一個例子說:
排除除特定目錄 foo/bar 之外的所有內容的示例(注意 /* - 沒有斜杠,通配符也將排除 foo/bar 中的所有內容):
$ cat .gitignore
# exclude everything except directory foo/bar
/*
!/foo
/foo/*
!/foo/bar
有關前導斜線的解釋: 何時在 gitignore 中使用前導斜線。
嘗試使用最新的 GIT 版本。
*
!*/
!/path/to/your/dir/**
我認為更好的方法是通過以斜線開頭的模式將每個模式錨定到頂級 git 目錄:
/*
!/public_html
!/.gitignore
它不會忽略所有文件,它只會忽略頂級文件,而不是您不想忽略的目錄中的文件。
這個.gitignore
對我.gitignore
:
*/
/*
!bin/
我最近不得不這樣做:
*
!sub-dir/
!sub-dir/*
我不確定為什么我需要兩行來排除一個文件夾,但這對我和 macos 有用。
這是我的解決方案。 在我的場景中,我有一個包含子文件夾的文件夾,如下所示:
從數據庫文件夾中,我只想推送sql文件夾,因此我的.gitignore
文件如下:
database/*
!database/sql/
第一行簡單地說忽略數據庫文件夾的所有子文件夾,第二行意思是因為你忽略了數據庫文件夾的所有子文件夾排除(不要忽略) sql子文件夾
聚會遲到了,但沒有一個答案對我“開箱即用”有效。 這個是:
*
!bin
!bin/**
對我來說,事實證明我不應該忽略父文件夾,而是使用“/*”忽略其中的文件和文件夾
-- **/node_modules
++ * /節點模塊/
然后
++ !node_modules/@my-package/
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.