4

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

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

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

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

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

4

4 回答 4

11

您可以轻松删除和取消跟踪git rm您想要使用的文件。如果文件是在构建过程中自动生成的,这似乎是您想要采取的路线。

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

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

重新开始关心 git update-index --no-assume-unchanged <dir>

于 2012-04-13T15:03:30.947 回答
6

如果文件应该永远不会进入存储库,请解决问题并正确执行...

  1. 将文件/模式添加到.gitignore文件中
  2. 从存储库中删除不需要的文件
  3. 提交以取消跟踪不需要的文件并提交.gitignore
  4. 推动改变

而且您将永远不必再次处理那些不需要的文件,因为.gitignore将避免git add这些文件的未来(除非--forced)

于 2012-04-13T15:14:39.103 回答
0

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

实际上,除了从一开始就使用 .gitignore 中不需要的文件从头开始重新创建所有存储库之外,没有其他解决方案。取消跟踪的东西在 git 中被彻底破坏了。

Git 无法模拟用户没有使用千里眼的简单现实,而且显然不知道一个甚至还没有创建的框架会创建什么样的不跟踪(临时 | 中间 | 缓存 | 不管)尚未编写,但将在将来的某个时候纳入项目中。

于 2013-09-20T08:45:12.707 回答
0

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

!.gitignore

我认为这应该迫使 git 忽略列出的冷杉/文件。我不知道这是最好的方法,但它适用于我的情况。例如

!.gitignore
my_dir/
some_dir/

注意:当然你应该 git add 和 commit .gitignore 而不是 push to origin。

于 2019-07-17T09:09:18.110 回答