GIT - 从提交中排除/忽略文件

时间:2011-08-15 20:46:56

标签: git content-management-system gitignore filefilter

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

的工作流程:

  1. 获取运行该应用程序所需的所有文件。
  2. 提交时忽略指定的目录/文件。
  3. 这是我尝试过的:

    1. .gitignore - 文件永远不会输入git。如果文件已经存在 缓存.gitignore文件没有做任何事情。
    2. /.git/info/exclude - 与.gitignore相同的问题,但仅限于 当地的回购。
    3. 分支 - master => LocalIgnores => WorkingBranch。当。。。的时候 工作分支与master合并,所做的更改来自 LocalIgnores最终成为主人。此外,当你结帐其中一个 新分支,删除的文件被删除而不是被忽略。
    4. 第三方文件结构 - 根目录上的第三方目录 保存所有重要第三方文件副本的节点,以便它们可以 被复制到使用.gitignore的工作目录中 文件。 (这个有效,但必须更容易/更好 solurtion)。

2 个答案:

答案 0 :(得分:92)

以下是similar question的答案。

  

git update-index应该做你想做的事情

     

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

     

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

答案 1 :(得分:2)

另一种解决方案是使用pre-commit钩子。有关详细信息,请参阅git help hooks

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

    < / LI>
  • 它更永久和灵活:像git update-index这样的技巧你可能会意外忘记运行它等等。但是一旦你设置了一个钩子,你就再也不用担心它了。

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