Gitignore文件并不像我想的那样工作

时间:2015-12-11 08:56:54

标签: git

我排除了除一些文件之外的node_modules中的每个文件。所以我在git ignore文件中编写了如下代码。

node_modules/angular/angular.js
!node_modules/angularfire/dist/angularfire.js
!node_modules/todomvc-app-css/index.css
!node_modules/todomvc-common/base.css
!node_modules/todomvc-common/base.js    

node_modules/

但它不起作用。我怎么能解决这个问题?

2 个答案:

答案 0 :(得分:2)

正如我在" How do I add files without dots in them (all extension-less files) to the gitignore file?"中详述的那样,.gitignore主要有一条要记住的规则:

It is not possible to re-include a file if a parent directory of that file is excluded. ()
:除非在git 2.7 +)中满足某些条件

这意味着,当您排除所有内容(' node_modules/')时,您必须列出白名单文件夹,然后才能列出白名单文件。

# Ignore everything under node_modules
node_modules/*

# Exceptions the subfolders
!node_modules/**/

# Exceptions the files (since the parent folders are not ignored)
!node_modules/angularfire/dist/angularfire.js
!node_modules/todomvc-app-css/index.css
!node_modules/todomvc-common/base.css
!node_modules/todomvc-common/base.js 

答案 1 :(得分:2)

我认为这里的问题是您在排除某些文件后排除了完整的node_modules文件夹,这可能会覆盖以前的包含/排除。这意味着在开始时你说你想要在node_modules文件夹中包含和排除一些文件,但是稍后你只需告诉git“好吧,没关系,只需忽略整个文件夹”。因此,改变订单可能是一个很好的开始。

但我们可能还没完成。此外,当您排除整个文件夹而不是文件时,如果要排除它们,git将无法在其中找到任何文件。我们假设您忽略了文件夹 node_modules ,但之后想要排除其中的一些文件。它可能无法工作,因为没有文件夹可以检查这些文件了。实际上忽略了该文件夹。

所以你可以尝试的是忽略文件夹中的所有文件,然后对这些文件进行一些排除。

# ignore all files in the folder
node_modules/**/*

# but not those files
!node_modules/angularfire/dist/angularfire.js
!node_modules/todomvc-app-css/index.css
!node_modules/todomvc-common/base.css
!node_modules/todomvc-common/base.js 

希望这有效。