Git 课程:如何使用 .gitignore 和 .gitkeep?
本文翻译自我的博客:
🇵🇱 Git:如何使用 .gitignore 和 .gitkeep?
如果您使用 Git,并在 Github、Gitlab、Bitbucket 等平台上拥有代码仓库,那么您可能会遇到诸如.gitignore
或 之类的“点文件” .gitkeep
。它们是什么?它们之间有什么区别?我会尝试简单解释一下。
什么是.gitignore
文件?
在使用 Git 仓库时,你很快就会注意到有些文件和文件夹是不必要的。你可能会遇到编辑器自动添加的文件、临时文件,或者带有环境变量的文件,而这些文件你肯定不想公开分享。
这里需要用到一个名为 的特殊文件.gitignore
,它通常直接放在我们存储库的主目录中。
该文件允许我们从存储库中.gitignore
指定和排除那些不必要的元素,无论是配置文件、临时文件还是个人数据。换句话说:
在 Git 中,该
.gitignore
文件用于指定变更跟踪过程应忽略哪些文件或目录。
有了.gitignore
,开发人员可以避免意外将不需要的文件添加到存储库。我们的存储库保持整洁有序,更改历史记录中也不会被无关的文件弄得杂乱无章。
为了确保文件被忽略,必须遵循 Git 官方文档中的模式约定。
例如,通过将模式添加*.log
到.gitignore
文件,我们可以阻止任何日志文件的跟踪。
使用 gitignore 模板
在这里您可以找到适用于各种技术和语言的现成.gitignore
模板,例如 Python、Java、Kotlin、Go 等:https://github.com/github/gitignore/tree/main。
如果你在这个项目中找不到,肯定有人已经准备好了这样的模板。你只需要好好搜索一下😉
还值得注意的是,使用 .gitignore 文件有两种方法:
- 1 – 每个存储库都应包含一个标准化的 .gitignore 文件,该文件将忽略所有特定于语言的文件、操作系统文件和开发人员使用的工具(例如 pycache),以及由于业务原因删除的任何文件(例如数据文件、对于存储库来说太大的文件)。
- 2 – 开发人员应该负责维护自己的.gitignore 文件,该文件会忽略所有与当前使用的语言和工具相关的不必要的仓库文件。如果仓库中存在 .gitignore 文件,则该文件用于容纳特定于该仓库的特定逻辑。
什么是 .gitkeep 文件?
与 不同.gitignore
,.gitkeep
并非 Git 官方文档的一部分。它是 Git 用户用来跟踪空目录的非官方约定。默认情况下,Git 不会跟踪空目录——它不会将它们添加到我们的存储库中。.gitkeep
是一种规避此限制的方法。
简而言之,我们想向 Git 传达:
“嘿,这个文件夹很重要,即使它现在是空的”。
由于这是一种约定,而非 Git 工具本身的一部分,因此值得注意的是,名称不如位置重要。用于跟踪空目录的文件可以采用任意名称,并非必须为。您可以选择、 或简单的,或其他任何.gitkeep
名称。务必将此文件直接放置在我们想要在存储库中跟踪的空目录中。这样,它就不再是空的了 😉.empty
.keep
.gitignore 与 .gitkeep
一方面,.gitkeep
是一个优雅而简单的跟踪空目录的解决方案。另一方面,.gitignore
除了其主要用途外, 也可用于此目的。具体选择取决于项目的具体情况。
如何通过 gitignore 跟踪空文件夹?
好吧,您可以.gitignore
在一个空文件夹中创建一个文件,然后根据文档中的模式添加以下几行:
# Ignore everything in this directory
*
# But do not ignore this .gitignore file
!.gitignore
*
– 星号表示目录中所有文件都将被忽略,除了.gitignore
我们使用!
感叹号(表示否定)排除的文件。由于该.gitignore
文件已被跟踪,因此整个目录也将被 Git 跟踪。
然后像往常一样将此更改添加到 Git 并提交:
git add "path/to/empty_directory/.gitignore"
git commit -m "Add empty directory"
重要的是,这个解决方案也有效,不仅适用于空文件夹!
这样,我们可以将一个包含文件的文件夹作为空目录添加到存储库,但由于某种原因,我们不想跟踪这些文件。Git 中的文件夹并非空的——它里面包含一个 .gitignore 文件 ;)
当文件夹包含一些本地文件时,如何使用 .gitignore 和 .gitkeep 跟踪空文件夹?
这有意义吗?是的,尽管并不经常需要。
在以下情况下,此方法很有用:
- 您需要存储库中的一个目录,但没有其中的文件,例如系统日志文件夹,但没有仅在本地感兴趣的日志文件。
- 您希望在目录结构中包含任何文件之前将其发送到 Git 存储库,例如,它们将稍后添加,但您现在想要定义结构。
如何跟踪本地已有文件但远程仍为空的目录?
因此,前面的观点部分回答了这个问题,但也许我们不喜欢这个解决方案,因为我们有两个.gitignore
文件,我们想要区分这些文件。
在文件夹中,创建一个.gitkeep
文件来跟踪 Git 中的文件夹,并向文件中添加行.gitignore
以忽略文件夹中的所有文件。
步步
步骤 1. 假设我们的项目中有一个 logs 文件夹。此文件夹包含各种我们不想添加到远程存储库的系统文件。
app
│ .gitignore
│ index.html
│ script.js
│
├───images
│
└───logs
│ 2452321.log
│ 2453111.log
步骤2.在logs文件夹中,创建一个空的.gitkeep
或.keep
文件(名称只是惯例)。
app
│ .gitignore
│ index.html
│ script.js
│
├───images
│
└───logs
│ .gitkeep
│ 2452321.log
│ 2453111.log
步骤 3.现在,如果您想跟踪文件夹但不跟踪其内容(这对于日志来说很有意义),请将以下内容添加到 .gitignore 文件:
# Ignore everything inside the logs folder
logs/*
# Do not ignore the .gitkeep file in the logs folder
!logs/.gitkeep
好了🎉 我们可以提交这些更改并将其添加到代码库了。logs 文件夹中的文件不会在线显示。
文章来源:https://dev.to/ritaly/git-lesson-how-to-use-gitignore-and-gitkeep-5edm