探究.gitignore与.gitkeep的区别

探究.gitignore与.gitkeep的区别

技术背景

在使用Git进行版本控制时,我们常常会遇到一些情况,比如有些文件(如编译生成的文件、临时文件等)不需要纳入版本控制,而有些空目录又希望能在仓库中保留。为了解决这些问题,Git提供了.gitignore文件,同时开发者们还约定俗成地使用.gitkeep文件来处理空目录的跟踪问题。

实现步骤

.gitignore 的使用

  1. 创建文件:在项目根目录或子目录下创建一个名为.gitignore的文本文件。
  2. 添加规则:在文件中添加需要忽略的文件或目录的规则。例如:
1
2
3
4
5
6
7
8
# Ignore .DS_Store files
.DS_Store

# Ignore build artifacts
build/

# Ignore log files
*.log
  1. 提交生效:将.gitignore文件添加到仓库并提交,之后Git就会按照规则忽略相应的文件和目录。

.gitkeep 的使用

  1. 创建文件:在需要保留的空目录下创建一个名为.gitkeep的文件,可以使用touch /path/to/emptydirectory/.gitkeep命令。
  2. 提交目录:将包含.gitkeep文件的目录添加到仓库并提交,这样空目录就会被保留在仓库中。

核心代码

.gitignore 示例

1
2
3
4
5
6
7
8
# 忽略所有文件
*

# 不忽略 .gitignore 文件
!.gitignore

# 不忽略所有 .txt 文件
!*.txt

.gitkeep 示例

1
# This file is used to keep the directory empty in Git

最佳实践

  • .gitignore:将通用的忽略规则放在项目根目录的.gitignore文件中,对于特定子目录的规则可以在该子目录下创建.gitignore文件。例如,在前端项目中,通常会忽略node_modules目录,在根目录的.gitignore中添加node_modules/
  • .gitkeep:当需要保留一个空目录时,直接在该目录下创建.gitkeep文件。例如,在项目中创建一个logs目录用于存放日志文件,初始时该目录为空,可以在其中创建.gitkeep文件,确保该目录被纳入版本控制。

常见问题

.gitignore 规则不生效

可能是因为文件已经被纳入版本控制,需要先从缓存中移除该文件,再提交.gitignore文件。可以使用git rm --cached <file>命令移除缓存中的文件。

.gitkeep 不是官方特性

虽然.gitkeep不是Git的官方特性,但它是一种广泛使用的约定。如果不想使用.gitkeep,也可以使用空的.gitignore文件来达到类似的效果。


探究.gitignore与.gitkeep的区别
https://119291.xyz/posts/2025-05-13.explore-differences-between-gitignore-and-gitkeep/
作者
ww
发布于
2025年5月13日
许可协议