git

.gitignore如何写

git版本管理中的该如何正确书写

Posted by caoyq on June 14, 2017

.gitignore简介

一般来说每个Git项目中都需要一个.gitignore文件,这个文件的作用就是告诉Git哪些文件不需要添加到版本管理中。实际项目中,很多文件都是不需要版本管理的,比如Python的.pyc文件和一些包含密码的配置文件等等。这个文件的内容是一些规则,Git会根据这些规则来判断是否将文件添加到版本控制中。


规则说明

git 对于 .ignore 配置文件是按行从上到下进行规则匹配的

1、配置语法

  • 以斜杠“/”开头表示目录;
  • 以星号“*”通配多个字符;
  • 以问号“?”通配单个字符
  • 以方括号“[]”包含单个字符的匹配列表;
  • 以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;

2、示例说明

/fd1/*
忽略目录 fd1 下的全部内容;注意,不管是根目录下的 /fd1/ 目录,还是某个子目录 /child/fd1/ 目录,都会被忽略
*.zip
忽略所有zip文件
!one.zip
不能忽略one.zip文件,主要是为通配符列出特例

如何写

对于不同语言,代码有不同的忽略项,具体可以参考GitHub给出的标准规范写法

对于Objective-C或Swift而言,参照其他资源写了简单能用的

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
# Xcode
build/
DerivedData/
*.pbxuser
!default.pbxuser
*.mode1v3
!default.mode1v3
*.mode2v3
!default.mode2v3
*.perspectivev3
!default.perspectivev3
xcuserdata
profile

## Other
*.moved-aside

# macOS
.DS_Store

如何用

1、单一工程设置

针对单一工程排除文件,这种方式会让这个工程的所有修改者在克隆代码的同时,也能克隆到过滤规则,而不用自己再写一份,这就能保证所有修改者应用的都是同一份规则,而不是张三自己有一套过滤规则,李四又使用另一套过滤规则

  • 工程根目录下建立.gitignore文件,将要排除的文件或目录 写到.gitignore这个文件中

2、全局设置

全局设置排除文件,这会在全局起作用,只要是Git管理的工程,在提交时都会自动排除不在控制范围内的文件或目录。这种方法对开发者来说,比较省事,只要一次全局配置,不用每次建立工程都要配置一遍过滤规则。但是这不保证其他的开发者在克隆你的代码后,他们那边的规则跟你的是一样的,这就带来了代码提交过程中的各种冲突问题。

  • 建立一个.gitignore_global文件,把要排除的文件写进去(命名就按照全局来)
  • 在这里我们不规定一定要把.gitignore_global文件放到某个工程下面,而是任何地方,比如我们这里放到了/Users/macName 目录下
  • 使用命令方式可以配置全局排除文件 git config --global core.excludesfile ~/.gitignore,你会发现在~/.gitconfig 文件中会出现excludesfile = /Users/macName/.gitignore_global

注意事项

  • .gitignore文件只能作用于 Untracked 文件,也就是那些从来没有被 Git 记录过的文件(自添加以后,从未 addcommit 过的文件),如果文件曾经被 Git 记录过,那么.gitignore 就对它们完全无效。那么解决方法就是先把本地缓存删除(改变成Untracked状态),然后再提交

    1
    2
    3
    4
    
      // 不能忘记末尾的点
      git rm -r --cached .
      git add .
      git commit -m 'update .gitignore'
    

Reference