You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
93 lines
3.1 KiB
93 lines
3.1 KiB
git-update-ref(1) |
|
================= |
|
|
|
NAME |
|
---- |
|
git-update-ref - Update the object name stored in a ref safely |
|
|
|
SYNOPSIS |
|
-------- |
|
'git-update-ref' [-m <reason>] (-d <ref> [<oldvalue>] | [--no-deref] <ref> <newvalue> [<oldvalue>]) |
|
|
|
DESCRIPTION |
|
----------- |
|
Given two arguments, stores the <newvalue> in the <ref>, possibly |
|
dereferencing the symbolic refs. E.g. `git-update-ref HEAD |
|
<newvalue>` updates the current branch head to the new object. |
|
|
|
Given three arguments, stores the <newvalue> in the <ref>, |
|
possibly dereferencing the symbolic refs, after verifying that |
|
the current value of the <ref> matches <oldvalue>. |
|
E.g. `git-update-ref refs/heads/master <newvalue> <oldvalue>` |
|
updates the master branch head to <newvalue> only if its current |
|
value is <oldvalue>. You can specify 40 "0" or an empty string |
|
as <oldvalue> to make sure that the ref you are creating does |
|
not exist. |
|
|
|
It also allows a "ref" file to be a symbolic pointer to another |
|
ref file by starting with the four-byte header sequence of |
|
"ref:". |
|
|
|
More importantly, it allows the update of a ref file to follow |
|
these symbolic pointers, whether they are symlinks or these |
|
"regular file symbolic refs". It follows *real* symlinks only |
|
if they start with "refs/": otherwise it will just try to read |
|
them and update them as a regular file (i.e. it will allow the |
|
filesystem to follow them, but will overwrite such a symlink to |
|
somewhere else with a regular filename). |
|
|
|
If --no-deref is given, <ref> itself is overwritten, rather than |
|
the result of following the symbolic pointers. |
|
|
|
In general, using |
|
|
|
git-update-ref HEAD "$head" |
|
|
|
should be a _lot_ safer than doing |
|
|
|
echo "$head" > "$GIT_DIR/HEAD" |
|
|
|
both from a symlink following standpoint *and* an error checking |
|
standpoint. The "refs/" rule for symlinks means that symlinks |
|
that point to "outside" the tree are safe: they'll be followed |
|
for reading but not for writing (so we'll never write through a |
|
ref symlink to some other tree, if you have copied a whole |
|
archive by creating a symlink tree). |
|
|
|
With `-d` flag, it deletes the named <ref> after verifying it |
|
still contains <oldvalue>. |
|
|
|
|
|
Logging Updates |
|
--------------- |
|
If config parameter "core.logAllRefUpdates" is true or the file |
|
"$GIT_DIR/logs/<ref>" exists then `git-update-ref` will append |
|
a line to the log file "$GIT_DIR/logs/<ref>" (dereferencing all |
|
symbolic refs before creating the log name) describing the change |
|
in ref value. Log lines are formatted as: |
|
|
|
. oldsha1 SP newsha1 SP committer LF |
|
+ |
|
Where "oldsha1" is the 40 character hexadecimal value previously |
|
stored in <ref>, "newsha1" is the 40 character hexadecimal value of |
|
<newvalue> and "committer" is the committer's name, email address |
|
and date in the standard GIT committer ident format. |
|
|
|
Optionally with -m: |
|
|
|
. oldsha1 SP newsha1 SP committer TAB message LF |
|
+ |
|
Where all fields are as described above and "message" is the |
|
value supplied to the -m option. |
|
|
|
An update will fail (without changing <ref>) if the current user is |
|
unable to create a new log file, append to the existing log file |
|
or does not have committer information available. |
|
|
|
Author |
|
------ |
|
Written by Linus Torvalds <torvalds@osdl.org>. |
|
|
|
GIT |
|
--- |
|
Part of the linkgit:git[1] suite
|
|
|