git
中提供两种过滤机制
- 全局过滤机制,即对所有的git
都适用
- 针对某个项目使用的过滤规则。
.gitignore
配置文件用于配置不需要加入版本管理的文件,配置好该文件可以为我们的版本管理带来很大的便利,以下是个人对于配置 .gitignore
的一些心得。问题:.gitignore
只适用于尚未添加到git
库的文件。如果已经添加了,则需用git rm
移除后再重新commit
第一步:添加.gitignore
文件
往项目根目录添加一个文件.gitignore
这文件和.git
文件夹同级。
第二步:设置过滤条件
- 配置语法:
以斜杠“/”开头表示目录;
以星号“*”通配多个字符;
以问号“?”通配单个字符
以方括号“[]”包含单个字符的匹配列表;
以叹号“!”表示不忽略(跟踪)匹配到的文件或目录;
此外,git 对于 .ignore 配置文件是按行从上到下进行规则匹配的,意味着如果前面的规则匹配的范围更大,则后面的规则将不会生效;
- 示例:
(1)规则:fd1/*
说明:忽略目录 fd1
下的全部内容;注意,不管是根目录下的/fd1/
目录,还是某个子目录/child/fd1/
目录,都会被忽略;
(2)规则:/fd1/*
说明:忽略根目录下的 /fd1/
目录的全部内容;
(3)规则:
/*
!.gitignore
!/fw/bin/
!/fw/sf/
*/
说明:忽略全部内容,但是不忽略.gitignore
文件、根目录下的 /fw/bin/
和 /fw/sf/
目录;
第二种方法:可以修改.git/info/exclude
文件来实现。
举例如下:
vi .git/info/exclude
# git ls-files --others --exclude-from=.git/info/exclude
# Lines that start with '#' are comments.
# For a project mostly in C, the following would be a good set of
# exclude patterns (uncomment them if you want to use them):
# *.[oa]
# *~
*.[oa] #忽略以.o或.a结尾的文件或目录
*.pyc
*.exe #忽略以.exe结尾的文件或目录
.* #忽略以.开头的文件或目录
*.rar
*.zip
*.gz
*.bz2
*.db
*.sqlite
摆脱 UserInterfaceState.xcuserstate
给Xcode 版本控制(git)带来的困扰
当添加到缓存区的时候命令 rm 移除不了文件
错误提示:
zizp:NightCafe zizp$ git rm .DS_Store
error: the following file has changes staged in the index: .DS_Store
(use --cached to keep the file, or -f to force removal)
解决方法:
$ git rm --cached iLedger.xcodeproj/project.xcworkspace/xcuserdata/Alex.xcuserdatad/UserInterfaceState.xcuserstate
$ git commit -m "Removed the stupid strange file that shouldn't be tracked"
$ git push
或者是
$ git rm -f NightCafe.xcworkspace/xcuserdata/zizp.xcuserdatad/UserInterfaceState.xcuserstate