I'm seeing what might be a bug that was introduced in git 1.7.12 (also observed in 1.8.1.2). If not a bug, it's a changed behavior from previous versions that I don't understand.
Here's the scenario: * I have a remote repo containing a pointer to a submodule. * Developer A and Developer B clone this repo, and both make a commit to first the submodule, and then the parent repo, changing some files and also the submodule pointer at the same time. * Developer A pushes his changes to both the submodule and the parent module to the shared remote * Developer B either does a "git pull --rebase" or a "git fetch && git rebase origin/master" Results: When applying Developer B's changes on top of origin/master, the following messages are observed: "fatal: sha1 information is lacking or useless (sub). Repository lacks necessary blobs to fall back on 3-way merge. Cannot fall back to three-way merge." Furthermore, an immediate "git status" reports "all conflicts fixed", does not report the submodule pointer as unmerged, and the changes to the other files in the parent module made by Developer B are not applied. Expected Results: Similar to how 1.7.12.1 behaves. No mention of sha1 information or blobs being lacking. "git status" should report the submodule pointer and any other changed files as being unmerged. Conflicting changes should not be lost. I'm witnessing this behavior on OS X 10.8.2 with git versions 1.7.12, 1.7.12.1, and 1.8.1.2, installed via homebrew. I do not see this behavior in 1.7.11.5 or any of the 8 previous versions I've tried back to 1.7.4.1. Workaround: Using an interactive rebase ("git fetch && git rebase -i origin/master") with no changes made to the commit list seems to sidestep this behavior. Thanks in advance for any help with this. Reproduce script: Execute the following, then "cd local-b; git pull --rebase" #!/bin/sh set -e -v BASEDIR=`pwd` # Make bare remote repos mkdir remotes pushd remotes git init --bare super.git git init --bare sub.git popd # Initialize the submodule repo git clone --no-hardlinks remotes/sub.git sub pushd sub echo subfile > subfile git add subfile git commit -m initial-submodule git push origin master popd rm -Rf sub # Clone into local-a and initialize supermodule repo git clone --no-hardlinks remotes/super.git local-a pushd local-a git submodule add $BASEDIR/remotes/sub.git sub echo file > file git add sub file git commit -m initial git push origin master popd # Clone into local-b git clone --no-hardlinks remotes/super.git local-b pushd local-b git submodule init && git submodule update popd # Make a change to supermodule file and submodule pointer from local-a and push to remote pushd local-a cd sub echo subfile changed from local-a > subfile git add subfile git commit -m subfile-changed-from-local-a git push cd .. echo file changed from local-a > file git add sub file git commit -m change-from-local-a git push popd # Make a conflicting change to both supermodule file and submodule pointer from local-b pushd local-b cd sub echo subfile changed from local-b > subfile git add subfile git commit -m subfile-changed-from-local-b cd .. echo file changed from local-b > file git add sub file git commit -m change-from-local-b popd -- To unsubscribe from this list: send the line "unsubscribe git" in the body of a message to majord...@vger.kernel.org More majordomo info at http://vger.kernel.org/majordomo-info.html