1.什么是.DS_Store?
.DS_Store,用于存儲當前文件夾的一些Meta信息。每次提交代碼時,我都要在代碼倉庫的.gitignore中聲明,忽略這類文件。
2.存在哪些問題?
如果你沒有忽略此類文件時,你和你的小伙伴和代碼時就會有如下的問題:
error: Your local changes to the following files would be overwritten by merge: .DS_Store
或:
both modified: .DS_Store
3.解決辦法
1. 本地倉庫忽略
本地倉庫的文件忽略規則可以在 .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]
# *~
2.當前工作目錄添加文件忽略
·就是.gitignore,這個忽略文件只對某一級目錄下的文件的忽略有效;
·如果某一個目錄下有需要被忽略的文件,那么就可以在該目錄下手工地創建忽略文件.gitignore,
·并在這個忽略文件中寫上忽略規則,以行為單位,一條規則占據一行;
·比較特殊的情況就是在版本庫的根目錄下創建一個忽略文件.gitignore,這時,
這個.gitignore忽略文件就對版本庫根目錄下的文件有效,等價于全局范圍內的忽略文件.git/info/exclude;
對于每一級工作目錄,創建一個.gitignore文件,向該文件中添加要忽略的文件或目錄。
但在創建并編輯這個文件之前,一定要保證要忽略的文件沒有添加到git索引中。
使用命令 git rm --cached filename
將要忽略的文件從索引中刪除。
--摘抄.gitignore的格式規范
? 所有空行或者以注釋符號 # 開頭的行都會被 Git 忽略。
? 可以使用標準的 glob 模式匹配。
? 匹配模式最后跟反斜杠(/)說明要忽略的是目錄。
? 要忽略指定模式以外的文件或目錄,可以在模式前加上驚嘆號(!)取反。
?所謂的 glob 模式是指 shell 所使用的簡化了的正則表達式。
?星號(*)匹配零個或多個任意字符;
?[abc] 匹配任何一個列在方括號中的字符(這個例子要么匹配一個 a,要么匹配一個 b,要么匹配一個 c);
?問號(?)只匹配一個任意字符;
?如果在方括號中使用短劃線分隔兩個字符,表示所有在這兩個字符范圍內的都可以匹配(比如[0-9]表示匹配所有 0 到 9 的數字)。
3.配置全局的.gitignore
1、用touch .gitignore_global
創建~/.gitignore_global文件,把需要全局忽略的文件類型塞到這個文件里。(我試過)
# .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
2、在~/.gitconfig中引入.gitignore_global。
這是我的.gitconfig文件:
[user]
name = duofei
email = xxxxx@gmail.com
[push]
default = matching
[core]
excludesfile =/Users/duofei/.gitignore_global
多飛提示!
這個坑一定要記住,一定要在一開始就配置忽略文件(在第一次次push之前),如果忘記配置那么到后期遠程倉庫就會跟蹤你的.DS_Store,那么你就總會出現這種情況了;
error: Your local changes to the following files would be overwritten by merge: .DS_Store
或:
both modified: .DS_Store
反正就是各種不能如愿的和小伙伴pull、push
如果一開始的時候忘記配置了忽略文件的話,也不要怕,通過以下方法來做更改:
git rm -r --cached .DS_Store
這句代碼的意思就是解除跟蹤,清一清緩存;
然后在配好忽略文件就好OK了!