• L
    [PATCH] Add "git-update-ref" to update the HEAD (or other) ref · 66bf85a4
    Linus Torvalds 提交于
    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: NLinus Torvalds <torvalds@osdl.org>
    Signed-off-by: NJunio C Hamano <junkio@cox.net>
    66bf85a4
update-ref.c 2.4 KB