Das Verhalten von git commit -a
scheint darin zu bestehen, Änderungen an Untermodulen einzuschließen, wenn diese neue Commits enthalten. Das ist nicht das, was ich normalerweise will, und manchmal stelle ich fest, dass ich versehentlich ein Commit mit Untermoduländerungen pushe, die ich nicht einschließen wollte.
Gibt es eine Möglichkeit, git commit -a
Untermodule so einzustellen, dass sie ignoriert werden? Ich habe nachgeschaut git help config
und nichts gesehen.
Eine (weniger gute) Alternative wäre, git status
auf einen Blick deutlicher zu machen, ob git commit -a
ein Untermodul enthalten ist. Derzeit wird entweder
modified: submodule (modified content)
oder
modified: submodule (new commits)
und diese sind ärgerlich ähnlich. Es sieht so aus, als ob die submodule.<name>.ignore
Konfigurationsoption so etwas wie das tun kann, was ich will. Aber idealerweise würde ich trotzdem gerne Änderungen an Untermodulen sehen, nur nicht an derselben Stelle wie alle meine anderen Änderungen, es sei denn, git commit -a
ich füge sie hinzu.
Antwort1
Sie können das Submodule.ignore in der Git-Konfiguration oder in der Datei .gitmodules festlegen.
HINWEIS: GIT ist diesbezüglich ziemlich dumm. Wenn Sie ignore = all festlegen, um ein vernünftiges Verhalten mit git commit -a zu erzielen, wird es AUCH das Untermodul in git show/diff ignorieren, wenn Sie es EXPLIZIT hinzufügen. Die einzige Möglichkeit, Letzteres zu umgehen, ist die Verwendung der Befehlszeilenoption --ignore-submodule=none.
HINWEIS 2: Die Konfiguration „diff.ignoreSubmodules“ soll die Standardbefehlszeilenoption „--ignore-submodule“ festlegen können, funktioniert aber schon seit Jahren nicht mehr und bewirkt nichts, da .gitmodules den Wettbewerb gewinnt. Daher führen nur explizite Befehlszeilenoptionen zu einem vernünftigen Verhalten.
Antwort2
Wenn Sie nicht viele Untermodule haben, ist es meiner Meinung nach am bequemsten, zuerst alle zu committen und dann auszuführen
git reset HEAD^1 Untermodulpfad
Sie können sich diese Befehlssyntax jederzeit merken, indem Sie git commit --amend ohne Änderungen ausführen. Sie wird oben in den kommentierten Anweisungen angezeigt.