2014-10-04 136 views
11

前段時間我我.gitignore文件設置爲跟蹤的文件夾my_folder有:跟蹤文件中忽略目錄

my_folder/ 

現在我只希望跟蹤給定的文件中說,文件夾,命名爲my_file.md。製作後.gitignore是這樣的:

my_folder/ 
!my_folder/my_file.md 

和檢查:

git status 

該文件不顯示爲被提交的修改。

我在做什麼錯?


添加

我試圖改變我的.gitignore文件:

my_folder/* 
!my_folder/my_file.md 

的建議,但該文件是仍然沒有顯示出來的變化git status後提交。我需要重置一些東西嗎?


添加2

試圖將文件添加與git add my_folder/my_file.md回報:

The following paths are ignored by one of your .gitignore files: 
my_folder/my_file.md 
Use -f if you really want to add them. 
fatal: no files added 

命令git check-ignore -v my_folder/my_file.md給出:

.gitignore:1:my_folder/* my_folder/my_file.md 
+1

杜佩 - 但簡短的答案是使用「my_folder/*」http://stackoverflow.com/questions/5533050/gitignore-exclude-folder-but-include-specific-subfolder – 2014-10-04 02:49:19

+0

謝謝@AndrewC,我試過但它仍然沒有工作。不知道我做錯了什麼。 – Gabriel 2014-10-04 14:33:40

+2

既然你*真的*想添加* my_folder/my_file.md *爲什麼不使用'-f'標誌,因爲它告訴你? – PSkocik 2014-10-04 15:54:08

回答

14

要添加到 「.gitignore exclude folder but include specific subfolder」一個很好的調試方法軟管的.gitignore文件是使用git check-ignore(GIT 1.8.4+):

git check-ignore -v my_folder/my_file.md 

你會看到它是被忽略,因爲my_folder/規則。

這是因爲它是不可能再有一個文件,如果該文件的父目錄被排除(*
*:除非某些條件,在Git中2.?+相遇,見以下)

這就是爲什麼忽略該文件夾內的文件my_folder/*,而不是文件夾本身)允許您排除一個。

當然,你可以強制添加一個被忽略的文件(git add -f my_folder/my_file.md),但這不是這個答案的要點。
問題的關鍵在於解釋爲什麼在.gitignore中添加!my_folder/my_file.md不適用於git 2.6或更低版本。


注意用git 2.9.x/2.10(2016年年中?),有可能再包括一個文件,如果該文件的父目錄排除if there is no wildcard in the path re-included

Nguyễn Thái Ngọc Duy (pclouds)正在努力增加這個功能:

所以在這裏,用git 2.8+,這會工作:

/my_folder 
!my_folder/my_file.md 
+0

VonC你會看看更新的問題嗎?我試過這個,但它不工作。 – Gabriel 2014-10-04 14:34:13

+1

@Gabriel你試過添加它嗎? 'git add my_folder/my_file.md'。'git check-ignore -v my_folder/my_file.md'會返回什麼? – VonC 2014-10-04 15:42:42

+0

VonC:請參閱更新的問題。 – Gabriel 2014-10-04 15:47:27

14

的文件將不會顯示爲「改變承諾」如果沒有跟蹤(IOW以前從未加入)。只需將文件添加到git add,Git將僅跟蹤該文件,但仍然忽略該文件夾。

git add -f ignored_folder/my_file 

-f標誌很重要,因爲git會拒絕從被忽略的路徑添加文件。

1

,當我需要跟蹤這樣的文件,或者只有目錄結構,我添加了這樣的事情對我的.gitignore文件

resources/**/*.* 

這意味着,「忽略所有文件擴展名的資源目錄包括子目錄內」 。

然後我把一個「空」文件放在那些我想跟蹤的目錄裏面。

請注意,只有無擴展名的文件將被跟蹤,這就是爲什麼這個工作。

與選項中列出的波紋管,你現在可以補充一點:

!resources/my_needed_file.md 

,這就是另一種解決方案,它包括強制文件,而只是一種選擇,如果您使用的是帶有擴展名的文件。

我希望這可以幫助別人。

相關問題