?
? ????? PHP ??? ???? ??? ?? ??
git-check-ref-format - 確保引用名稱格式正確
git check-ref-format [--normalize] [--[no-]allow-onelevel] [--refspec-pattern] <refname>git check-ref-format --branch <branchname-shorthand>
檢查給定refname
是否可接受,如果不是,則退出非零狀態(tài)。
Git 使用引用來指定分支和標(biāo)簽。分支頭存儲在refs/heads
層次結(jié)構(gòu)中,而標(biāo)記存儲在refs/tags
ref命名空間的層次結(jié)構(gòu)中(通常位于$GIT_DIR/refs/heads
和$GIT_DIR/refs/tags
目錄中,或者作為$GIT_DIR/packed-refs
文件中的條目,如果引用被git gc
打包)。
Git 對引用的命名方式施加了以下規(guī)則:
1. 它們可以包括/
用于分層(目錄)分組的斜杠,但沒有斜線不以.
開始或以.lock
序列結(jié)束。
2. 它們必須包含至少一個/
。這強制類似的heads/
,tags/
等存在,但是實際名稱不受限制。如果使用--allow-onelevel
選項,則放棄該規(guī)則。
3. 他們不能在..
任何地方有兩個連續(xù)的點。
4. 它們不能具有任何位置的 ASCII 控制字符(即,其值低于\ 040或\ 177DEL
的字節(jié)),空格,波浪形符號~
,插入符號^
或冒號:
。
5. 他們不能在任何地方出現(xiàn)問號?
,星號*
或開口支架[
。有關(guān)--refspec-pattern
此規(guī)則的例外情況,請參閱下面的選項。
6. 它們不能以斜杠開始或結(jié)束,/
或者包含多個連續(xù)的斜杠(請參閱--normalize
下面的選項以了解此規(guī)則的例外情況)
7. 它們不能以點.
結(jié)束。
8. 他們不能包含一個@{
序列。
9. 他們不能是單個@
角色。
10. 他們不能包含一個\
。
這些規(guī)則使得基于 shell 腳本的工具可以很容易地解析引用名稱,當(dāng)引用名稱被不加引號(錯誤地)使用引用名稱時,通過 shell 進(jìn)行路徑名擴展,并且還避免了某些引用名稱表達(dá)式中的歧義(請參閱gitrevisions [7]):
1. 像在ref1..ref2
中經(jīng)常使用雙點..
,在某些情況下,這個表示意味著^ref1 ref2
(即不在ref1
和在ref2
)。
2. 腭化符號~
字符和補注號^
字符被用于引入后綴nth parent
和peel onion
操作。
3. 冒號:
被用來在srcref:dstref
中表示“ 在 srccref 的值中使用 srcref的值并將其存儲在 dstref 中”在讀取和推送操作中。它也可以用來選擇一個特定的對象,比如 'git cat-file':“git cat-file blob v1.3.3:refs.c”。
4. at-open-brace @{
被用作訪問 reflog 條目的符號。
通過--branch
選項,它可以擴展“以前的分支語法” @{-n}
。例如,@{-1}
是一種引用最后一個分支的方法。這個選項應(yīng)該被porcelains用來在任何需要分支名稱的地方接受這個語法,所以他們可以像你輸入分支名稱一樣行事。
--no-allow-onelevel
控制是否接受單層refnames(即不包含多個/
分離組件的refnames )。默認(rèn)是--no-allow-onelevel
。
--refspec-pattern
將<refname>解釋為refspec的參考名稱模式(與遠(yuǎn)程存儲庫一起使用)。如果這個選項被激活,<refname>允許含有單個*
中操作的Refspec(例如,foo/bar*/baz
或foo/bar*baz/
而不是foo/bar*/baz*
)。
--normalize
refname
通過刪除任何前導(dǎo)斜杠(/
)字符并將名稱組件之間相鄰斜線的運行折疊為單斜杠來標(biāo)準(zhǔn)化。如果標(biāo)準(zhǔn)化的 refname 有效,那么將其輸出到標(biāo)準(zhǔn)輸出并以狀態(tài)0退出,否則以非零狀態(tài)退出。(--print
是拼寫--normalize
的不贊成的方式。)
打印上一個分支的名稱:$ git check-ref-format --branch @ { - 1}
確定用于新分支的參考名稱:
$ ref=$(git check-ref-format --normalize "refs/heads/$newbranch")|| { echo "we do not like '$newbranch' as a branch name." >&2 ; exit 1 ; }