目錄
.gitattributes
文檔
https://git-scm.com/docs/gitattributes
Git的gitattributes文件是一個文本文件,文件中的一行定義一個路徑的若干個屬性。
1. gitattributes文件以行為單位設置一個路徑下所有文件的屬性,格式如下:
要匹配的文件模式 屬性1 屬性2 ...
2. 在gitattributes文件的一行中,一個屬性(以text屬性為例)可能有4種狀態:
- 設置text
- 不設置-text
- 設置值text=string
- 未聲明,通常不出現該屬性即可;但是為了覆蓋其他文件中的聲明,也可以!text
3. gitattributes文件示例:
* text=auto
*.txt text
*.jpg -text
*.vcproj text eol=crlf
*.sh text eol=lf
*.py eol=lf
說明:
-
第1行,對任何文件,設置text=auto,表示
文件的行尾自動轉換
。如果是文本文件,則在文件入Git庫時,行尾自動轉換為LF
。如果已經在入Git庫中的文件的行尾為CRLF
,則該文件在入Git庫時,不再轉換為LF。 -
第2行,對於txt文件,標記為文本文件,並進行行尾規范化。
-
第3行,對於jpg文件,標記為非文本文件,不進行任何的行尾轉換。
-
第4行,對於vcproj文件,標記為文本文件,在文件入Git庫時進行規范化,即行尾為LF。但是在檢出到工作目錄時,行尾自動轉換為CRLF。
-
第5行,對於sh文件,標記為文本文件,在文件入Git庫時進行規范化,即行尾為LF。在檢出到工作目錄時,行尾也不會轉換為CRLF(即保持LF)。
-
第6行,對於py文件,只針對工作目錄中的文件,行尾為LF。
- 在一個Git庫中可以有多個gitattributes文件:
不同gitattributes文件中,屬性設置的優先級(從高到低):
/myproj/info/attributes文件
/myproj/my_path/.gitattributes文件
/myproj/.gitattributes文件
同一個gitattributes文件中,按照行的先后順序,如果一個文件的某個屬性被多次設置,則后序的設置優先
5. 也可以為所有Git庫設置統一的gitattributes文件:
git config --get core.attributesFile
git config --global --get core.attributesFile
6. gitattributes文件中可以定義的屬性:
- text,控制行尾的規范性。
如果一個文本文件是規范的,則Git庫中該文件的行尾總是LF。
對於工作目錄,除了text屬性之外,還可以設置eol屬性
,或core.eol配置變量
。
eol,設置行末字符
eol=lf,入庫時將行尾規范為LF,檢出時禁止將行尾轉換為CRLF
eol=crlf,入庫時將行尾規范為CRLF,檢出時將行尾轉換為CRLF
crlf,已過時,類似於text
ident,為路徑設置ident屬性,路徑中的blob對象中的$Id$將會被替換為$Id:char_40_hexadecimal_name
filter
利用命令clean,smudge
diff
merge,與merge.default配置變量一起確定如何合並文件
在執行git merge, git revert和git cherry-pick時,如何考慮文件的版本
Git內置的merge驅動:
merge
merge=text
merge=binary
merge=union
whitespace,對應core.whitespace配置變量
在執行git diff, git apply時是否考慮空格。
export-ignore,export-subst,打包相關的屬性
delta,即Delta壓縮
對於delta=false的路徑中的blob對象,不會進行Delta壓縮
encoding,為GUI工具(如gitk, git-gui)設置字符編碼,以正確顯示匹配的文件內容
如果該屬性未設置,或設置了無效值,則GUI工具會使用配置變量gui.encoding的值。