Nein, Sie müssen Ihr Submodul nicht zu Ihrem hinzufügen .gitignore
: Was die Eltern von Ihrem Submodul sehen, ist ein Gitlink (ein spezieller Eintragmode 160000
).
Das heißt: Auf jede Änderung, die direkt in einem Submodul vorgenommen wird, muss ein Commit im übergeordneten Verzeichnis folgen.
Auf diese Weise zeichnet das übergeordnete Verzeichnis das richtige Commit für den Status des Submoduls auf: Dieses Commit ist der oben erwähnte "Gitlink";
Weitere Informationen zu dieser Richtlinie finden Sie unter " Aktualisierung des Git-Submoduls (wahre Natur der Submodule) ".
Die Hauptidee hinter Submodulen ist ein komponentenbasierter Ansatz , bei dem Sie bei bestimmten Commits auf andere Repos verweisen. Wenn Sie jedoch Änderungen an diesen Submodulen vornehmen, müssen Sie diese Referenzen auch im übergeordneten Repo aktualisieren.
Beachten Sie, dass Sie mit Git 2.13 (Q2 2017) das Submodul ignorieren können, obwohl Sie den Gitlink nicht ignorieren:
git config submodule.<name>.active false
Weitere Informationen finden Sie unter " Neue Commits für Git-Submodul ignorieren ".
Hinweis: Mit Git 2.15.x / 2.16 (Q1 2018) ist das Ignorieren eines Submoduls genauer.
" git status --ignored --untracked
" hat nicht an einem Arbeitsbaum eines separaten Projekts angehalten, das in ein ignoriertes Verzeichnis eingebettet ist und Dateien in diesem anderen Projekt aufgelistet hat, anstatt nur das Verzeichnis selbst als ignoriert anzuzeigen.
Siehe Commit fadb482 (25. Oktober 2017) von Johannes Schindelin ( dscho
) .
(Zusammengeführt von Junio C Hamano - gitster
- in Commit da7996a , 06. November 2017)
status
: Lassen Sie sich nicht von Submodulen in ausgeschlossenen Verzeichnissen verwirren
Wir übergeben das exclude
Flag akribisch an die treat_directory()
Funktion, damit wir angeben können, dass darin enthaltene Dateien beim Rekursieren eher ausgeschlossen als nicht verfolgt werden.
Aber wir haben Submodule noch nicht gleich behandelt.
Aus diesem Grund würde git status --ignored --untracked
mit einem Submodul
submodule
in einem Gitignored tracked/
das Submodul im Untracked files
Abschnitt " " angezeigt , z
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
tracked/submodule/
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/initial.t
Stattdessen möchten wir, dass das Submodul im Ignored files
Abschnitt " " angezeigt wird:
On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/
.gitmodules
Datei zu ignorieren . Es ist wahr, dass diese eine Datei (die.gitmodules
) Anmeldeinformationen enthalten kann, aber wenn sie nur zum Klonen öffentlicher Repos verwendet werden, müssen sie diese nicht enthalten. Außerdem können sie auch unter Windows mit Hilfe von Anmeldeinformationen wie dem "Git Credential Manager für Windows" ( github.com/Microsoft/Git-Credential-Manager-for-Windows/… ) zwischengespeichert werden. Anmeldeinformationen in der.gitmodules
ist also kein Todesfall.Aus irgendeinem Grund hat submodule.module-name.active bei mir nicht funktioniert.
Deshalb habe ich submodule.module-name.ignore verwendet
https://git-scm.com/docs/gitmodules - hier finden Sie eine Beschreibung möglicher Parameterwerte
Funktioniert für mich für (neue Commits) und (geänderte Inhalte) Nachrichten.
quelle
Um die akzeptierte Antwort zu ergänzen, habe ich festgestellt, dass das Hinzufügen des Git-Submodul-Ordners zu .gitignore tatsächlich Probleme verursacht - insbesondere beim Versuch, einen neuen Klon des Projekts zu erstellen. Insbesondere führte das Ausführen der normalen Submodul-Klonbefehle dazu, dass der Submodul-Ordner leer war:
Nur durch den Versuch, erneut zu starten
Es war klar, was das Problem war, basierend auf der Ausgabe:
Anstatt hinzuzufügen
-f
, habe ich den Git-Submodul-Ordner aus .gitignore entfernt und die Submodul-Klonbefehle erneut ausgeführt, wodurch der Ordner nun erfolgreich erstellt wurde. Ich denke, dass es einen Fehler geben kann, dass einer der Submodul-Klonbefehle .gitignore respektiert, aber nicht warnt, dass er ein Submodul entsprechend überspringt.quelle