簡體中文 ▾ 主題 ▾ 最新版本 ▾ git-check-ref-format 最後更新於 2.43.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 層次結構中,而標籤儲存在引用名稱空間的 refs/tags 層次結構中(通常在 $GIT_DIR/refs/heads$GIT_DIR/refs/tags 目錄中,如果引用由 git gc 打包,則作為檔案 $GIT_DIR/packed-refs 中的條目)。

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. 冒號 : 用於 srcref:dstref 形式,在 fetch 和 push 操作中表示“使用 srcref 的值並將其儲存在 dstref 中”。它也可以用於選擇特定的物件,例如與 'git cat-file' 一起使用時:“git cat-file blob v1.3.3:refs.c”。

  4. at-open-brace @{ 用作訪問 reflog 條目的表示法。

使用 --branch 選項時,該命令接受一個名稱並檢查其是否可用作有效的分支名稱(例如,在建立新分支時)。但請注意,使用舊的 checkout 語法時可能會引用分離的 HEAD 狀態。 git check-ref-format --branch $name 所實現的規則可能比 git check-ref-format refs/heads/$name 所說的更嚴格(例如,破折號可以出現在引用元件的開頭,但在分支名稱的開頭是明確禁止的)。當在倉庫中執行帶有 --branch 選項時,輸入會首先針對“上一次檢出語法” @{-n} 進行擴充套件。例如,@{-1} 是指透過 "git switch" 或 "git checkout" 操作檢出的上一個內容的引用方式。此選項應由高層命令(porcelains)使用,以便在任何預期分支名稱的地方接受此語法,從而使它們表現得如同您輸入了分支名稱一樣。值得注意的是,作為例外,“上一次檢出操作”在第N次檢出的內容不是分支時,可能會導致提交物件名稱。

選項

--[no-]allow-onelevel

控制是否接受單層引用名稱(即不包含多個 / 分隔元件的引用名稱)。預設值為 --no-allow-onelevel

--refspec-pattern

將 <refname> 解釋為 refspec 的引用名稱模式(如與遠端倉庫一起使用)。如果啟用此選項,<refname> 允許在 refspec 中包含單個 *(例如,foo/bar*/bazfoo/bar*baz/,但不包括 foo/bar*/baz*)。

--normalize

透過移除任何開頭的斜槓 (/) 字元並將名稱元件之間連續的斜槓合併為單個斜槓來標準化 refname。如果標準化後的 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] 套件的一部分

scroll-to-top