在使用git进行版本管理时,有一些不须要提交到版本库里的文件和文件夹,或者在管理一个实际应用的开源项目的时候,不能够把带有数据库信息的文件上传到开源平台当中,此时就须要让git自动忽略掉一下文件。文件忽略有几种方式:javascript
没有被track的文件java
咱们须要在项目的根目录当中建立.gitignore文件。 .gitignore 的格式规范以下:git
- 全部空行或者以注释符号 # 开头的行都会被 Git 忽略;
- 匹配模式最后跟反斜杠(/)说明要忽略的是目录;
- 要忽略指定模式之外的文件或目录,能够在模式前加上惊叹号(!)取反;
- 可使用标准的 glob 模式匹配;
所谓的 glob 模式是指 shell 所使用的简化了的正则表达式:正则表达式
*星 匹配零个或多个任意字符; ? 只匹配一个任意字符; [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c); [0-9] 表示匹配全部 0 到 9 的数字; *? 表明任意的一个字符 ** 表明任意数目的字符 *{!ab} 必须不是此类型 *{ab,bb,cx} 表明ab,bb,cx中任一类型便可 *[ ^abc] 表明必须不是a,b,c中任一字符因为git不会加入空目录,因此下面作法会致使tmp不会存在shell
tmp/* //忽略tmp文件夹全部文件改下方法,在tmp下也加一个.gitignore,内容为数据库
* !.gitignore
注意:.gitignore只能忽略那些原来没有被track的文件,若是某些文件已经被归入了版本管理中,则修改.gitignore是无效的
vim
另外 git 还提供了另外一种 exclude 的方式来作一样的事情。不一样的是 .gitignore 这个文件自己会提交到版本库中去,用来保存的是公共的须要排除的文件。而 .git/info/exclude 这里设置的则是你本身本地须要排除的文件,不会提交到版本库,只对本地副本有效, 他不会影响到其余人。服务器
exclude 文件所在位置.git/info/exclude , 每一个项目下都有本身的excludevim .git/info/exclude命令行
全局ignore方法,惟一,本地全部git repo有效。~/.gitconfig/core.excludesfile
1.帐户文件夹下新建一个.gitignore_global文件
2.直接修改.gitconfig的内容:版本控制[core] excludesfile = c:/Users/你的帐户文件夹/.gitignore_global或者,在Git的命令行里输入:
$ git config --global core.excludesfile ~/.gitignore_global
注意:exclude 忽略的也是未tract的文件
。
文件已被track,即远程仓库中已经包含或者已经commit/add了,这时再在.gitignore中添加规则忽略已经没法生效了,正确的作法是:
首先,删除暂存区或分支上的文件,`$ git rm --cached config.xml` 而后,更新.gitignore文件忽略掉config.xml 最后,`$ git commit -m ""`按照上面的方法,当你push以后,服务器的config.xml文件将被删除。本地存在可以使用, 只是文件不被版本控制(若是没有更新 .gitignore, 会提示有untrack文件)。有一点须要注意的,git rm --cached 不会删除本地的物理文件;若是你真的是完全不想要了,你也能够直接 rm+忽略+提交,即不要 --cached 参数。
只是想在本地忽略某文件的修改,可是服务器保存一份副本。 正确的作法是在每一个clone下来的仓库中手动设置不要检查特定文件的更改状况。
对于全部协同开发人员以及任何新加入的开发人员执行:
$ git update-index --assume-unchanged FILE 在FILE处输入要忽略的文件. 假设未更改查看忽略的文件列表
$ git ls-files -v|grep h\ // \后面有空格若是要还原的话,使用命令:
$ git update-index --no-assume-unchanged FILE这样就能够在本地版本库中忽略FILE文件的修改。可是,切记一点,这样作必须保证协同开发的全部人都执行此命令,但凡是有一我的不执行,则FILE文件的更改等到commit和push的时候便会更新到服务器而致使不肯发生的情形出现。 亲手实验结果:若是本地执行假设未更改的命令,其余人修改了文件并推送后,本地git pull提示:error: Your local changes to the following files would be overwritten by merge: FILE。git status,nothing to commit, working tree clean。若是没有更改,能够正常git pull合并,但会失去忽略状态。
.gitignore 还有个有意思的小功能
一个空的 .gitignore 文件 能够看成是一个 placeholder 。当你须要为项目建立一个空的 log 目录时, 这就变的颇有用。 你能够建立一个 log 目录 在里面放置一个空的 .gitignore 文件。这样当你 clone 这个 repo 的时候 git 会自动的建立好一个空的 log 目录了。