diff options
author | Linus Torvalds <torvalds@osdl.org> | 2005-09-25 11:43:05 -0700 |
---|---|---|
committer | Junio C Hamano <junkio@cox.net> | 2005-09-25 16:18:25 -0700 |
commit | 66bf85a462893f9df7e516a5f334dbba08122617 (patch) | |
tree | ce3cd9a0cece3301f499e284263434792629b96c /hash-object.c | |
parent | 8cc01e5019e0dc9a86bba4cba414b46627fe0424 (diff) | |
download | git-66bf85a462893f9df7e516a5f334dbba08122617.tar.gz git-66bf85a462893f9df7e516a5f334dbba08122617.tar.xz |
[PATCH] Add "git-update-ref" to update the HEAD (or other) ref
This is a careful version of the script stuff that currently just
blindly writes HEAD with a new value.
You can use
git-update-ref HEAD <newhead>
or
git-update-ref HEAD <newhead> <oldhead>
where the latter version verifies that the old value of HEAD matches
oldhead.
It basically 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".
NOTE! 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
(ie it will allow the filesystem to follow them, but will overwrite such a
symlink to somewhere else with a regular filename).
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).
Signed-off-by: Linus Torvalds <torvalds@osdl.org>
Signed-off-by: Junio C Hamano <junkio@cox.net>
Diffstat (limited to 'hash-object.c')
0 files changed, 0 insertions, 0 deletions