为什么.gitignore默认不属于存储库?

时间:2013-07-05 15:52:18

标签: git gitignore

我创建了一个.gitignore文件,它会一直显示在未暂存的更改区域中。

为什么git不会自动处理这个问题,因为这是项目(repo)的一种配置文件?默认情况下不能成为存储库的一部分?为什么这种行为包含在设计中?这种设计是否有用例?

5 个答案:

答案 0 :(得分:5)

因为项目中的代码更改时,该文件的内容可能需要更改。这意味着您希望能够存储.gitignore文件本身的版本历史记录以及组成项目的文件。并且 意味着您将使用普通的git命令来控制提交该文件的时间。

所以git没有别的办法。你需要使用git命令来正确管理提交.gitignore(每次编辑它时隐式提交.gitignore都不会比它改变后隐式提交任何其他文件更有意义了)所以涵盖了跟踪文件的所有用例。因此,没有必要专门对待.gitignore。

答案 1 :(得分:4)

至少有三种方法可以忽略git中的文件:

这些设置存储在git安装/当前克隆的元数据中。创建新克隆时不会传输它们,因此不会在用户之间共享。

然而,人们注意到他们通常都想忽略相同的文件,并且他们想要交换被忽略文件的列表。此列表随时间变化,因此将其置于版本控制之下是合理的。并且,作为unix的一个原则,如果可能的话,一切都是文件和明文,你最终得到一个.gitingore文件。既然你有一个存储库和一个需要在存储库的所有用户之间进行版本控制和交换的文件 - 为什么不简单地将文件添加到存储库?这样你就不需要特殊的逻辑和没有隐藏的配置文件,一切正常。

这是忽略git中文件的第三种方式:

  • 通过.gitignore文件忽略它们

在我个人看来.gitignore文件是让git很棒的东西之一。

PS:详细说明“为什么默认不存在”:我不直接回答这个问题,但考虑这些问题可能会有所帮助:

  • 为什么默认情况下没有添加自述文件?每个回购都应该有一个!
  • 同样的许可证?每个回购都应该有一个!
  • ...

所有这些都是强烈推荐和最佳实践,但从技术角度来看,你可以不用。并且git倾向于只做最低限度的工作。 git中的默认值旨在合理但最简单。这很棒,但有时它会让初学者更难。

答案 2 :(得分:3)

  1. Git希望确保您知道要跟踪的文件,无论其类型如何。这种神经质控制程度对你的程序中的文件的控制是使Git(或任何其他体面的VCS)如此强大的原因。虽然最初很烦人,但是git没有表现出来是一件好事"魔术"与您的文件。
  2. 错误的.gitignore文件可能会在存储库中造成严重,自动检查它们可能是灾难性的。

答案 3 :(得分:3)

除了其他答案......

如果您希望将被忽略的文件作为回购的一部分进行跟踪,并由其他检查过的人共享,那么必须跟踪.gitignore文件(签入和版本化),就像任何文件一样其他档案。

如果您希望检入并版本化已忽略文件的列表,则将文件名添加到repo根目录中的.git/info/exclude。该文件未签入,因此对其的更改不会继续显示为未分级更改。该文件默认为“存储库的一部分”,但不像工作树中的文件那样进行版本控制。

答案 4 :(得分:3)

基本上,.gitignore只是一个文件。

Git是一个非常通用的工具,没有充分的理由不包含任何特殊情况。并且没有理由为什么.gitignore文件应该单独处理。

这样,用户就可以选择是否希望拥有一个全套.gitignore并将其签入。或者允许每个客户端拥有自己的一组被忽略的文件。