您是不是应该将 .gitignore 提交到 Git 存储库中?

Posted

技术标签:

【中文标题】您是不是应该将 .gitignore 提交到 Git 存储库中?【英文标题】:Should you commit .gitignore into the Git repos?您是否应该将 .gitignore 提交到 Git 存储库中? 【发布时间】:2011-08-11 13:26:37 【问题描述】:

您认为将.gitignore 提交到 Git 存储库是一种好习惯吗?

有些人不喜欢它,但我认为它很好,因为您可以跟踪文件的历史记录。不是吗?

【问题讨论】:

如果你不这样做,把 .gitignore 放到 .gitignore... Ignore the .gitignore file itself的可能重复 @CharlesB 抱歉,您评论中的逗号导致我不确定您的意思... 10 年前我相信我的意思是“如果你不想提交 .gitignore,就把它放在 .gitignore 中”(有点儿笑话) 【参考方案1】:

通常是的,.gitignore 对于想要使用存储库的每个人都很有用。有时你会想要忽略更多私密的东西(也许你经常创建LOG 或其他东西。在这种情况下,你可能不想将其强加于其他人。

【讨论】:

+1 可以在$GIT_DIR/info/exclude~/.gitconfig 文件中酌情提及“私人事物”。 如果你已经签入了一个文件,并且你想忽略它,那么如果你稍后添加规则,Git 将不会忽略该文件。在这些情况下,您必须先取消跟踪文件,方法是在终端中运行以下命令:git rm --cached FILENAME【参考方案2】:

你通常提交.gitignore。事实上,我个人尽可能确保我的索引在我不处理某事时总是干净的。 (git status 应该什么都不显示。)

在某些情况下,您想忽略实际上并非特定于项目的内容。例如,您的文本编辑器可能会自动创建 *~ 备份文件,或者另一个示例是 OS X 创建的 .DS_Store 文件。

我想说,如果其他人抱怨这些规则使您的 .gitignore 变得混乱,请将它们排除在外,而是将它们放在全局排除文件中。

默认情况下,此文件位于$XDG_CONFIG_HOME/git/ignore(默认为~/.config/git/ignore),但可以通过设置core.excludesfile 选项更改此位置。例如:

git config --global core.excludesfile ~/.gitignore

只需创建和编辑全局 excludesfile 即可满足您的需求;它将适用于您在该机器上工作的每个 git 存储库。

【讨论】:

您可以随时在.gitignore 文件中添加# some comment 行来解释为什么您忽略了某些内容。评论每一行有点矫枉过正,但我​​有部分标记为# IDE (Eclipse)# OS (Mac OS X)# Generated (Perl)。这样,如果有人想使用不同的操作系统或 IDE,他们可以添加一个部分,我们都可以共享。 点赞“我个人尽可能确保我的索引在我不处理某事时总是干净的。(git status 应该什么都不显示。)” 注。使用现代 Git,core.excludesfile 的默认值为 ~/.config/git/ignore,符合 XDG 基本目录规范 +1 for global .gitignore - 当与您一起工作的人不同意推送的 .gitignore 文件的内容或是否应该推送它们时,这是非常有益的,而且我们都使用大量不同的开发环境产生不同类型的噪音。 davidwalsh.name/global-gitignore 更多关于全局忽略的信息【参考方案3】:

.gitignore至少您的构建产品(程序、*.o 等)是一个很好的做法。

【讨论】:

这没有回答问题:.gitignore 本身应该是“.gitignore'd”吗? 注意,不是问题,而这确实回答了所问的问题:“提交是[它]一个好习惯.gitignore 到 Git 仓库?”。 @cayuu 我相信答案是“.gitignore 是一个很好的做法”xyz,我不明白它是如何回答这个问题的。问题是 .gitignore 是否应该受版本控制。【参考方案4】:

我把 commit .gitignore,这是对其他可能构建我的项目的人的礼貌,以下文件是派生的,应该被忽略。

我通常做混合动力车。我喜欢让 makefile 生成 .gitignore 文件,因为 makefile 将知道与项目相关的所有文件 - 派生或其他方式。然后有一个您签入的***项目 .gitignore,它将忽略由 makefile 为各个子目录创建的生成的 .gitignore 文件。

所以在我的项目中,我可能有一个包含所有已构建可执行文件的 bin 子目录。然后,我将让我的 makefile 为该 bin 目录生成一个 .gitignore。在列出 bin/.gitignore 的***目录 .gitignore 中。最上面的是我签到的那个。

【讨论】:

【参考方案5】:

提交 .gitignore 可能非常有用,但您要确保此后不要对其进行太多修改,尤其是在您定期在分支之间切换时。 如果这样做,您可能会遇到文件在一个分支中被忽略而不是在另一个分支中的情况,迫使您手动删除或重命名工作目录中的文件,因为检出失败,因为它会覆盖未跟踪的文件。

因此,是的,请提交您的 .gitignore,但不要在您有理由确定此后不会有太大变化之前。

【讨论】:

这是一个不合理的期望。我永远不确定它在未来不会有太大变化,因为我无法知道未来。实际上,除非一个项目已经死了,否则肯定会添加和删除很多东西,因为这就是开发的本质。 关键词是“那么多”。 “那么多”是无用的衡量标准,因为它对每个人的意义都不同。

以上是关于您是不是应该将 .gitignore 提交到 Git 存储库中?的主要内容,如果未能解决你的问题,请参考以下文章

Maven 项目中的哪些文件应该提交到 git?

您可以在单个存储库中为每个目录添加额外的 .gitignore 吗?

.gitignore文件无效解决

Git中.gitignore的配置语法

使用 .gitignore 忽略 Git 仓库中的文件

将目录添加到 .gitignore 后从远程存储库中删除目录