在使用Git的过程中,有些文件比如说日志、临时文件、编译的中间文件文件等不需要提交到Git仓库,这个时候需要设置对应的忽略规则,来忽略这些文件的提交。使用场景:比如说在使用git add .
命令的时候不小心把不想提交的文件添加到缓存中去了,虽然可以使用git reset HEAD example.txt
,又或者是使用git add 具体文件
的方式来避免将不想要提交的文件添加到暂存区,但是这样终归没有直接使用git add .
方便,这个时候就可以使用Git为我们提供.gitignore
文件,只要在文件中申明哪些文件不需要添加到暂存区,然后在使用git add .
命令的时候就不会被添加到暂存区了。
实现在Git中忽略不想提交的文件
- 直接在项目中定义.gitignore文件,然后在.gitignore文件中定义要忽略的文件
- 在Git项目的设置中指定忽略文件,在
.git/info/exclude
文件中写入要忽略的文件 - 定义Git全局的.gitignore文件,使用命令如下
git config --global core.excludesfile ~/.gitignore
.gitignore忽略规则的优先级
由高到低的优先级如下:
- 从命令行中读取可用的忽略规则
- 当前目录定义的规则
- 父级目录定义的规则,依次递推
- $GIT_DIR/info/exclude 文件中定义的规则
- core.excludesfile中定义的全局规则
.gitignore的匹配语法
- 空行:空行将被忽略。
- 以
#
开头的表示为注释。 - 斜杠
/
:如果斜杠出现在行首,表示只匹配项目根目录;如果斜杠出现在其他位置,表示匹配任意位置。 !
:感叹号用于取反,即排除某些匹配的文件或目录。*
:星号匹配零个或多个字符。?
:问号匹配一个字符。**
:双星号匹配任意子目录。/dir/
:表示忽略根目录下的dir
目录。dir/
:表示忽略任意位置的dir
目录。/*.txt
:表示只匹配根目录下的.txt
文件。debug.log
:表示忽略任意位置的debug.log
文件。**/logs/
:表示匹配所有子目录中的logs
目录。*.log
:表示匹配所有以.log
结尾的文件。assets/
:表示匹配名为assets
的目录。build
:表示匹配名为build
的文件或目录。build/
:表示只匹配名为build
的目录。
gitignore该开源项目收集了所有可用的.gitignore模板
Java .gitignore template
|
|
.gitignore配置不生效原因和解决
在Git中,即使在.gitignore
中标明了要忽略的文件或目录,但如果这些文件已经被纳入版本管理,依然会出现在git push
的目录中,并且在使用git status
查看状态时仍然显示为被追踪的文件。这是因为Git会缓存已经纳入版本管理的文件,即使在.gitignore
中声明了忽略路径也不会生效。
要解决这个问题,需要先将本地缓存删除,然后再进行提交操作。这样就可以确保被声明为忽略的文件不会被提交到版本库中,也不会出现在推送的目录中。 解决方法: git清除本地缓存(改变成未track状态),然后再提交:
|
|
或者在clone的时候手动设置不要检查特定文件的更改情况:git update-index --assume-unchanged PATH
需要注意的点:
.gitignore
只能忽略原来没有被track的文件,如果文件已经被纳入了版本库中,则修改.gitignore
是无效的。想要.gitignore
起作用,必须要在这些文件不在暂存区中才可以,.gitignore
文件只是忽略没有被staged(cached)
文件,对于已经被staged
文件,加入ignore文件时一定要先从staged
移除,才可以忽略。