Git
English ▾ 主題 ▾ 最新版本 ▾ 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. 冒號 : 用於 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 狀態的先前檢出語法時,請謹慎。git check-ref-format --branch $name 實作的規則可能比 git check-ref-format refs/heads/$name 說的更嚴格(例如,短橫線可能出現在參考組件的開頭,但在分支名稱的開頭明確禁止)。在儲存庫中以 --branch 選項執行時,會先針對「先前檢出語法」@{-n} 展開輸入。例如,@{-1} 是一種引用使用 "git switch" 或 "git checkout" 操作最後檢出的內容的方式。瓷器應該使用此選項來接受預期分支名稱的任何地方的此語法,以便它們可以表現得好像您輸入了分支名稱一樣。作為例外,請注意,「先前檢出操作」在最後第 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