为什么Git会自动忽略大多数Node文件?

3
我刚开始学习Node.js和NPM,并且正在尝试编写一个网站并将其添加到Git上(它是公开的,但只是因为我不想付费进行私人托管)。当我将文件推送到Github时,Git自动忽略与Node相关的几乎所有文件,我无法弄清楚原因。具体来说,它似乎忽略所有node_modules文件夹、Gruntfile.jspackage.json文件。这是因为Git或Node的原因,还是我的某个错误操作?
当我使用git add -Agit add .git add -u,这些命令都应该包括所有添加和删除的文件(我想),然后使用git commitgit commit -a时,我得到了类似于以下的情况:
$ git commit -m "hopefully added all files"
On branch dev
Your branch is up-to-date with 'origin/dev'.

Untracked files:
        .jshintrc
        app/
        libs/Gruntfile.js
        libs/node_modules/.bin/_mocha
        libs/node_modules/.bin/_mocha.cmd
        libs/node_modules/.bin/mocha
        etc.

nothing added to commit but untracked files present

我试图在根文件夹中搜索.gitignore,但我只能找到Bootstrap文件夹中的gitignore文件(顺便问一下,它为什么在那里?),但如果我没错的话,那不应该影响它上面的文件夹吧?它有node_modules的规则,但没有Gruntfile.js或package.json的规则,当我注释掉所有规则后,文件仍然被忽略。
这是一个子模块,因此它使用父项目的.git文件夹。该父项目在其.git/info/exclude中除了注释外没有任何内容,并且也没有.gitignore。其他子模块也没有.gitignore
那么这是为什么呢?
编辑:git cherrygit diff都没有显示任何内容。git status显示:
$ git status
On branch dev
Your branch is up-to-date with 'origin/dev'.

Untracked files:
  (use "git add <file>..." to include in what wi

        libs/Gruntfile.js
        libs/node_modules/.bin/_mocha
        libs/node_modules/.bin/_mocha.cmd
        libs/node_modules/.bin/mocha
        libs/node_modules/.bin/mocha.cmd
        libs/node_modules/grunt-contrib-compass/
        etc.

nothing added to commit but untracked files present (use "git add" to track)

EDIT 2: 这个网站是一个子模块,但我从未在超级项目或任何其他子模块上使用.gitignore.git/info/exclude。尽管如此,这可能与问题有关吗?
EDIT 3: 就像我说的,git add -A, git add .git add -u 从未添加过任何节点文件或文件夹,但是添加单个文件和文件夹则可以。这使问题变得更加奇怪。

.gitignore文件里面有什么吗? - zerkms
我没有.gitignore文件,但正如我在帖子中所说,Bootstrap似乎已经添加了一个。 - trysis
3
那里列出的所有未跟踪文件,是否都是您打算包含的?它们显示在那里的事实意味着Git没有通过.gitignore忽略它们,只是它们还没有被添加到提交中。'git add -A .'(别忘了 ' . ')应该就可以解决问题。您可以再试一次,然后发布'git status'的输出结果。 - Matt Jennings
那么,如果我使用 git add -A,为什么它们是未跟踪的?这可能与具有子模块有关(即使超级模块和任何子模块都没有 .gitignore.git/info/exclude)吗? - trysis
我正在子模块目录的根目录中执行git add操作。 - trysis
显示剩余4条评论
1个回答

1
如果我理解正确,您的项目git仓库包含其中的子模块仓库。您能尝试以下工作流吗?
  1. 在某个文件夹中克隆您的子模块仓库
  2. 在同一文件夹中克隆您的项目仓库并运行
  3. cd project-repo
  4. git submodule init
  5. git submodule update
  6. cd ../submodule-repo
  7. 进行更改并执行git commit -a; git push
  8. cd ../project-repo/submoduleDir
  9. git pull
现在,您应该已经将父仓库指向新的子模块版本,并且当您进入project-repo时,可以提交此更改(project-repo指向最新的submodule-repo版本)。

在这个主题上的更多信息可以在这里找到:
* http://git-scm.com/docs/git-submodule
* http://joncairns.com/2011/10/how-to-use-git-submodules/

希望能有所帮助。


最奇怪的是,当我一段时间前删除并重新克隆了仓库时,所有问题都消失了。我想我们永远不会知道真正发生了什么。我想我会接受你的问题,因为这就是我所做的事情,它解决了问题。无论如何,还是谢谢。 - trysis

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接