Irgendwann (ich glaube um die 1.6.x-Versionen herum) wurde git auf Änderungen in Submodulen aufmerksam. Das nervt mich nur:
$ git status vendor | grep geändert: # geändert: Hersteller / Schienen (geänderter Inhalt)
$ git diff vendor / diff --git a / vendor / Rails b / Vendor / Rails --- a / Verkäufer / Schienen +++ b / Anbieter / Schienen @@ -1 +1 @@ -Subprojekt Commit 046c900df27994d454b7f906caa0e4226bb42b6f + Subprojekt Commit 046c900df27994d454b7f906caa0e4226bb42b6f-schmutzig
Bitte lass es aufhören?
Bearbeiten:
Ok, also ich habe eine Antwort. Jetzt habe ich noch eine Frage:
Kann ich das einfügen ~/.gitconfig
? Von Anfang an scheint es, dass ich nicht kann, und ich habe nichts vielversprechendes gesehen, als ich den Patch überflogen habe. (Ich denke, ich kann immer noch einen Alias erstellen.)
Antworten:
Es besteht sogar die Möglichkeit, den Ignoriermodus für jedes hinzugefügte Submodul in der .gitmodules-Datei festzulegen.
Erst heute bin ich auf dieses Problem gestoßen und habe sofort einen Artikel in meinem Blog darüber geschrieben, nachdem ich eine Lösung gefunden hatte: Wie man Änderungen in Git-Submodulen ignoriert
Das Wesentliche davon:
Fügen Sie dieser
.gitmodules
Datei einfach eine Zeile hinzu :quelle
git status
wie erwartet funktionierte. Außerdem brauchst du mindestens 1.7.4 oder besser, glaube ich..gitignore
Datei gibt es eine private Version namensexclude
, die sich in.git/info/
befindet und nicht versioniert ist. Gibt es eine entsprechende Datei für die.gitmodules
Datei, mit der Sie Änderungen im Submodul nur in Ihrer Instanz des übergeordneten Repositorys unterdrücken können, ohne Änderungen daran vorzunehmen.gitmodules
?Es gibt zwei Arten von Änderungsbenachrichtigungen, die Sie unterdrücken können.
Das erste ist,
untracked content
was passiert, wenn Sie Änderungen an Ihrem Submodul vornehmen, diese aber noch nicht festgeschrieben haben. Das übergeordnete Repository bemerkt dies undgit status
meldet es entsprechend:modified: modules/media (untracked content)
Sie können diese unterdrücken mit:
Sobald Sie diese Änderungen festschreiben, nimmt das übergeordnete Repository dies erneut zur Kenntnis und meldet sie entsprechend:
Wenn Sie diese ebenfalls unterdrücken möchten, müssen Sie
all
Änderungen ignorierenquelle
.gitignore
Datei gibt es eine private Version namensexclude
, die sich in.git/info/
befindet und nicht versioniert ist. Gibt es eine entsprechende Datei für die.gitmodules
Datei, mit der Sie Änderungen im Submodul nur in Ihrer Instanz des übergeordneten Repositorys unterdrücken können, ohne Änderungen daran vorzunehmen.gitmodules
?ignore = all
Teil ist nützlich.Update: Siehe (und positiv) die Antwort von nilshaldenwang bezüglich der Möglichkeit, der Datei einen Konfigurationsparameter hinzuzufügen, um den fehlerhaften Zustand eines bestimmten Submoduls zu ignorieren.
.gitmodules
Also ist Git 1.7.2 raus und beinhaltet die
--ignore-submodules
Option fürstatus
.Von
git help status
:Der Wert, den ich will, ist
dirty
.Ich benutze einen Alias, weil ich faul bin:
quelle
ignore=dirty
, einzelne Einträge in der.gitmodules
Datei hinzuzufügen .Wie Sie bereits erwähnt haben, ist das Patch- Git-Submodul: Ignorieren Sie schmutzige Submodule, um eine Zusammenfassung und einen Status zu erhalten.
Ebenfalls angekündigt in der Version Git 1.7.2-rc2 :
Bedeutung:
Dies als Option zu betrachten, ist derzeit nicht genau der gewählte Ansatz :
"
git diff
" und "git status
" verwenden diesen Konfigurationswert für jedes Submodul.Die Verwendung von "
--ignore-submodule
" überschreibt diesen Standard (und der neue Parameter "none" wird dort hinzugefügt, um die Konfigurationseinstellungen überschreiben zu können).Ein anderer Ansatz, um den Git-Status (oder einen beliebigen Git-Befehl) zum Ignorieren eines bestimmten Submoduls festzulegen, ist mit Git 2.13 (Q2 2017) verfügbar:
Weitere Informationen finden Sie unter " Neue Commits für Git-Submodul ignorieren ".
quelle
ignore = dirty
"Sie können auch verwenden
submodule.ignore = dirty
in Ihrer.git/config
Datei einstellen .--global
setzt das Ignorier-Flag in Ihrem~/.gitconfig
und gilt für alle Ihre Repositorys. Ohne sie sollte es.git/config
nur für das Repo eingesetzt werden, in dem Sie sich gerade befinden.Die einzige Dokumentation, die ich dazu finden kann, ist
submodule.<name>.ignore
in den git-config-Dokumenten . Ich habe es aus einer .gitmodules-Datei in meine ~ / .gitconfig verschoben und es funktioniert immer noch für mich.quelle
Sie müssen hinzufügen
zu .gitmodules
quelle
Git v1.7.2-rc2 hat also was ich will:
Erstellen Sie Ihr eigenes Git-Howto:
quelle
git clone git://git.kernel.org/pub/scm/git/git.git git
.Ich habe diese Frage hier ausführlicher beantwortet .
Renn einfach
um eine lokale Konfigurationsoption hinzuzufügen, um diese Änderungen zu ignorieren.
quelle
Möglicherweise möchten Sie nicht hinzufügen
ignore = dirty
zu.gitmodules
können Sie selektiver über die Veränderungen sein wollen Sie ignorieren wollte.Fügen Sie dazu Muster hinzu
.git/submodule_foo/bar/info/exclude
, wosubmodule_foo/bar/
sich der Pfad des Submoduls befindet.Die Muster ähneln den Mustern, die Sie hinzufügen würden
.gitignore
, wobei das Stammverzeichnis das Submodulverzeichnis ist. Dieses Muster ignoriert beispielsweise dasbuild
Verzeichnis im Submodulsubmodule_foo/bar/
:quelle