If git merge --no-commit is used to merge a commit adding a file with an unusual mode -- specifically a symlink which has "mode" 120000, it fails to stage the right mode into the index. This only happens when core.symlinks=false. I noticed it on FAT, but have managed to reproduce it on ext4. Here's an example of the bug: joey@darkstar:~>git clone r1 r2 Cloning into 'r2'... done. joey@darkstar:~>cd r1 joey@darkstar:~/r1>ls -l total 0 lrwxrwxrwx 1 joey joey 11 Jun 12 21:23 foo -> /etc/passwd joey@darkstar:~/r1>git mv foo bar joey@darkstar:~/r1>git commit -m moved [master 516a53c] moved 1 file changed, 0 insertions(+), 0 deletions(-) rename foo => bar (100%) joey@darkstar:~/r1>cd .. joey@darkstar:~>cd r2 joey@darkstar:~/r2>git config core.symlinks false joey@darkstar:~/r2>git fetch origin remote: Counting objects: 2, done. remote: Total 2 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (2/2), done. From /home/joey/r1 7ab8102..516a53c master -> origin/master joey@darkstar:~/r2>git merge origin/master --no-commit --no-ff Automatic merge went well; stopped before committing as requested joey@darkstar:~/r2>git diff --cached diff --git a/bar b/bar new file mode 100644 index 0000000..3594e94 --- /dev/null +++ b/bar @@ -0,0 +1 @@ +/etc/passwd \ No newline at end of file diff --git a/foo b/foo deleted file mode 120000 index 3594e94..0000000 --- a/foo +++ /dev/null @@ -1 +0,0 @@ -/etc/passwd \ No newline at end of file joey@darkstar:~/r2>git commit -m oops [master 63bd960] oops joey@darkstar:~/r2>git show commit 63bd9608c96a91582b27c5853ff58053bab6c71c Merge: 7ab8102 516a53c Author: Joey Hess <joey@xxxxxxxxxxx> Date: Thu Jun 12 21:37:35 2014 -0400 oops diff --cc bar index 0000000,3594e94..3594e94 mode 000000,120000..100644 --- a/bar +++ b/bar joey@darkstar:~/r2>git version git version 2.0.0 -- see shy jo
Attachment:
signature.asc
Description: Digital signature