Git 忽略一些文件不加入版本控制

    在git中若是想忽略掉某个文件,不让这个文件提交到版本库中,可使用修改 .gitignore 文件的方法。这个文件每一行保存了一个匹配的规则例如:git

# 此为注释 – 将被 Git 忽略缓存

            *.a       # 忽略全部 .a 结尾的文件
            !lib.a    # 但 lib.a 除外
            /TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
            build/    # 忽略 build/ 目录下的全部文件ui

            doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt.net

    这样设置了之后 全部的 .pyc 文件都不会添加到版本库中去。版本控制

    另外 git 提供了一个全局的 .gitignore,你能够在你的用户目录下建立 ~/.gitignoreglobal 文件,以一样的规则来划定哪些文件是不须要版本控制的。server

须要执行 git config --global core.excludesfile ~/.gitignoreglobal来使得它生效。ip

其余的一些过滤条件ci

    * ?:表明任意的一个字符
    * *:表明任意数目的字符
    * {!ab}:必须不是此类型
    * {ab,bb,cx}:表明ab,bb,cx中任一类型便可
    * [abc]:表明a,b,c中任一字符便可get

    * [ ^abc]:表明必须不是a,b,c中任一字符it

    因为git不会加入空目录,因此下面作法会致使tmp不会存在 tmp/*             //忽略tmp文件夹全部文件

    改下方法,在tmp下也加一个.gitignore,内容为
                        *
                        !.gitignore
    还有一种状况,就是已经commit了,再加入gitignore是无效的,因此须要删除下缓存
                        git rm -r --cached ignore_file

 

注意: .gitignore只能忽略那些原来没有被track的文件,若是某些文件已经被归入了版本管理中,则修改.gitignore是无效的。

    正确的作法是在每一个clone下来的仓库中手动设置不要检查特定文件的更改状况。
    git update-index --assume-unchanged PATH    在PATH处输入要忽略的文件。

    另外 git 还提供了另外一种 exclude 的方式来作一样的事情,不一样的是 .gitignore 这个文件自己会提交到版本库中去。用来保存的是公共的须要排除的文件。而 .git/info/exclude 这里设置的则是你本身本地须要排除的文件。 他不会影响到其余人。也不会提交到版本库中去。

    .gitignore 还有个有意思的小功能, 一个空的 .gitignore 文件 能够看成是一个 placeholder 。当你须要为项目建立一个空的 log 目录时, 这就变的颇有用。 你能够建立一个 log 目录 在里面放置一个空的 .gitignore 文件。这样当你 clone 这个 repo 的时候 git 会自动的建立好一个空的 log 目录了。

 

 

 

1、关于.gitignore 和 excludes
这两个文件的只针对还没有提交到配置库的文件才起做用。而对于已经提交的文件是不起做用的。
因而可知,这两个文件的初衷是用于排除不但愿上传入库的文件。像编译产生的临时文件等。

可是,咱们常常有这样一种状况。
有个文件,咱们必须入库,你们一块儿共享,可是呢。每一个人本地的配置又是因本身本地的环境而异。这样的话,这个文件就很崩溃了。你要入库,经过.gitignore和excludes都不起做用。每次git status都会提示你修改,你又好上传。

对于这种状况,应该使用下面的命令:

git update-index --assume-unchanged FILENAME

这样,每一个人,从库上取代码后,在本身本地都要执行一下上面的这个命令。这样,之后,你这个文件的修改,git 都会帮你忽略掉。

固然,哪一天,你但愿你的修改要提交入库,那你也必须手动修改一下 这个文件的标志位:

git update-index --no-assume-unchanged FILENAME


因此。
咱们总结一下,总的流程:仍是像你日常同样,须要入库,所有commit 提交,push。而后,因为这个文件你本地的配置跟别人不同,你须要修改它,但不须要入库与别人共享。那么你就执行上面的 git update-index --assume-unchanged 命令来忽略你本地对它的修改。

参考:
http://dancingpenguinsoflight.com/2010/02/git-tip-ignoring-modifications-to-tracked-files/comment-page-1/#comment-125527

相关文章
相关标签/搜索