14.Git忽略特殊文件.gitignore

有些时候,你必须把某些文件放到Git工做目录中,但又不能提交它们,好比保存了数据库密码的配置文件啦,等等,每次git status都会显示Untracked files ...,有强迫症的童鞋内心确定不爽.
好在Git考虑到了你们的感觉,这个问题解决起来也很简单,在Git工做区的根目录下建立一个特殊的.gitignore文件,而后把要忽略的文件名填进去,Git就会自动忽略这些文件.
不须要从头写.gitignore文件,GitHub已经为咱们准备了各类配置文件,只须要组合一下就可使用了.全部配置文件能够直接在线浏览: https://github.com/github/gitignore
忽略文件的原则是:
忽略操做系统自动生成的文件,好比缩略图等:
忽略编译生成的中间文件、可执行文件等,也就是若是一个文件是经过另外一个文件自动生成的,那自动生成的文件就不必放进版本库,好比Java编译产生的.class文件;
忽略你本身的带有敏感信息的配置文件,好比存放口令的配置文件.
举个例子:
假设你在Windows下进行Python开发,Windows会自动在有图片的目录下生成隐藏的缩略图文件,若是有自定义目录,目录下就会有Desktop.ini文件,所以你须要忽略Windows自动生成的垃圾文件:
# Windows:
    Thumbs.db
    ehthumbs.db
    Desktop.ini
而后,继续忽略Python编译产生的.pyc、.pyo、dist等文件或目录:
    # Python:
    *.py[cod]
    *.so
    *.egg
    *.egg-info
    dist
    build
加上你本身定义的文件,最终获得一个完整的.gitignore文件,内容以下:
# Windows:
Thumbs.db
ehthumbs.db
Desktop.ini

# Python:
*.py[cod]
*.so
*.egg
*.egg-info
dist
build
 
# My configurations:
db.ini
deploy_key_rsa
最后一步就是把.gitignore也提交到Git,就完成了!固然检验.gitignore的标准是git status命令是否是说working directory clean.
使用Windows的童鞋注意了,若是你在资源管理器里新建一个.gitignore文件,它会很是弱智地提示你必须输入文件名,可是在文本编辑器里“保存”或者“另存为”就能够把文件保存为.gitignore了。
有些时候,你想添加一个文件到Git,但发现添加不了,缘由是这个文件被.gitignore忽略了:
$ git add App.class
The following paths are ignored by one of your .gitignore files:
App.class
Use -f if you really want to add them.
若是你确实想添加该文件,能够用-f强制添加到Git:
$ git add -f App.class
或者你发现,多是.gitignore写得有问题,须要找出来到底哪一个规则写错了,能够用git check-ignore命令检查:

$ git check-ignore -v App.class
.gitignore:3:*.class    App.class

Git会告诉咱们,.gitignore的第3行规则忽略了该文件,因而咱们就能够知道应该修订哪一个规则.
小结
    忽略某些文件时,须要编写.gitignore;
    .gitignore文件自己要放到版本库里,而且能够对.gitignore作版本管理!
    .gitignore只能忽略那些原来没有被track的文件,若是某些文件已经被归入了版本管理中,则修改.gitignore是无效的.
    添加忽略以后,已经提交到版本库中的文件是没法忽略的.只能clone到本地,删除后,再进行忽略.
    正确的作法是在每一个clone下来的仓库中手动设置不要检查特定文件的更改状况。
    git update-index --assume-unchanged PATH    在PATH处输入要忽略的文件。
    另外git还提供了另外一种exclude的方式来作一样的事情,不一样的是.gitignore这个文件自己会提交到版本库中去,用来保存的是公共的须要排除的文件.而.git/info/exclude这里设置的则是你本身本地须要排除的文件.他不会影响到其余人,也不会提交到版本库中去.
    
# 此为注释 – 将被 Git 忽略
*.a       # 忽略全部 .a 结尾的文件
!lib.a    # 但 lib.a 除外
/TODO     # 仅仅忽略项目根目录下的 TODO 文件,不包括 subdir/TODO
build/    # 忽略 build/ 目录下的全部文件
doc/*.txt # 会忽略 doc/notes.txt 但不包括 doc/server/arch.txt

# Byte-compiled / optimized / DLL files
__pycache__/
*.py[cod]
*$py.class

# C extensions
*.so

# Distribution / packaging
.Python
build/
develop-eggs/
dist/
downloads/
eggs/
.eggs/
lib/
lib64/
parts/
sdist/
var/
wheels/
share/python-wheels/
*.egg-info/
.installed.cfg
*.egg
MANIFEST

# PyInstaller
#  Usually these files are written by a python script from a template
#  before PyInstaller builds the exe, so as to inject date/other infos into it.
*.manifest
*.spec

# Installer logs
pip-log.txt
pip-delete-this-directory.txt

# Unit test / coverage reports
htmlcov/
.tox/
.nox/
.coverage
.coverage.*
.cache
nosetests.xml
coverage.xml
*.cover
.hypothesis/
.pytest_cache/

# Translations
*.mo
*.pot

# Django stuff:
*.log
local_settings.py
db.sqlite3

# Flask stuff:
instance/
.webassets-cache

# Scrapy stuff:
.scrapy

# Sphinx documentation
docs/_build/

# PyBuilder
target/

# Jupyter Notebook
.ipynb_checkpoints

# IPython
profile_default/
ipython_config.py

# pyenv
.python-version

# celery beat schedule file
celerybeat-schedule

# SageMath parsed files
*.sage.py

# Environments
.env
.venv
env/
venv/
ENV/
env.bak/
venv.bak/

# Spyder project settings
.spyderproject
.spyproject

# Rope project settings
.ropeproject

# mkdocs documentation
/site

# mypy
.mypy_cache/
.dmypy.json
dmypy.json

# Pyre type checker
.pyre/
相关文章
相关标签/搜索