Skip to content
  • Jeff King's avatar
    write_index: optionally allow broken null sha1s · 83bd7437
    Jeff King authored and Junio C Hamano's avatar Junio C Hamano committed
    Commit 4337b585 (do not write null sha1s to on-disk index,
    2012-07-28) added a safety check preventing git from writing
    null sha1s into the index. The intent was to catch errors in
    other parts of the code that might let such an entry slip
    into the index (or worse, a tree).
    
    Some existing repositories may have invalid trees that
    contain null sha1s already, though.  Until 4337b585
    
    , a common
    way to clean this up would be to use git-filter-branch's
    index-filter to repair such broken entries.  That now fails
    when filter-branch tries to write out the index.
    
    Introduce a GIT_ALLOW_NULL_SHA1 environment variable to
    relax this check and make it easier to recover from such a
    history.
    
    It is tempting to not involve filter-branch in this commit
    at all, and instead require the user to manually invoke
    
    	GIT_ALLOW_NULL_SHA1=1 git filter-branch ...
    
    to perform an index-filter on a history with trees with null
    sha1s.  That would be slightly safer, but requires some
    specialized knowledge from the user.  So let's set the
    GIT_ALLOW_NULL_SHA1 variable automatically when checking out
    the to-be-filtered trees.  Advice on using filter-branch to
    remove such entries already exists on places like
    stackoverflow, and this patch makes it Just Work again on
    recent versions of git.
    
    Further commands that touch the index will still notice and
    fail, unless they actually remove the broken entries.  A
    filter-branch whose filters do not touch the index at all
    will not error out (since we complain of the null sha1 only
    on writing, not when making a tree out of the index), but
    this is acceptable, as we still print a loud warning, so the
    problem is unlikely to go unnoticed.
    
    Signed-off-by: default avatarJeff King <peff@peff.net>
    Reviewed-by: default avatarJonathan Nieder <jrnieder@gmail.com>
    Signed-off-by: default avatarJunio C Hamano <gitster@pobox.com>
    83bd7437