1. 程式人生 > >git配置文件—— .gitattributes

git配置文件—— .gitattributes

狀態 一個 自動 odi 文檔 nio -s apply 執行

.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。

  1. 在一個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的值。

git配置文件—— .gitattributes