如何忽略git中的文件或目录,无论是跟踪,未跟踪,还是部分提交

时间:2012-04-13 14:54:43

标签: git ignore gitignore

我想完全忽略git存储库的一部分。该目录当前在存储库中被跟踪,我想确保

  • 每当有人在上游存储库中更改其内容时,即使我的副本也被更改,我也不会遇到任何合并冲突。
  • 每当我更改其内容时,我所做的任何提交都不会反映这些更改

我并不特别关心实际内容。

问题出现在构建期间自动生成的文件中。不幸的是,有人碰巧将它们提交到存储库,但是当它们在不同的机器上使用而不是它们的创建者时,它们会因为不同的路径等而导致构建错误,从而导致令人讨厌的合并冲突。

AFAIK,.gitignore不能用于此目的,因为它仅适用于未跟踪的文件。

4 个答案:

答案 0 :(得分:9)

您可以使用git rm轻松删除和删除文件,这似乎就是您想要做的事情。如果在构建过程中自动生成文件,这似乎是您要采用的路径。

但是,如果只有一个人的机器设置正确生成这些文件,我相信存在更大的问题。但要做你想做的事,就是这样

开始忽略更改 git update-index --assume-unchanged <dir>

再次开始关怀 git update-index --no-assume-unchanged <dir>

答案 1 :(得分:5)

如果文件永远不会进入存储库,请修复问题并正确执行...

  1. 将文件/模式添加到.gitignore文件
  2. 从存储库中删除不需要的文件
  3. 提交取消跟踪不需要的文件并提交.gitignore
  4. 推送更改
  5. 您永远不必再次处理这些不需要的文件,因为.gitignore将避免这些文件的未来git add(除非--force d)

答案 2 :(得分:0)

上述所有答案都无法处理已分离之前 gitignoring并删除不需要的文件的分支,并且包含对这些文件进行更改的提交。这些分支机构只会坐在那里等待机会对合并或变革造成严重破坏。

实际上,除了从头开始使用.gitignore中不需要的文件从头开始重新创建所有repos之外,没有其他解决方案。 git中完全打破了非跟踪内容。

Git无法模拟用户没有表现出来的简单现实千里眼,而且只是明显地不知道什么样的做不跟踪(临时|中间件) | caches | whatever)将由一个尚未编写的框架创建,但将在未来的某个时刻纳入项目。

答案 3 :(得分:0)

您可以在.gitignore文件的开头尝试以下行:

!.gitignore

我认为这应该迫使git忽略列出的冷杉/文件。我不知道这是最好的方法,但是对我来说是可行的。 例如

!.gitignore
my_dir/
some_dir/

注意:当然,您应该git add和commit .gitignore而不是推送到原点。