39

我需要忽略 git 中的文件!我不认为忽略实际上是正确的词。我希望文件在 git 中,但我不希望能够对它们进行更改。这对某些人来说可能看起来很奇怪,但是有很多很多情况下我需要这个功能。我现在需要它的一个实例是在将 git 与 CMS 一起使用时;如果没有不断变化的文件,CMS 将无法工作,但我不希望在初始提交后提交这些文件。(使用 SVN 和 Tortoise 很容易做到这一点)。

工作流程:

  1. 获取运行应用程序所需的所有文件。
  2. 提交时忽略指定的目录/文件。

这是我尝试过的:

  1. .gitignore-- 文件永远不会进入 git。如果文件已经在缓存中, .gitignore 文件不会做任何事情。
  2. /.git/info/exclude-- 与 .gitignore 相同的问题,但仅适用于本地 repo。
  3. 分支——master => LocalIgnores => WorkingBranch。当 Working 分支与 master 合并时,从 LocalIgnores 所做的更改最终会在 master 中。此外,当您签出一个新分支时,已删除的文件将被删除而不是被忽略。
  4. 第三方文件结构——根节点上的第三方目录,其中包含所有重要第三方文件的副本,因此可以将它们复制到使用 .gitignore 文件的工作目录中。(这个可行,但必须有一个更简单/更好的解决方案)。
4

2 回答 2

94

这是我对类似问题的回答。

git update-index应该做你想做的

这将告诉 git 你要开始忽略对文件的更改
git update-index --assume-unchanged path/to/file

当您想再次开始跟踪时
git update-index --no-assume-unchanged path/to/file

于 2011-08-15T20:51:26.483 回答
2

另一种解决方案是使用pre-commit钩子。详情请参阅git help hooks

  • 这更难设置:您必须编写一个 shell 脚本来准确表达您想要允许或禁止的内容,这可能意味着您需要对 git 有相当好的掌握。

  • 它更加永久和灵活:使用诸如git update-index您可能会不小心忘记运行它等技巧。但是一旦设置了钩子,您就不必再担心它了。

与建议的其他技巧一样,钩子不会在存储库之间自动传播,但您可以将它们作为常规文件签入,并让每个人都将它们链接到.git/hooks.

于 2011-08-17T14:25:49.827 回答