git update-ref (Plumbing Commands) - Git 中文开发手册
命名
git-update-ref - 安全地更新存储在ref中的对象名称
概要
git update-ref [-m] (-d [ ] | [--no-deref] [--create-reflog] [ ] | --stdin [-z])
描述
给定两个参数,将
给定三个参数,在验证的当前值匹配
它还允许“ref”文件通过从“ref:”的四字节标题序列开始,成为另一个ref文件的符号指针。
更重要的是,它允许ref文件的更新遵循这些符号指针,无论它们是符号链接还是这些“常规文件符号引用”。它仅在以“refs /”开头时遵循真正的符号链接:否则它只会尝试读取它们并将它们更新为常规文件(即,它将允许文件系统跟随它们,但会覆盖此类符号链接到其他位置一个普通的文件名)。
如果给出--no-deref,则本身被覆盖,而不是遵循符号指针的结果。
一般来说,使用
git update-ref HEAD "$head"
应该lot比做更安全
echo "$head" > "$GIT_DIR/HEAD"
从符号链接和错误检查的角度来看都是如此。符号链接的“refs /”规则意味着指向树“外部”的符号链接是安全的:它们将被读取而不是写入(因此,我们将永远不会通过ref符号链接写入其他树,如果您通过创建符号链接树来复制整个存档)。
使用-d标志,它会在验证它仍包含
With --stdin,update-ref从标准输入读取指令并一起执行所有修改。指定表单的命令:
update SP SP[SP ] LF create SP SP LF delete SP [SP ] LF verify SP [SP ] LF option SP LF
与此同时--create-reflog,即使通常不会创建一个ref,update-ref也会为每个ref创建一个reflog。
引用包含空白的字段,就好像它们是C源代码中的字符串一样; 即由双引号和反斜杠转义字符包围。使用40个“0”字符或空字符串指定一个零值。要指定缺失值,请完全省略该值及其前面的SP。
或者,使用-z以NUL终止的格式指定,不用引用:
update SP NULNUL [ ] NUL create SP NUL NUL delete SP NUL [ ] NUL verify SP NUL [ ] NUL option SP NUL
在这种格式中,使用40个“0”来指定零值,并使用空字符串指定缺失值。
无论哪种格式,值都可以以Git认为是对象名称的任何形式指定。任何其他格式的命令或重复的都会产生错误。命令的含义是:
update
如果给定,在验证
create
验证它不存在后,用
delete
如果给定,在验证它存在
verify
option
修改命名的下一个命令的行为。唯一有效的选择是no-deref避免取消引用符号引用。
如果所有 s可以同时与匹配的
记录更新
如果配置参数“core.logAllRefUpdates”为true并且ref为“refs / heads /”,“refs / remotes /”,“refs / notes /”下的符号,或者符号ref HEAD; 或者存在“$ GIT_DIR / logs / ”文件,则会在日志文件“$ GIT_DIR / logs / ”后git update-ref添加一行(在创建日志名称前解除所有符号引用),描述ref值的变化。日志行格式为:
oldsha1 SP newsha1 SP提交者LF其中“oldsha1”是先前存储在中的40个字符的十六进制值,“newsha1”是
其中所有字段均如上所述,“消息”是提供给 -m 选项的值。
如果当前用户无法创建新的日志文件,追加到现有的日志文件或没有可用的提交者信息,则更新将失败(不会更改)。
Git 中文开发手册