.gitignore格式
我们需要用到.gitignore以及.git/info/exclude,即不加入版本控制,在git根目录下建立.gitignore,具体设定如下:
tmp.txt //忽略tmp.txt
*.log //忽略所有log文件
tmp*.log //忽略log目录下的包括子目录下的所有log文件
其他的一些过滤条件,*其实就是正则表达式了
?:代表任意的一个字符
*:代表任意数目的字符
{!ab}:必须不是此类型
{ab,bb,cx}:代表ab,bb,cx中任一类型即可
[abc]:代表a,b,c中任一字符即可
[ ^abc]:代表必须不是a,b,c中任一字符
由于git不会加入空目录,所以下面做法会导致tmp不会存在
tmp/* //忽略tmp文件夹所有文件
改下方法,在tmp下也加一个.gitignore,内容为
*
!.gitignore
中止track
还有一种情况,就是已经commit了,再加入gitignore是无效的,我们可以删除版本库对文件的track
git rm --cached ignore_file
另外对文件夹内容的track
git rm --cached dir/ -r
最后当然要提交咯,但是这样相当于删除了版本库中的这个文件,但是本地保留,慎重!删除之后其他人clone下来就没有该文件了哦
git rm --cached ignore_file
这样就OK了么,当然不是。
已track的文件,又必须在版本库中保留,该如何ignore呢
首先我们要在.gitignore/exclude中进行上述操作忽略他们,但是这些文件已经包括在版本库,光是这样忽略是木有用的,有修改依然会有M标记
这时我们在本地clone完成后如下操作,即可忽略这些文件的版本更新:
git update-index --assume-unchanged PATH or FILE
另外重点说一下.
gitignore以及.git/info/exclude的区别
.gitignore
- 可以放到工作目录任何地方,以相对路径实施忽略;
- 可以提交到版本库,对所有clone下来的版本生效。 *所以个人特殊忽略不要在这里添加哦
.git/info/exclude
- 唯一,本地副本有效
- 不会提交到版本库,只对本地副本有效
~/.gitconfig/core.excludesfile #全局ignore方法
- 唯一,本地所有git repo有效
gitignore 优先级
它检查多个gitignore文件的模式,从高到低优先级通过下面规则确定。
来自于支持使用模式的命令行命令
来自于文件系统中的.gitignore文件。目录结构较高的.gitignore模式将被较近的.gitignore覆盖
来自$GIT_DIR/info/exclude
被配置变量core.excludesfile指定文件中的模式
Drupal 团队开发的.gitignore设置
这里抛砖引玉,介绍一下我们的做法,有错漏望指证
根目录下的.gitignore
sites/default/* #忽略该文件所有文件的改动
sites/default/default.settings.php #保留default
.* #忽略经常有的.setting .project等工程配置文件
!.gitignore #保留对.gitignore的跟踪
个人不需要提交的文件,在.git/info/exclude 自行配置
完成clone后运行下列代码
git update-index --assume-unchanged sites/default/settings.php
有时候提交了一些东西,但后来想从公共版本库删除,并且本地需要保留的文件/目录,可以运行以下代码
git rm --cached file/[dir -r]