关于 Git 忽略文件
这两天把毕设拉到 Mac 上想解决一下闪退的问题,修改完提交的时候发现出现了一个 .DS_Store 文件,这个 .DS_Store 是 Mac OS 保存文件夹的自定义属性的隐藏文件,如文件的图标位置或背景色,相当于 Windows 的 desktop.ini,而我并不想把这个多余的东西提交上去,上网看了下,附上两条命令便于查阅:
- 禁止 .DS_store 生成:打开“终端” ,复制黏贴下面的命令,回车执行,重启 Mac 即可生效
1
defaults write com.apple.desktopservices DSDontWriteNetworkStores -bool TRUE
- 恢复 .DS_store 生成:
1
defaults delete com.apple.desktopservices DSDontWriteNetworkStores
但是我只是不想把它传上去而已,不至于禁止它生成,所以按往常一样写一个 .gitignore 文件就好,操作如下:
- 创建 .gitignore 文件:
1
touch .gitignore
- 编辑 .gitignore 文件:
1
vim .gitignore
- 补充 .gitignore 的内容,按规则填写想要忽略的文件:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16bin
.idea/
*.iml
*.classes
*.jar
*.war
*.ear
target
.settings
.classpath
.project
.metadata/
classes/
logs/
*.log
rebel.xml - 保存 .gitignore 并退出编辑: 按 ESC 键,并输入以下命令,完成操作 要忽略的文件少的时候,还可以自己来填写 .gitignore 的内容,但是当项目复杂了大了的时候,总不能每次都自己去想要忽略些什么,于是 github 官方整理了一些 .gitignore 对应不同开发场景的范例,可以点击这里跳转查看,找到想要的,直接 copy 下来改个名字扔进工作空间里就可以了
1
:wq
点开一个 Android 的来看看:
1 |
|
可以看到,按照官方的建议,忽略了一些编译生成的文件,一些本地的配置,还有日志等等,那么如果真的要我们自己编写 .gitignore,我们应该遵循什么样的规则呢,想把忽略掉的文件强行add又要怎么做呢,更加详尽的说明如下,原文地址
Git Ignore
1.WHY?
当你使用 git add . 的时候有没有遇到把你不想提交的文件也添加到了缓存中去?比如项目的本地配置信息,如果你上传到 Git 中去其他人 pull 下来的时候就会和他本地的配置有冲突,所以这样的个性化配置文件我们一般不把它推送到 git 服务器中,但是又为了偷懒每次添加缓存的时候都想用 git add . 而不是手动一个一个文件添加,该怎么办呢?很简单,git 为我们提供了一个 .gitignore 文件只要在这个文件中申明那些文件你不希望添加到 git 中去,这样当你使用 git add . 的时候这些文件就会被自动忽略掉。
2.忽略文件的原则
- 忽略操作系统自动生成的文件,比如缩略图等;
- 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如 Java 编译产生的 .class 文件;
- 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。
3.使用方法
首先,在你的工作区新建一个名称为 .gitignore 的文件。
然后,把要忽略的文件名填进去,Git 就会自动忽略这些文件。
不需要从头写 .gitignore 文件,GitHub 已经为我们准备了各种配置文件,只需要组合一下就可以使用了。所有配置文件可以直接在线浏览,上面已经附上链接直接跳转
4.栗子
比如你的项目是 java 项目,.java 文件编译后会生成 .class 文件,这些文件多数情况下是不想被传到仓库中的文件。这时候你可以直接使用 github 的 Java .gitignore 文件模板将这些忽略文件信息复制到你的 .gitignore 文件中去:
1 |
|
可以看到 github 为我们提供了最流行的 .gitignore 文件配置,保存 .ignore 文件后我们查看下 git status,检查下是否还有我们不需要的文件会被添加到 git 中去:
1 |
|
比如我的项目目录下有一个 Config.ini 文件,这个是个本地配置文件我不希望上传到 git 中去,我们可以在 gitignore 文件中添加这样的配置:
1 |
|
或者你想忽略所有的 .ini 文件你可以这样写:
1 |
|
如果有些文件已经被你忽略了,当你使用 git add 时是无法添加的,比如我忽略了 *.class,现在我想把 HelloWorld.class 添加到 git 中去:
1 |
|
git 会提示我们这个文件已经被我们忽略了,需要加上 -f 参数才能强制添加到 git 中去:
1 |
|
这样就能强制添加到缓存中去了。
如果我们意外的将想要忽略的文件添加到缓存中去了,我们可以使用 rm 命令将其从中移除:
1 |
|
如果你已经把不想上传的文件上传到了 git 仓库,那么你必须先从远程仓库删了它,我们可以从远程仓库直接删除然后 pull 代码到本地仓库这些文件就会被删除,或者从本地删除这些文件并且在 .gitignore 文件中添加这些你想忽略的文件,然后再 push 到远程仓库。
5.查看 gitignore 规则
如果你发现 .gitignore 写得有问题,需要找出来到底哪个规则写错了,可以用 git check-ignore 命令检查:
1 |
|
可以看到 HelloWorld.class 匹配到了我们的第一条 *.class 的忽略规则所以文件被忽略了
6.忽略规则文件语法
a.忽略指定文件/目录
1 |
|
b.通配符忽略规则
通配符规则如下:
1 |
|
7.不生效问题
先把本地缓存删除(改变成未track状态),然后再提交
1 |
|