設定和配置
獲取和建立專案
基本快照
分支與合併
共享和更新專案
檢查和比較
打補丁
除錯
電子郵件
外部系統
伺服器管理
指南
管理
底層命令
-
2.52.0
2025-11-17
- 2.43.1 → 2.51.2 無更改
-
2.43.0
2023-11-20
- 2.23.1 → 2.42.4 無更改
-
2.23.0
2019-08-16
- 2.17.0 → 2.22.5 無更改
-
2.16.6
2019-12-06
-
2.15.4
2019-12-06
- 2.13.7 → 2.14.6 無更改
-
2.12.5
2017-09-22
- 2.11.4 無更改
-
2.10.5
2017-09-22
- 2.7.6 → 2.9.5 無變更
-
2.6.7
2017-05-05
- 2.1.4 → 2.5.6 無更改
-
2.0.5
2014-12-17
概要
git check-ref-format [--normalize]
[--[no-]allow-onelevel] [--refspec-pattern]
<refname>
git check-ref-format --branch <branchname-shorthand>
描述
檢查給定的refname是否可接受,如果不可接受則以非零狀態退出。
在 Git 中,引用用於指定分支和標籤。分支頭儲存在 refs/heads 層級中,而標籤儲存在引用名稱空間(通常是 $GIT_DIR/refs/heads 和 $GIT_DIR/refs/tags 目錄,或者如果引用被 git gc 打包,則作為 $GIT_DIR/packed-refs 檔案中的條目)的 refs/tags 層級中。
Git 對引用的命名方式施加以下規則:
-
它們可以包含斜槓
/用於分層(目錄)分組,但任何斜槓分隔的元件都不能以點.開頭,也不能以序列.lock結尾。 -
它們必須包含至少一個
/。這強制要求存在一個類別,如heads/、tags/等,但實際名稱不受限制。如果使用了--allow-onelevel選項,則此規則無效。 -
它們不能在任何地方包含兩個連續的點
..。 -
它們不能在任何地方包含 ASCII 控制字元(即位元組值小於 \040 或 \177
DEL)、空格、波浪號~、插入符號^或冒號:。 -
它們不能在任何地方包含問號 ?、星號
*或開方括號 [。有關此規則的例外情況,請參見下面的--refspec-pattern選項。 -
它們不能以斜槓
/開頭或結尾,也不能包含多個連續的斜槓(有關此規則的例外情況,請參見下面的--normalize選項)。 -
它們不能以點
.結尾。 -
它們不能包含序列
@{。 -
它們不能是單個字元
@。 -
它們不能包含 \。
這些規則使得基於 shell 指令碼的工具易於解析引用名稱,避免了在引用名稱未加引號(錯誤地)使用時被 shell 進行路徑名擴充套件,並且還可以避免某些引用名稱表示式中的歧義(參見 gitrevisions[7])。
-
雙點
..通常用在ref1..ref2中,在某些上下文中,此表示法表示^ref1ref2(即不在ref1中,但在ref2中)。 -
波浪號
~和插入符號^用於引入後置第 n 個父級和剝洋蔥操作。 -
冒號
:在 fetch 和 push 操作中用於srcref:dstref,表示“使用 srcref 的值並將其儲存在 dstref 中”。它也可用於選擇特定物件,如 'git cat-file': "git cat-file blob v1.3.3:refs.c"。 -
at-open-brace
@{用於表示訪問 reflog 條目。
使用 --branch 選項時,該命令接受一個名稱並檢查其是否可用作有效的分支名稱(例如,在建立新分支時)。但在使用可能引用分離 HEAD 狀態的舊 checkout 語法時要小心。git check-ref-format --branch $name 實現的規則可能比 git check-ref-format refs/heads/$name 更嚴格(例如,連字元可以出現在 ref 元件的開頭,但在分支名稱的開頭是明確禁止的)。當在儲存庫中使用 --branch 選項執行時,輸入首先會針對“舊 checkout 語法” @{-n} 進行擴充套件。例如,@{-1} 是引用使用“git switch”或“git checkout”操作最後簽出的內容的一種方式。此選項應由高階命令使用,以接受在期望分支名稱的任何地方使用此語法,這樣它們就可以像您鍵入分支名稱一樣執行。請注意,作為例外,“舊 checkout 操作”可能會導致提交物件名稱,當 N 次最後簽出的內容不是分支時。
選項
- --allow-onelevel
- --no-allow-onelevel
-
控制是否接受單級引用名稱(即,不包含多個
/分隔元件的引用名稱)。預設值為--no-allow-onelevel。 - --refspec-pattern
-
將 <refname> 解釋為 refspec 的引用名稱模式(與遠端儲存庫一起使用)。如果啟用此選項,<refname> 允許在 refspec 中包含單個
*(例如,foo/bar*/baz或foo/bar*baz/,但不能是foo/bar*/baz*)。 - --normalize
-
透過刪除任何前導斜槓(
/)字元並將名稱元件之間的連續斜槓壓縮為單個斜槓來規範化refname。如果規範化後的引用名稱有效,則將其列印到標準輸出並以狀態 0 退出,否則以非零狀態退出。(--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 ; }