2014-10-04 137 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 

,这就是另一种解决方案,它包括强制文件,而只是一种选择,如果您使用的是带有扩展名的文件。

我希望这可以帮助别人。

相关问题