簡體中文 ▾ 主題 ▾ 最新版本 ▾ git-check-ref-format 最後更新於 2.52.0

名稱

git-check-ref-format - 確保引用名稱格式正確

概要

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 對引用的命名方式施加以下規則:

  1. 它們可以包含斜槓 / 用於分層(目錄)分組,但任何斜槓分隔的元件都不能以點 . 開頭,也不能以序列 .lock 結尾。

  2. 它們必須包含至少一個 /。這強制要求存在一個類別,如 heads/tags/ 等,但實際名稱不受限制。如果使用了 --allow-onelevel 選項,則此規則無效。

  3. 它們不能在任何地方包含兩個連續的點 ..

  4. 它們不能在任何地方包含 ASCII 控制字元(即位元組值小於 \040 或 \177 DEL)、空格、波浪號 ~、插入符號 ^ 或冒號 :

  5. 它們不能在任何地方包含問號 ?、星號 * 或開方括號 [。有關此規則的例外情況,請參見下面的 --refspec-pattern 選項。

  6. 它們不能以斜槓 / 開頭或結尾,也不能包含多個連續的斜槓(有關此規則的例外情況,請參見下面的 --normalize 選項)。

  7. 它們不能以點 . 結尾。

  8. 它們不能包含序列 @{

  9. 它們不能是單個字元 @

  10. 它們不能包含 \

這些規則使得基於 shell 指令碼的工具易於解析引用名稱,避免了在引用名稱未加引號(錯誤地)使用時被 shell 進行路徑名擴充套件,並且還可以避免某些引用名稱表示式中的歧義(參見 gitrevisions[7])。

  1. 雙點 .. 通常用在 ref1..ref2 中,在某些上下文中,此表示法表示 ^ref1 ref2(即不在 ref1 中,但在 ref2 中)。

  2. 波浪號 ~ 和插入符號 ^ 用於引入後置第 n 個父級剝洋蔥操作。

  3. 冒號 : 在 fetch 和 push 操作中用於 srcref:dstref,表示“使用 srcref 的值並將其儲存在 dstref 中”。它也可用於選擇特定物件,如 'git cat-file': "git cat-file blob v1.3.3:refs.c"。

  4. 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*/bazfoo/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 ; }

GIT

Git[1] 套件的一部分