?
このドキュメントでは、 php中國語ネットマニュアル リリース
git-update-ref - 安全地更新存儲(chǔ)在ref中的對象名稱
git update-ref [-m <reason>] (-d <ref> [<oldvalue>] | [--no-deref] [--create-reflog] <ref> <newvalue> [<oldvalue>] | --stdin [-z])
給定兩個(gè)參數(shù),將<newvalue>存儲(chǔ)在<ref>中,可能會(huì)取消引用符號引用。例如,git update-ref HEAD <newvalue>
將當(dāng)前分支頭更新為新對象。
給定三個(gè)參數(shù),在驗(yàn)證<ref>的當(dāng)前值匹配<oldvalue>之后,將<newvalue>存儲(chǔ)在<ref>中,可能會(huì)解引用符號引用。例如git update-ref refs/heads/master <newvalue> <oldvalue>
,只有當(dāng)它的當(dāng)前值是<oldvalue>時(shí),才將主分支頭更新為<newvalue>。您可以指定40“0”或空字符串作為<oldvalue>以確保您創(chuàng)建的引用不存在。
它還允許“ref”文件通過從“ref:”的四字節(jié)標(biāo)題序列開始,成為另一個(gè)ref文件的符號指針。
更重要的是,它允許ref文件的更新遵循這些符號指針,無論它們是符號鏈接還是這些“常規(guī)文件符號引用”。它僅在以“refs /”開頭時(shí)遵循真正的符號鏈接:否則它只會(huì)嘗試讀取它們并將它們更新為常規(guī)文件(即,它將允許文件系統(tǒng)跟隨它們,但會(huì)覆蓋此類符號鏈接到其他位置一個(gè)普通的文件名)。
如果給出--no-deref,則<ref>本身被覆蓋,而不是遵循符號指針的結(jié)果。
一般來說,使用
git update-ref HEAD "$head"
應(yīng)該lot
比做更安全
echo "$head" > "$GIT_DIR/HEAD"
從符號鏈接和錯(cuò)誤檢查的角度來看都是如此。符號鏈接的“refs /”規(guī)則意味著指向樹“外部”的符號鏈接是安全的:它們將被讀取而不是寫入(因此,我們將永遠(yuǎn)不會(huì)通過ref符號鏈接寫入其他樹,如果您通過創(chuàng)建符號鏈接樹來復(fù)制整個(gè)存檔)。
使用-d
標(biāo)志,它會(huì)在驗(yàn)證它仍包含<oldvalue>后刪除指定的<ref>。
With --stdin
,update-ref從標(biāo)準(zhǔn)輸入讀取指令并一起執(zhí)行所有修改。指定表單的命令:
update SP <ref> SP <newvalue> [SP <oldvalue>] LF create SP <ref> SP <newvalue> LFdelete SP <ref> [SP <oldvalue>] LF verify SP <ref> [SP <oldvalue>] LF option SP <opt> LF
與此同時(shí)--create-reflog
,即使通常不會(huì)創(chuàng)建一個(gè)ref,update-ref也會(huì)為每個(gè)ref創(chuàng)建一個(gè)reflog。
引用包含空白的字段,就好像它們是C源代碼中的字符串一樣; 即由雙引號和反斜杠轉(zhuǎn)義字符包圍。使用40個(gè)“0”字符或空字符串指定一個(gè)零值。要指定缺失值,請完全省略該值及其前面的SP。
或者,使用-z
以NUL終止的格式指定,不用引用:
update SP <ref> NUL <newvalue> NUL [<oldvalue>] NUL create SP <ref> NUL <newvalue> NULdelete SP <ref> NUL [<oldvalue>] NUL verify SP <ref> NUL [<oldvalue>] NUL option SP <opt> NUL
在這種格式中,使用40“0”來指定零值,并使用空字符串指定缺失值。
無論哪種格式,值都可以以Git認(rèn)為是對象名稱的任何形式指定。任何其他格式的命令或重復(fù)的<ref>都會(huì)產(chǎn)生錯(cuò)誤。命令的含義是:
更新
如果給定,在驗(yàn)證<oldvalue>之后將<ref>設(shè)置為<newvalue>。指定一個(gè)零<newvalue>以確保ref在更新后不存在和/或一個(gè)零<oldvalue>以確保ref在更新之前不存在。
create
驗(yàn)證它不存在后,用<newvalue>創(chuàng)建<ref>。給定的<newvalue>可能不是零。
delete
如果給定,在驗(yàn)證它存在<oldvalue>之后刪除<ref>。如果給出,<oldvalue>可能不是零。
verify
驗(yàn)證<ref>與<oldvalue>,但不要更改它。如果<oldvalue>零或丟失,則ref不能存在。
option
修改命名<ref>的下一個(gè)命令的行為。唯一有效的選擇是no-deref
避免取消引用符號引用。
如果所有<ref> s可以同時(shí)與匹配的<oldvalue>鎖定,則會(huì)執(zhí)行所有修改。否則,不會(huì)執(zhí)行修改。請注意,雖然每個(gè)單獨(dú)的<ref>以原子方式更新或刪除,但并發(fā)讀者仍可能看到修改的子集。
如果配置參數(shù)“core.logAllRefUpdates”為true并且ref為“refs / heads /”,“refs / remotes /”,“refs / notes /”下的符號,或者符號ref HEAD; 或者存在“$ GIT_DIR / logs / <ref>”文件,則會(huì)在日志文件“$ GIT_DIR / logs / <ref>”后git update-ref
添加一行(在創(chuàng)建日志名稱前解除所有符號引用),描述ref值的變化。日志行格式為:
oldsha1 SP newsha1 SP提交者LF其中“oldsha1”是先前存儲(chǔ)在<ref>中的40個(gè)字符的十六進(jìn)制值,“newsha1”是<newvalue>的40個(gè)字符的十六進(jìn)制值,“committer”是提交者的姓名,電子郵件地址和日期標(biāo)準(zhǔn)的Git提交者ident格式??蛇x用-m:
oldsha1 SP newsha1 SP 提交者 TAB 消息 LF
其中所有字段均如上所述,“消息”是提供給 -m 選項(xiàng)的值。
如果當(dāng)前用戶無法創(chuàng)建新的日志文件,追加到現(xiàn)有的日志文件或沒有可用的提交者信息,則更新將失敗(不會(huì)更改<ref>)。