.gitignore
和.gitkeep
之间有什么区别?它们是只是名称不同的相同物品,还是它们都有不同的功能?
我似乎找不到太多关于.gitkeep
的文档。
.gitkeep
没有文档说明,因为它不是Git的一个功能。
Git 不能添加完全空的目录。想要在Git中跟踪空目录的人们已经创建了一种约定,即在这些目录中放置名为.gitkeep
的文件。该文件可以被任意命名;Git对此名称没有特殊含义。
另有一种竞争性的约定是在空目录中添加.gitignore
文件来跟踪它们,但有些人认为这会引起混淆,因为目标是保留空目录,而不是忽略它们;.gitignore
也用于列出Git在查找未跟踪文件时应忽略的文件。
.gitkeep
只是一个占位符。它是一个虚拟文件,这样Git就不会忘记这个目录,因为Git只跟踪文件。
如果你想要一个空目录并确保它对Git“保持干净”,请创建一个包含以下行的.gitignore
文件:
# .gitignore sample
# Ignore all files in this dir...
*
# ... except for this one.
!.gitignore
如果您希望Git仅显示一种类型的文件,以下是如何过滤除.gitignore
和所有.txt
文件之外的所有内容的示例:
# .gitignore to keep just .txt files
# Filter everything...
*
# ... except the .gitignore...
!.gitignore
# ... and all text files.
!*.txt
.gitignore
前面加上 !
?这是为了转义点吗? - Will!
符号是否定其后面的部分,就像在编程中通常所做的那样。 - sjas.gitignore
放入git ignore文件中,可以先添加该文件然后再编辑它,或者使用适当的内容进行强制添加("*"表示忽略所有内容,不填则只是确保文件夹存在)。更多例子请见。 - AD7six!.gitignore
可以避免自己被绊倒。我更喜欢这种方式,因为以前曾经吃过这种亏。 - sjas.gitignore
.gitignore 是一个文本文件,里面列出的是你的目录中 git 不需要跟踪或不需要加入/更新到版本库中的文件列表。
.gitkeep
由于Git会从代码库中移除或不添加空目录,因此.gitkeep算是一种hack(我不认为它是Git的官方部分),用于保留空目录在代码库中。
只需执行touch /path/to/emptydirectory/.gitkeep
即可添加此文件,Git现在将能够维护此目录在代码库中。
.gitignore
文件。 - sjas.gitkeep
文件中,但它不会跟踪空目录,只有存在.gitkeep
文件的文件夹才会被跟踪。为什么会这样? - Pardeep Jain.gitignore
文件如何避免每次都需要指定完整路径到每个文件夹?我觉得我可能漏掉了一些显而易见的东西。 - Willwsharp很多人更喜欢使用.keep
,因为这种约定与 Git 没有关系。
文件.gitignore
用于告诉Git应该忽略哪些文件和文件夹。通常,这些文件是构建产物、临时文件或其他不属于代码库的文件类型。Git将忽略在.gitignore
文件中匹配模式的任何目录或文件。
例如:
# Ignore .DS_Store files
.DS_Store
# Ignore build artifacts
build/
# Ignore log files
*.log
.gitkeep
文件来维护一个本来是空的目录。Git 默认不跟踪空文件夹,因此如果您希望将其保留在存储库中,则必须向该目录添加一个 .gitkeep
文件。文件名比文件的实际内容更重要。
.gitkeep
文件示例
# This file is used to keep the directory empty in Git
.gitignore
命令用于告诉 Git 忽略哪些文件和文件夹。如果要维护一个本来会是空的 Git 目录,请使用 .gitkeep
。它们彼此独立,具有不同的功能。
这并不是回答原问题“.gitignore 与 .gitkeep 有什么区别?”,但在此发布以帮助人们以简单的方式跟踪空目录。要跟踪空目录并知道 .gitkeep
不是 Git 的官方部分,只需在其中添加一个空的(没有内容的).gitignore
文件。
例如,如果您有 /project/content/posts
,有时 posts
目录可能为空,则创建空文件 /project/content/posts/.gitignore
,无需内容即可跟踪该目录及其未来的文件。
.gitkeep
的信息时,我发现所有内容都来自社区,而没有来自官方的Git文档。我更喜欢首先遵循官方文档。 - Sohel Ahmed Mesaniya.gitkeep
文件)添加到Git中,你需要将以下内容添加到.gitignore
文件中:
build/*
!build/.gitkeep
这意味着忽略build
目录下的所有内容,但是不要将.gitkeep
包括在忽略模式中。
README
文件放在空的子目录中,包含一些关于该子目录将要用于什么的信息,这难道不是更好的解决方案吗?拥有一个名为.gitkeep
的文件,它实际上并不是 Git 的一部分,这似乎很令人困惑。 - tamouse.gitignore
文件:“*”和“!.gitignore”,已足够清晰地表达其意图。如果需要更多解释,请使用“#”语法在文件顶部添加注释。 - yurisich.keep
文件代替.gitkeep
来保留这些空文件夹,因为Git不是唯一不能跟踪空文件夹的源代码控制系统。更多细节请参见:https://github.com/rails/rails/issues/2800 - Claudio Floreani