diff --git a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java index 2412e2c6c..d794c797b 100644 --- a/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java +++ b/org.eclipse.jgit/src/org/eclipse/jgit/api/CommitCommand.java @@ -66,6 +66,7 @@ import org.eclipse.jgit.dircache.DirCacheIterator; import org.eclipse.jgit.errors.UnmergedPathException; import org.eclipse.jgit.lib.CommitBuilder; import org.eclipse.jgit.lib.Constants; +import org.eclipse.jgit.lib.FileMode; import org.eclipse.jgit.lib.ObjectId; import org.eclipse.jgit.lib.ObjectInserter; import org.eclipse.jgit.lib.PersonIdent; @@ -341,17 +342,24 @@ public class CommitCommand extends GitCommand { if (objectExists) { dcEntry.setObjectId(fTree.getEntryObjectId()); } else { - // insert object - if (inserter == null) - inserter = repo.newObjectInserter(); - - InputStream inputStream = fTree.openEntryStream(); - try { - dcEntry.setObjectId(inserter.insert( - Constants.OBJ_BLOB, entryLength, - inputStream)); - } finally { - inputStream.close(); + if (FileMode.GITLINK.equals(dcEntry.getFileMode())) { + // Do not check the content of submodule entries + // Use the old entry information instead. + dcEntry.copyMetaData(index.getEntry(dcEntry + .getPathString())); + } else { + // insert object + if (inserter == null) + inserter = repo.newObjectInserter(); + + InputStream inputStream = fTree.openEntryStream(); + try { + dcEntry.setObjectId(inserter.insert( + Constants.OBJ_BLOB, entryLength, + inputStream)); + } finally { + inputStream.close(); + } } }