git update-ref (Plumbing Commands) – Git 中文开发手册

[
  •   Git 中文开发手册

    git update-ref (Plumbing Commands) - Git 中文开发手册

    命名

    git-update-ref - 安全地更新存储在ref中的对象名称

    概要

    git update-ref [-m ] (-d  [] | [--no-deref] [--create-reflog]   [] | --stdin [-z])

    描述

    给定两个参数,将存储在中,可能会取消引用符号引用。例如,git update-ref HEAD 将当前分支头更新为新对象。

    给定三个参数,在验证的当前值匹配之后,将存储在中,可能会解引用符号引用。例如git update-ref refs/heads/master ,只有当它的当前值是时,才将主分支头更新为。您可以指定40“0”或空字符串作为以确保您创建的引用不存在。

    它还允许“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  NUL  NUL [] NUL
    create SP  NUL  NUL
    delete SP  NUL [] NUL
    verify SP  NUL [] NUL
    option SP  NUL

    在这种格式中,使用40个“0”来指定零值,并使用空字符串指定缺失值。

    无论哪种格式,值都可以以Git认为是对象名称的任何形式指定。任何其他格式的命令或重复的都会产生错误。命令的含义是:

    update

    如果给定,在验证之后将设置为。指定一个零以确保ref在更新后不存在和/或一个零以确保ref在更新之前不存在。

    create

    验证它不存在后,用创建。给定的可能不是零。

    delete

    如果给定,在验证它存在之后删除。如果给出,可能不是零。

    verify

    验证,但不要更改它。如果零或丢失,则ref不能存在。

    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”是的40个字符的十六进制值,“committer”是提交者的姓名,电子邮件地址和日期标准的Git提交者ident格式。可选用-m:oldsha1 SP newsha1 SP 提交者 TAB 消息 LF

    其中所有字段均如上所述,“消息”是提供给 -m 选项的值。

    如果当前用户无法创建新的日志文件,追加到现有的日志文件或没有可用的提交者信息,则更新将失败(不会更改)。

  •   Git 中文开发手册
    ]
    转载请保留页面地址:https://www.breakyizhan.com/git/30069.html

    posted on 2020-07-07 20:52  MrAit  阅读(1170)  评论(0编辑  收藏  举报

    导航