Subject: Re: [PATCH 0/5] "best effort" checkout

From: Mark Levedahl <[email-masked]>
Date: Thu, 29 May 2008 19:24:34 -0400

Junio C Hamano wrote:
> 	
> [PATCH 1/5] "git checkout -- paths..." should error out when paths cannot be written
> [PATCH 2/5] checkout: make reset_clean_to_new() not die by itself
> [PATCH 3/5] checkout: consolidate reset_{to_new,clean_to_new|()
> [PATCH 4/5] unpack_trees(): allow callers to differentiate worktree errors from merge errors
> [PATCH 5/5] checkout: "best effort" checkout
> [PATCH 6/5] NUL hack to create_file()

This works! I've added these patches (pulled from pu) to my tree and rebuilt. 
The current results on Cygwin...

git>git checkout -f b71ce7f3f13ebd0e
Previous HEAD position was 952538f... checkout: "best effort" checkout
error: git-checkout-index: unable to create file t/t5100/nul (File exists)
HEAD is now at b71ce7f... Merge 1.5.5.3 in
git>git status
# Not currently on any branch.
# Changed but not updated:
#   (use "git add <file>..." to update what will be committed)
#
#   modified:   t/t5100/nul
#
no changes added to commit (use "git add" and/or "git commit -a")
git>git mv  t/t5100/nul t/t5100/nul-plain
fatal: renaming t/t5100/nul failed: Invalid argument
git>git rm -f  --cached t/t5100/nul
rm 't/t5100/nul'
git>git show HEAD:t/t5100/nul
 From nobody Mon Sep 17 00:00:00 2001

---
diff --git a/foo b/foo
^Some strange test^^
^@

So, for posterity, git-mv cannot rename the offending file in the index, but the 
file can be removed, and its contents piped into a file of non-offending name, 
so a reasonable solution for this case exists.

Many thanks to all, especially to Junio for actually creating the fix.

Mark