„git commit -a“ dazu bringen, Untermodule zu ignorieren?

„git commit -a“ dazu bringen, Untermodule zu ignorieren?

Das Verhalten von git commit -ascheint 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 -aUntermodule so einzustellen, dass sie ignoriert werden? Ich habe nachgeschaut git help configund nichts gesehen.

Eine (weniger gute) Alternative wäre, git statusauf einen Blick deutlicher zu machen, ob git commit -aein 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>.ignoreKonfigurationsoption 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 -aich 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.

verwandte Informationen