你应该将 .gitignore 文件提交到 Git 仓库中吗?

631

您认为将.gitignore提交到Git仓库中是一个好的实践吗?

一些人不喜欢这样做,但我认为这是一个好方法,因为它可以跟踪文件的历史记录。不是吗?


48
如果你没有的话,就把 .gitignore 放进 .gitignore 文件里面。 - CharlesB
可能是重复的问题:忽略 .gitignore 文件本身 - Michael Freidgeim
4
10年前,我相信我的意思是“如果你不想提交.gitignore文件,就把它放在.gitignore文件中”(这有点像一个玩笑)。 - CharlesB
6个回答

609

通常情况下,对于想要与存储库一起工作的每个人来说,.gitignore都是有用的。但有时您可能希望忽略更私密的内容(也许您经常创建LOG之类的东西)。在这些情况下,您可能不想强制其他人也这样做。


162
“私人物品”可以在适当的 $GIT_DIR/info/exclude~/.gitconfig 文件中提及。 - WReach
14
如果您已经将一个文件 check in,但希望将其忽略,Git 在您稍后添加规则时将不会忽略该文件。在这种情况下,您需要先取消跟踪该文件,方法是在终端中运行以下命令:git rm --cached 文件名 - eli-bd

169

通常情况下,你需要提交.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代码库。


17
你可以在.gitignore文件中添加# some comment注释行来解释为什么你要忽略某些内容。注释每一行可能有点过头,但我已经标记了# IDE (Eclipse)# OS (Mac OS X)# Generated (Perl)等部分。这样,如果有人想要使用不同的操作系统或IDE,他们可以添加一个部分,然后我们就可以共享了。 - Stuart R. Jefferys
15
赞同“我个人甚至会确保在不处理任何事情时我的索引始终是干净的。 (git 状态应该显示为无更改。)” - SGhosh
4
使用现代版的Git,core.excludesfile 的默认值是 ~/.config/git/ignore,符合 XDG Base Directory Specification。 - Jakub Narębski
1
全局.gitignore加一 - 当你与合作伙伴在推送.gitignore文件的内容或是否应该推送上存在分歧时,这将非常有益。我们都使用大量不同的开发环境,会产生各种不同类型的噪音。 - Krease
1
https://davidwalsh.name/global-gitignore 这里有更多关于全局忽略的信息。 - Frode Akselsen

13

我提交了.gitignore文件,这是对其他构建我的项目的人的一个礼貌提示,让他们忽略以下派生文件。

通常我会采用混合的方法。我喜欢让makefile生成.gitignore文件,因为makefile将知道与该项目相关的所有文件-无论是派生的还是其他的。然后有一个顶级项目.gitignore文件,在其中列出由makefile为不同的子目录创建的生成的.gitignore文件。

所以在我的项目中,我可能有一个bin子目录,其中包含所有已构建的可执行文件。然后,我会让我的makefile为该bin目录生成.gitignore文件。并在顶级目录.gitignore中列出bin/.gitignore。最终我会提交顶级目录的.gitignore文件。


2
提交 .gitignore 可以非常有用,但您需要确保之后不要过度修改它,特别是如果您经常在分支之间切换。如果这样做,您可能会遇到一些情况,在一个分支中忽略文件而在另一个分支中不忽略,强制您手动删除或重命名工作目录中的文件,因为检出失败,它将覆盖一个未跟踪的文件。
因此,是的,请提交您的 .gitignore,但请在合理确定它不会太多改变之前这样做。

1
那是一个不合理的期望。我从未确定它在未来不会发生太多变化,因为我无法预知未来。实际上,除非项目已经停止开发,否则添加和删除功能是很常见的,因为这就是开发的本质。 - gargoylebident
关键词是“那么多”。 - Patrick Perdu
“That much”是一个无用的度量单位,因为它对每个人意义不同。 - gargoylebident
@gargoylebident 这就是为什么GIT有分支的原因 ;) - undefined

1

对我来说,将.gitignore文件提交到代码库中是一个好主意。当有人克隆你的代码库并构建项目或运行一些测试时,可能会生成一些不必要的垃圾数据,这些数据不需要被推送。.gitignore文件可以忽略其中配置的文件。


-9

在编程中,.gitignore至少应该忽略构建产品(程序、*.o等),这是一个好的实践。


12
.gitignoreж–Ү件еә”иҜҘжҳҜеҗҰиҮӘиә«иў«зәіе…ҘеҝҪз•ҘеҲ—иЎЁпјҹиҝҷ并йқһеӣһзӯ”жүҖжҸҗеҮәзҡ„й—®йўҳгҖӮ - Charles Wood
6
注意,那不是问题,这个回答确实回答了所问的问题:“将.gitignore提交到Git存储库中是否是一种好的做法?” - papercowboy
7
@cayuu 我认为答案是说“在.gitignore中加入忽略规则是一个好习惯”,但我不明白它如何回答问题。问题是是否应该将.gitignore纳入版本控制。 - nightograph

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接