git/list[1] front-page[2] threads[3] people[4] search[5] about
 

bug: git merge --no-commit loses track of file modes in the index

From
Joey Hess <joey@kitenet.net>
Date
Jun 13, 2014, 01:38 UTC
Message-ID
<20140613013858.GA28485@kitenet.net>

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@kitenet.net>
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
Next: Stefan Haller
Message 1 of 3 in “bug: git merge --no-commit loses track of file modes in the index”
  1. Joey HessJun 13, 2014
  2. Stefan HallerJun 13, 2014
  3. Johannes SixtJun 13, 2014

Read the whole thread, see it on lore, or plain text.

$ cat FOOTERMessages come from the public archive at lore.kernel.org/git, fetched every hour. The front page is chosen and written each morning by an AI editor and can be wrong; the threads themselves are the record. About and API. For agents: an MCP server at https://gitlist.dev/mcp, and any thread, story or person page as Markdown by adding .md to its URL (or sending Accept: text/markdown). Details in /llms.txt.