繁体   English   中英

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

[英]How to ignore a file or directory in git, be it tracked, untracked or even part of commit

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

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

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

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

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

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

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

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

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

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

  1. 将文件/模式添加到.gitignore文件中
  2. 从存储库中删除不需要的文件
  3. 承诺解开不需要的文件并提交.gitignore
  4. 推动变革

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

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

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

Git无法模拟用户没有透视的简单现实,并且显然不知道什么样的不跟踪(临时|中间|缓存|无论如何)将由一个甚至没有的框架创建已编写,但将在未来某个时候纳入项目。

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

!.gitignore

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

!.gitignore
my_dir/
some_dir/

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM