• Git学习之忽略特殊文件.gitignore的配置


    1.Mac中使用Git上传项目代码时忽略.DS_Store文件

    简单的说Mac每个目录都会有个文件叫.DS_Store,它是用于存储当前文件夹的一些Meta信息。所以每次查看Git目录的状态,如果没有add这个.DS_Store文件,会有Untracked files:的提示,add了它,又会常有Changes not staged for commit:的提示,要解决这个烦人的小妖精,我们需要用到.gitignore文件去配置Git目录中需要忽略的文件。

    1. touch .gitigonre若当前文件夹下有这个文件就不用在创建了

    2. 编辑内容:

    3. 保存退出,万事大吉

    2..gitigonre文件语法与规则

    忽略文件的原则是:

    • 忽略操作系统自动生成的文件,比如缩略图等;
    • 忽略编译生成的中间文件、可执行文件等,也就是如果一个文件是通过另一个文件自动生成的,那自动生成的文件就没必要放进版本库,比如Java编译产生的.class文件;
    • 忽略你自己的带有敏感信息的配置文件,比如存放口令的配置文件。

    举个例子:
    假设你在Windows下进行Python开发,Windows会自动在有图片的目录下生成隐藏的缩略图文件,如果有自定义目录,目录下就会有Desktop.ini文件,因此你需要忽略Windows自动生成的垃圾文件:

    # Windows:
    Thumbs.db
    ehthumbs.db
    Desktop.ini
    

    然后,继续忽略Python编译产生的.pyc.pyodist等文件或目录:

    # 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
    

    有些时候,你想添加一个文件到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做版本管理!

    1).gitignore忽略规则的优先级

    .gitingore 文件中,每一行指定一个忽略规则,Git检查忽略规则的时候有多个来源,它的优先级如下(由高到低):

    1)从命令行中读取可用的忽略规则
    2)当前目录定义的规则
    3)父级目录定义的规则,依次递推
    4)$GIT_DIR/info/exclude 文件中定义的规则
    5)core.excludesfile中定义的全局规则
    

    2).gitignore忽略规则的匹配语法

    在 .gitignore 文件中,每一行的忽略规则的语法如下:

    1)空格不匹配任意文件,可作为分隔符,可用反斜杠转义
    2)以“#”开头的行都会被 Git 忽略。即#开头的文件标识注释,可以使用反斜杠进行转义。
    3)可以使用标准的glob模式匹配。所谓的glob模式是指shell所使用的简化了的正则表达式。
    4)以斜杠"/"开头表示目录;"/"结束的模式只匹配文件夹以及在该文件夹路径下的内容,但是不匹配该文件;"/"开始的模式匹配项目跟目录;如果一个模式不包含斜杠,则它匹配相对于当前 .gitignore 文件路径的内容,如果该模式不在 .gitignore 文件中,则相对于项目根目录。
    5)以星号"*"通配多个字符,即匹配多个任意字符;使用两个星号"" 表示匹配任意中间目录,比如`a//z`可以匹配 a/z, a/b/z 或 a/b/c/z等。
    6)以问号"?"通配单个字符,即匹配一个任意字符;
    7)以方括号"[]"包含单个字符的匹配列表,即匹配任何一个列在方括号中的字符。比如[abc]表示要么匹配一个a,要么匹配一个b,要么匹配一个c;如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配。比如[0-9]表示匹配所有0到9的数字,[a-z]表示匹配任意的小写字母)。
    8)以叹号"!"表示不忽略(跟踪)匹配到的文件或目录,即要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。需要特别注意的是:如果文件的父目录已经被前面的规则排除掉了,那么对这个文件用"!"规则是不起作用的。也就是说"!"开头的模式表示否定,该文件将会再次被包含,如果排除了该文件的父级目录,则使用"!"也不会再次被包含。可以使用反斜杠进行转义。
    

    需要谨记:git对于.ignore配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;

    3.全局的.gitignore

    可以通过创建~/.gitignore_global并添加到git全局配置以减少每层目录的规则重复定义。使用命令git config --global core.excludesfile ~/.gitignore_global即可

    Mac下.gitignore_global文件范例

    # for Mac OS X System Files
    .DS_Store
    Thumbs.db
     
    # for emacs
    *~
    [#]*[#]
     
    # for Eclipse
    *.project
     
    # for Logs and databases
    *.log
     
    # remove SVN
    .svn
     
    # for Xcode
    .*.swp
    .clang_complete
    *.xcodeproj/project.xcworkspace/
    *.xcodeproj/xcuserdata/
     
    # for IDEA
    */build/*
    .idea/*
    *.iml
    /out/*
    
    # Python的忽略文件
    # 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/
    pip-wheel-metadata/
    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
    
    # pipenv
    #   According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control.
    #   However, in case of collaboration, if having platform-specific dependencies or dependencies
    #   having no cross-platform support, pipenv may install dependencies that don’t work, or not
    #   install all needed dependencies.
    #Pipfile.lock
    
    # 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/
    

    4.删除GitHub上已提交的文件

    有时候在 .gitignore 文件中添加规则并未生效,原因是 .gitignore 只能忽略原来没有被 track 的文件,如果某些文件已经加入了版本管理中,修改 .gitignore 是无效的。解决方法:先把不想记录文件的本地缓存删除,再在 .gitignore 中添加忽略该文件,然后再提交。

    $ git pull origin master #先将远程仓库里面的项目拉下来
    
    # 清除本地缓存(改变成未track状态)
    git rm -r --cached . #表示清除项目中所有文件的本地缓存
    git rm -r --cached xxx    #xxx表示不想版本控制的文件
    git add .   #添加除了忽略文件外的所有文件
    git commit -m "此处可以描述你提交的信息"
    git push -f #强制推送
    
  • 相关阅读:
    Logstash介绍及Input插件介绍
    nyoj 12-喷水装置(二)(贪心)
    2018年四川理工学院专升本《大学计算机基础》考试大纲 (一)
    nyoj 10 skiing (DFS)
    党建名词及解释(五)
    党建名词及解释(四)
    党建名词及解释(三)
    党建名词及解释(二)
    党建名词及解释(一)
    lqb 基础练习 闰年判断
  • 原文地址:https://www.cnblogs.com/russellyoung/p/Mac-zhong-shi-yongGit-shang-chuan-xiang-mu-dai-ma-.html
Copyright © 2020-2023  润新知