gitattributes手册
gitattributes(5) Manual Page
1.gitattributes是什么?
gitattributes用于定義每個(gè)路徑的屬性。
其語(yǔ)法是:pattern attr1 attr2 ...
2.什么叫做定義每個(gè)路徑的屬性?
比如:(pattern attr1)? *.txt text
*.txt就是一個(gè)pattern,用來(lái)匹配所有的.txt文件,匹配到的各個(gè)文件就有各自的路徑。
比如text屬性,text就是一個(gè)屬性名,它的值是true。
3.pattern后面可以接多個(gè)屬性,又是怎么給屬性賦值的呢?
每種屬性可能有Set,Unset,Set to a value,Unspecified幾種狀態(tài)。
Set狀態(tài)就是 其值是true,單獨(dú)寫(xiě)出這個(gè)屬性名就表示其值是true。
Unset狀態(tài)就是 其值是false,屬性名加上-就表示其值是false。
Set to a value狀態(tài)就是 屬性名=值,值就是一個(gè)字符串
Unspecified狀態(tài) 就是pattern沒(méi)有匹配到路徑,以及沒(méi)有說(shuō)明路徑有還是沒(méi)有屬性。
舉個(gè)例子,text屬性
Set狀態(tài) text
Unset狀態(tài) -text
Set to a value狀態(tài) text=auto
4.在哪些地方可以寫(xiě)gitattributes呢?
①. $GIT_DIR/info/attributes 文件中 (優(yōu)先級(jí)高)
②. 各個(gè)文件路徑所在目錄下的.gitattributes文件,以及所有父目錄下的.gitattributes文件(優(yōu)先級(jí)中,距離越遠(yuǎn)優(yōu)先級(jí)越低)
③. 全局及系統(tǒng)范圍下的文件(優(yōu)先級(jí)低)
5.各個(gè)位置的gitattributes分別用于什么目的呢?
如果只想影響一個(gè)用戶的某一個(gè)repository,就放在$GIT_DIR/info/attributes中。因?yàn)檫@個(gè)文件是repository所獨(dú)有的,是不會(huì)放到版本控制中的,因而別的repository訪問(wèn)不到。
對(duì)于所有用戶都感興趣的gitattributes就放到.gitattributes文件中。因?yàn)檫@些文件會(huì)放到版本控制中,分發(fā)給其他的repository。
對(duì)于影響一個(gè)用戶的所有repository的屬性就放到由core.attributesfile配置選項(xiàng)指定的文件中。
針對(duì)一個(gè)系統(tǒng)中的所有用戶的屬性應(yīng)該放到$(prefix)/etc/gitattributes文件中。
6.gitattributes中的屬性對(duì)Git有什么影響呢?
對(duì)于遷入或遷出的影響:
遷入就是將working tree中你準(zhǔn)備的內(nèi)容保存到repository中,比如git add,git commit命令。
遷出就是將保存在repository中的內(nèi)容拷貝到working tree中,比如git checkout,git merge命令。
text屬性
給一個(gè)路徑設(shè)置text屬性可以啟用和控制end-of-line的規(guī)范化。當(dāng)一個(gè)文本文件被規(guī)范化時(shí),在repository中它的行結(jié)束符會(huì)被轉(zhuǎn)換為L(zhǎng)F。
要控制在working directory中使用的行結(jié)束符,就要為單個(gè)文件使用eol屬性以及為所有文本文件使用core.eol配置。
①.Set狀態(tài) 在路徑中設(shè)置text屬性為Set狀態(tài)會(huì)啟用end-of-line的規(guī)范化并將這個(gè)路徑標(biāo)記為文本文件。不需要猜測(cè)內(nèi)容類(lèi)型,End-of-line轉(zhuǎn)換就會(huì)發(fā)生。
②.Unset狀態(tài)?在路徑中設(shè)置text屬性為Unset狀態(tài)就是告訴git在遷入遷出時(shí)不嘗試任何的end-of-line轉(zhuǎn)換。
③.Set to string value "auto" 狀態(tài)?設(shè)置text屬性為“auto”狀態(tài)時(shí),?路徑就標(biāo)記為自動(dòng)end-of-line規(guī)范化。如果git確定內(nèi)容是文本,在遷入時(shí),行結(jié)束符就被規(guī)范化為L(zhǎng)F。
④.Unspecified狀態(tài) 如果text屬性沒(méi)有被指定,git使用core.autocrlf配置變量來(lái)決定這個(gè)文件是否應(yīng)該被轉(zhuǎn)換。
任何其他值都會(huì)使得git的行為和text屬性設(shè)置為Unspecified狀態(tài)時(shí)一樣。
eol屬性
這個(gè)屬性用于設(shè)定在working directory中使用的行結(jié)束符。它會(huì)動(dòng)用end-of-line規(guī)范化而不做任何的內(nèi)容檢查,高效地設(shè)置text屬性。
①.Set to string value "crlf" 狀態(tài)? 這個(gè)設(shè)置會(huì)強(qiáng)制git在遷入文件時(shí)規(guī)范化行結(jié)束符,并且當(dāng)文件遷出時(shí),將它們轉(zhuǎn)為CRLF。
②.Set to string value "lf" 狀態(tài)??這個(gè)設(shè)置會(huì)強(qiáng)制git在遷入文件時(shí)規(guī)范化行結(jié)束符為L(zhǎng)F,并且當(dāng)文件遷出時(shí),阻止轉(zhuǎn)換為CRLF。
?
crlf屬性的向后兼容性
為了向后兼容,crlf屬性按如下方式解讀:
crlf text -crlf -text crlf=input eol=lfEnd-of-line轉(zhuǎn)換
雖然git通常只保留文件內(nèi)容,但是它可以被配置來(lái)規(guī)范化在repository中的行結(jié)束符為LF,可以選擇在文件遷出時(shí)將它們轉(zhuǎn)換為CRLF。
這是一個(gè)讓git規(guī)范化.txt,.vcproj,.sh文件的例子,確保在working directory中,.vcproj文件有CRLF,.sh文件有LF,并且不管.jpg文件的內(nèi)容阻止其被規(guī)范化。
*.txt text *.vcproj eol=crlf *.sh eol=lf *.jpg -text其他的源代碼管理系統(tǒng)規(guī)范化在repository中的所有文本文件,并且在git中有兩種啟用類(lèi)似的自動(dòng)規(guī)范化的方式。
如果你只是想在你的working directory中用CRLF行結(jié)束符而不管你的repository,你可以設(shè)置config變量“core.autocrlf”而不用改變?nèi)魏螌傩浴?/p>
[core]
? ? autocrlf = true
這不會(huì)強(qiáng)制所有文本文件的規(guī)范化,但是確實(shí)會(huì)保證你引入到repository中的文本文件的行結(jié)束符,在被加入時(shí)規(guī)范化為L(zhǎng)F,確保在repository中已經(jīng)規(guī)范化的文件保持規(guī)范化。
如果你想和強(qiáng)制end-of-line規(guī)范化的源代碼管理系統(tǒng)進(jìn)行互操作,或你只是想要在你的repository中的所有文本文件被規(guī)范化,你應(yīng)當(dāng)為所有文件設(shè)置text屬性為“auto”。
*? ?text=auto
這會(huì)保證所有g(shù)it認(rèn)為是文本的文件在repository中規(guī)范化(LF)。core.eol配置變量控制在你的working directory中g(shù)it會(huì)使用的行結(jié)束符;默認(rèn)是使用你的平臺(tái)的本地行結(jié)束符。如果core.autocrlf設(shè)置了就是CRLF。
注意
當(dāng)在一個(gè)既存的repository中啟用text=auto時(shí),任何包含CRLFs的文本文件應(yīng)當(dāng)被規(guī)范化。如果它們沒(méi)有被規(guī)范化的話,在下一次某個(gè)人變更了它們的話,會(huì)造成不幸的錯(cuò)誤認(rèn)定。
從一個(gè)干凈的工作目錄開(kāi)始:
$ echo "* text=auto" >>.gitattributes $ rm .git/index # Remove the index to force git to $ git reset # re-scan the working directory $ git status # Show files that will be normalized $ git add -u $ git add .gitattributes $ git commit -m "Introduce end-of-line normalization"對(duì)于任何不應(yīng)該被規(guī)范化的文件出現(xiàn)在git status中的話,在運(yùn)行g(shù)it add -u之前設(shè)置text屬性為unset狀態(tài)。
manual.pdf -text相反,git未檢測(cè)到的文本文件可以手動(dòng)啟用規(guī)范化。
weirdchars.txt text如果core.safecrlf被設(shè)為“true”或“warn”,git會(huì)驗(yàn)證這個(gè)轉(zhuǎn)換對(duì)于當(dāng)前的core.autocrlf設(shè)置是否是可逆的。對(duì)于“true”,git拒絕不可逆轉(zhuǎn)的轉(zhuǎn)換。對(duì)于“warn”,git只是打印一個(gè)警告,但接受不可逆的轉(zhuǎn)換。
安全觸發(fā)器阻止對(duì)work tree中的文件執(zhí)行這種轉(zhuǎn)換,但有一些例外。 即使…
? git add???
? git apply???
? git diff ???
?
轉(zhuǎn)載于:https://www.cnblogs.com/niaomingjian/p/8446819.html
總結(jié)
以上是生活随笔為你收集整理的gitattributes手册的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 风险分解结构
- 下一篇: NEO从源码分析看网络通信