什么是 .gitignore?

237

我刚创建了一个Github仓库,想知道.gitignore文件是干什么用的。一开始我没有创建这个文件,但后来加上了,因为大多数仓库都有这个文件。 我需要创建这个文件吗?我可以忽略它吗,还是它有什么用途?

7个回答

200

.gitignore 告诉 git 应该忽略哪些文件(或模式)。通常用于避免提交工作目录中对其他合作者无用的临时文件,例如编译产品、IDE 创建的临时文件等。

您可以在这里找到完整的细节。


那么如果您在github.com的新存储库中创建了.gitignore,然后在本地计算机上执行git init和git add *.*(尚未连接到.gitignore,因为它尚未连接到该存储库),这该怎么办呢?当我执行git commit时,它是否会生效?或者呢? - Xonatron
_._gitignore 用于什么?它只在 gitignore 在子目录中时使用吗? - Saikat Chakrabortty
那么它仍然保留在本地,但不会被推送到源?那么如果某个用户下载了 Github 存储库,那么这个秘密文件也会被下载吗? - Meet Zaveri
1
“ignore” 是什么意思?谁/什么/何时会被忽略?我知道 “ignore” 这个词的意思,但是在 Git 的上下文中,我找不到一个清晰的描述。显然,对于理解它的人来说,这个术语是完全可以理解的,但是任何为那些不知道它的人定义某个东西的文字都需要解释所有具有上下文唯一定义的术语。 - Sam Hobbs
2
@user34660 忽略就是这样 - Git 不会跟踪 .gitignore 文件中指定的文件模式所对应的文件的更改。即使您更改了它们,Git 也不会将其显示为已修改。 - Mureinik
2
那么 track 是什么意思呢?你必须明白,初学者可能不知道 track 是指提交之前/之后还是推送之前/之后,或者是其他什么。只有在相关上下文中具有重要意义的术语需要被定义/解释。我将一个项目推送到了 GitHub,并得到了一些我认为不应该出现的文件。我并不是在请求帮助,只是想确认应该发生什么,这样我就可以确定发生了什么不应该发生的事情(某些东西出错了),然后我就知道需要修复它。 - Sam Hobbs

46

这是一个文件列表,您希望git在工作目录中忽略它们。

比如你使用Mac电脑,并且在所有的目录下都有.DS_Store文件。你希望git忽略它们,所以你在.gitignore文件中添加了一行.DS_Store,以此类推。

Git文档会告诉您所需一切信息:http://git-scm.com/docs/gitignore


2
你的.DS_Store情况最终让我有所共鸣,因为我猜想我之前没有意识到这个概念,是因为我还没有在项目中需要使用它。谢谢。最终我使用了这个作为起点,因为我使用各种不同的操作系统,特别注意了# OS generated files #部分。 - phoenixlaef
2
我知道我来晚了,但感谢@AndyLester! 当涉及编程和Github时,我是个新手。 我发现许多回答针对这种类型的问题都充满了新手可能不理解的术语(即编译产品,IDE创建的临时文件.....这些东西到底是什么!)。 然而,您的Mac描述在其优雅的简洁性方面是完美的! - Vesuccio

26

当你进行提交时,不希望意外地包含临时文件或构建特定文件夹。因此,请使用.gitignore列出您想要从提交中忽略的项目。

同样重要的是git status是最常用的命令之一,您希望git status列出已修改的文件。

希望您的git status列表看起来干净,没有不需要的文件。例如,我更改了a.cpp、b.cpp、c.cpp、d.cpp和e.cpp,我希望我的git status列出以下内容:

git status
a.cpp
b.cpp
c.cpp
d.cpp
e.cpp

我不希望 git status 显示中间对象文件和来自构建文件夹的更改文件

git status
a.cpp
b.cpp
c.cpp
d.cpp
e.cpp
.DS_Store
/build/program.o
/build/program.cmake
因此,为了使自己摆脱git status列出这些中间临时文件并意外提交它们到存储库中,我应该创建一个像每个人一样的.gitignore。我所需要做的就是在.gitignore中列出我想要排除提交的文件和文件夹。 以下是我的.gitignore,以避免提交不必要的文件。
/*.cmake
/*.DS_Store
/.user
/build

1
我相信你可以使用.gitattributes来忽略在diff/status中的文件。 - OneCricketeer

9

有一些文件不需要Git进行检查。Git将工作副本中的每个文件视为以下三种情况之一:

  1. 已跟踪 - 以前已暂存或提交的文件;
  2. 未跟踪 - 未暂存或提交的文件;或
  3. 已忽略 - Git明确指示要忽略的文件。

通常,被忽略的文件是可以从存储库源代码派生或者不应该提交的构建生成物和机器生成文件。一些常见的例子包括:

  • 依赖项缓存,如/node_modules/packages的内容
  • 编译代码,例如.o.pyc.class文件
  • 构建输出目录,如/bin/out/target
  • 运行时生成的文件,如.log.lock.tmp
  • 隐藏系统文件,例如.DS_StoreThumbs.db
  • 个人IDE配置文件,例如.idea/workspace.xml

被忽略的文件在名为.gitignore的特殊文件中进行跟踪,该文件在存储库的根目录下检查。没有显式的git ignore命令:当您有要忽略的新文件时,必须手动编辑和提交.gitignore文件。 .gitignore文件包含与存储库中的文件名匹配的模式,以确定它们是否应被忽略。这里是一个.gitignore示例文件。 更多细节请查看此链接


5

.gitignore的主要目的——避免添加无关文件等

我在某些代码库中有很多个人笔记/草稿:它们对我很有用,但对其他人没有用。我不希望将它们上传到github,因为那会让每个阅读它的人都感到困惑。好消息是,我可以要求git“忽略”这些文件。这种方法的唯一代价是,如果我的计算机崩溃等情况发生,我将无法恢复这些笔记。


2
.gitignore文件是一个文本文件,用于指示Git忽略项目中的某些文件或文件夹。一般情况下,本地.gitignore文件存储在项目的根目录中。如果在其中发现任何条目,则可以创建全局.gitignore文件,该文件将在所有Git存储库中被忽略。
要创建本地.gitignore文件,请创建一个文本文件并将其命名为.gitignore(记得在开头包括“.”)。然后根据需要编辑此文件。每行应列出您希望Git忽略的其他文件或文件夹。
此文件中的条目也可以遵循匹配模式。 *用作通配符匹配
/用于忽略相对于.gitignore文件的路径名
#用于向.gitignore文件添加注释

2
你好,欢迎来到StackOverflow。你的回答精准、简洁且直接了当。提供官方文档链接可以进一步完善它。 - Sumi Straessle

-1

Git ignore文件规则允许您忽略过去提交的文件。当您不想重新提交文件时,可以使用它。基本上,这是一个您希望Git在工作目录中忽略的文件列表。


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