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

"sha1 information is lacking or useless" when rebasing with a submodule pointer conflict

From
MSMichael Sims <michael.h.sims@gmail.com>
Date
Jan 30, 2013, 18:43 UTC
Message-ID
<CAFyOhY8YAO4zx6jKQxrEW=-Vbo-TTjU6wJ7UgNVEjA7B2dasng@mail.gmail.com>

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

Next: Heiko Voigt
Message 1 of 11 in “"sha1 information is lacking or useless" when rebasing with a submodule pointer conflict”
  1. Michael SimsJan 30, 2013
  2. Heiko VoigtJan 30, 2013
  3. Heiko VoigtJan 30, 2013
  4. Junio C HamanoJan 30, 2013
  5. Junio C HamanoFeb 1, 2013
  6. 0/3 rebasing changes that update submodulesJunio C Hamano, Feb 1, 2013
  7. 1/3 git-am: record full index line in the patch used while rebasingJunio C Hamano, Feb 1, 2013
  8. Martin von ZweigbergkFeb 1, 2013
  9. 2/3 apply: simplify build_fake_ancestor()Junio C Hamano, Feb 1, 2013
  10. 3/3 apply: diagnose incomplete submodule object name betterJunio C Hamano, Feb 1, 2013
  11. Re* [PATCH 3/3] apply: diagnose incomplete submodule object name betterJunio C Hamano, Feb 5, 2013

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.