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

Ama*_*tam 1 git gitignore

我创建了一个.gitignore文件,它一直显示在未分级的更改区域中.

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

Ben*_*Ben 5

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

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


Jon*_*ely 5

除了其他答案...

如果您希望将被忽略的文件作为 repo 的一部分进行跟踪,并由其他检出它的人共享,则.gitignore必须像任何其他文件一样跟踪(检入和版本化)文件。

如果您不想签入被忽略的文件列表并对其进行版本控制,则将文件名添加到存储库.git/info/exclude的根目录中。该文件未签入,因此对其的更改不会一直显示为未暂存的更改。该文件是“默认情况下存储库的一部分”,但不像工作树中的文件那样进行版本控制。


mna*_*gel 5

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

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

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

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

  • 通过 .gitignore 文件忽略它们

在我个人看来,.gitignore 文件是让 git 变得很棒的原因之一。

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

  • 为什么默认没有添加自述文件?每个回购都应该有一个!
  • 执照也一样吗?每个回购都应该有一个!
  • ...

所有这些都是强烈推荐的最佳实践,但从技术角度来看,您可以不用。并且 git 倾向于只做最低限度的工作来使事情正常进行。git 中的默认值力求合理但极简。这很好,但有时会让初学者更难。