Part1 使用.gitingnre忽略需要上传的文件
在通过git(或ide中)提交的时候,为了保持代码的整洁,我们需要忽略一些文件/文件夹。例如.idea/target/logs文件夹,或其他你想指定的文件。可以通过.gitignore文件进行配置,但新人经常遇到一个问题,就是明明已经编写好要忽略的内容,可是那些文件还是在版本控制下,也就是.gitignore忽略文件没有生效的问题。
原因:
.gitignore忽略文件只能忽略那些还没有纳入版本控制的文件,如果某些文件已经被纳入了版本控制中,则修改.gitignore将不能生效。
场景:
不小心点错了idea提示,将文件加入了版本控制;或拉取新项目时,项目中本身就存在这些文件。
建议:
养成在项目刚建成一开始就编写好.gitignore忽略规则,再加入版本控制的习惯。
如果没能在项目一开始就编好.gitignore忽略文件,又要怎么让后面才编写的.gitignore忽略文件生效呢?
解决方法就是,先把本地缓存删除(改变成untracked状态),然后再提交,详细操作如下:
# 清除当前的本地Git缓存,有时可能还需要在-r后面加 -f(也可以清除指定文件的缓存)
git rm -r --cached .
# 重新建立Git索引,此时.gitignore文件就生效了
git add .
# (可选)提交当前Git版本并备注说明
git commit -m "update .gitignore"
Part2 .gitingnre配置规则
注: # 为注释 – 将被 Git 忽略,以下为常见的条件
*.a # 忽略所有 .a 结尾的文件
!lib.a # 但 lib.a 除外
/TODO # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/ # 忽略 build/ 目录下的所有文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt
其他条件
* ?:代表任意的一个字符
* *:代表任意数目的字符
* {!ab}:必须不是此类型
* {ab,bb,cx}:代表ab,bb,cx中任一类型即可
* [abc]:代表a,b,c中任一字符即可
* [ ^abc]:代表必须不是a,b,c中任一字符
此外 git 提供了一个全局的 .gitignore,你可以在你的用户目录(以macos为例)下创建 ~/.gitignoreglobal 文件,以同样的规则来划定哪些文件是不需要版本控制的。
配置完毕后需要执行下面的语句来使得它生效。
git config --global core.excludesfile ~/.gitignoreglobal
Part3 git代码管理的一些思考
1、加入版本控制前,可以先在项目的根目录中创建.gitignore并配置忽略规则
2、.gitignore文件本身也可以加入版本控制,这样可以一定程度上保证他人提交上来的代码中也没有你不需要出现的内容
3、如果你不是项目的所有者或者管理者,建议不要做2
4、如果新加入的项目中没有.gitignore,你也可以按照part1、part2,去创建一个属于你自己的忽略规则,如果提交的时候还会发现有你不想提交的文件,请参照part1。例如情况3,你需要在.gitignore文件中加入
.gitignore #忽略gitignore文件
还有更高级的用法,但我觉得这些初学者已经够用啦~