最近一直忙于新项目,也是一个人在搞,时间紧任务重!所以在使用Git对源码进行提交过程中出现的各种问题也没有来得及整理,项目接近尾声,对个人认为“最烦人”的问题梳理一下解决流程。
先看问题截图:
1.什么是.DS_Store?
.DS_Store,用于存储当前文件夹的一些Meta信息。每次提交代码时,我都要在代码仓库的.gitignore中声明,忽略这类文件。
解决方案有很多,在此只介绍一种简单不失文雅的解决方案:
配置全局的.gitignore
问题1:去哪里找这个.gitignore ?
问题2:找到怎么配置?
问题3:配置之后一定有效果吗?
解决以上三个问题,我们的上述报错问题也就迎刃而解了!
-
问题1:去哪里找这个.gitignore ?
.gitignore 文件路径是在用户下面的,如果没有,找到用户这个目录,在下面创建一个 该文件:
如果没有,可以在终端里面 cd
到当前目录,然后创建一个文件,创建方法如下:
touch .gitignore
-
问题2:找到怎么配置?
1、在对我们创建号的 .gitignore
文件进行配置之前,我们还需要做一步操作:创建一个 .gitignore_global
文件,路径与上述的路径一致,方法如下:
touch .gitignore_global
在上面的图中也可以看到这个文件已经创建了。
2、创建好以后,用文本编辑打开这个文件,把需要全局忽略的文件类型塞到这个文件里:
# .gitignore_global
####################################
######## OS generated files ########
####################################
.DS_Store
.DS_Store?
*.swp
._*
.Spotlight-V100
.Trashes
Icon?
ehthumbs.db
Thumbs.db
####################################
############# packages #############
####################################
*.7z
*.dmg
*.gz
*.iso
*.jar
*.rar
*.tar
*.zip
如下图:
3、在~/.gitconfig中引入.gitignore_global
[user]
name = 你的账户名字
email = 你的邮箱
[push]
default = matching
[core]
excludesfile =/Users/YooGo/.gitignore_global
-
问题3:配置之后一定有效果吗?
通过以上两部的解决,只能说成功了 50% 。。。。。
如果在刚开始起步(在第一次次push之前)就做了上述操作的话,那就能成功。如果忘记配置那么到后期远程仓库就会跟踪你的.DS_Store,那么你就总会出现这种情况了;
error: Your local changes to the following files would be overwritten by merge: .DS_Store
或:
both modified: .DS_Store
如果开始的时候忘记配置了忽略文件,可以通过下面的命令进行配置:
git rm -r --cached .DS_Store
经过以上3步操作,应该可以解决问题了。
下面给出.gitignore的格式规范:
• 所有空行或者以注释符号 # 开头的行都会被 Git 忽略。
• 可以使用标准的 glob 模式匹配。
• 匹配模式最后跟反斜杠(/)说明要忽略的是目录。
• 要忽略指定模式以外的文件或目录,可以在模式前加上惊叹号(!)取反。
• 所谓的 glob 模式是指 shell 所使用的简化了的正则表达式。
• 星号(*)匹配零个或多个任意字符;
• [abc] 匹配任何一个列在方括号中的字符(这个例子要么匹配一个 a,要么匹配一个 b,要么匹配一个 c);
• 问号(?)只匹配一个任意字符;
• 如果在方括号中使用短划线分隔两个字符,表示所有在这两个字符范围内的都可以匹配(比如[0-9]表示匹配所有 0 到 9 的数字).