stash - git tag




Git: kann ich die Auflistung von 'modifiziertem Inhalt'/schmutzigen Untermoduleinträgen in Status, Diff usw. unterdrücken? (6)

Also git v1.7.2-rc2 hat was ich will:

$ git diff --ignore-submodules=dirty vendor
# no output
$ git status --ignore-submodules=dirty vendor
# On branch …
nothing to commit (working directory clean)

Erstellen Sie Ihr eigenes Git Howto:

# get git
git clone git://git.kernel.org/pub/scm/git/git.git git
cd git
git checkout v1.7.2-rc2

# make git. beware of setting prefix
make configure
./configure --prefix=/usr/local
make
sudo make install

# you REALLY don't want to `make doc`, use this instead
sudo make quick-install-man
sudo make quick-install-html

Irgendwann (ungefähr bei den 1.6.x Releases, glaube ich) wurde git auf Änderungen in Submodulen aufmerksam. Das nervt mich nur:

$ git status vendor | grep modified:
#       modified:   vendor/rails (modified content)
$ git diff vendor/
diff --git a/vendor/rails b/vendor/rails
--- a/vendor/rails
+++ b/vendor/rails
@@ -1 +1 @@
-Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f
+Subproject commit 046c900df27994d454b7f906caa0e4226bb42b6f-dirty

Bitte lass es aufhören?

Bearbeiten:

Ok, ich habe eine Antwort. Jetzt habe ich eine andere Frage:

Kann ich das in ~/.gitconfig ? Von meinem ersten Moment an scheint es so zu sein, dass ich es nicht kann, und ich habe nichts gesehen, was vielversprechend ist, indem ich den Patch abgeschöpft habe. (Ich denke, ich kann immer noch einen Alias ​​erstellen.)


Es gibt sogar die Möglichkeit, den Ignoriermodus für jedes hinzugefügte Submodul in der .gitmodules-Datei festzulegen.

Gerade 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 habe: Wie man Änderungen an Git-Submodulen ignoriert

Der Kern davon:

Sobald Sie ein Submodul hinzugefügt haben, befindet sich eine Datei mit dem Namen .gitmodules im Stammverzeichnis Ihres Repositorys

.gitmodules einfach eine Zeile zu dieser .gitmodules Datei hinzu:

[submodule "bundle/fugitive"]
    path = bundle/fugitive
    url = git://github.com/tpope/vim-fugitive.git
    ignore = dirty

Sie können auch verwenden

% git config [--global] core.ignore dirty

Setzen Sie ignore = dirty in Ihrer .git / config-Datei. --global setzt das Ignorier-Flag in Ihrer ~ / .gitconfig und wendet es auf alle Ihre Repositories an. Ohne es sollte es in .git / config nur für das Repo setzen, in dem du dich gerade befindest.

Die einzige Dokumentation, die ich hier finden kann, ist das submodule.<name>.ignore in der git-config docs . Ich habe es aus einer .gitmodules Datei in meine ~ / .gitconfig verschoben und es funktioniert immer noch für mich.


Sie möchten möglicherweise keine .gitmodules ignore = dirty für .gitmodules . Sie möchten vielleicht selektiver bei den Änderungen sein, die Sie ignorieren möchten.

.git/submodule_foo/bar/info/exclude Sie dazu Muster zu .git/submodule_foo/bar/info/exclude , wobei submodule_foo/bar/ der Pfad des Submoduls ist.

Die Muster ähneln den Mustern, die Sie zu .gitignore hinzufügen .gitignore , wobei das root das Submodul-Verzeichnis ist. Dieses Muster ignoriert beispielsweise das build Verzeichnis im Submodul submodule_foo/bar/ :

# in .git/submodule_foo/bar/info/exclude:
/build/

Update: Siehe (und upvote) answer bezüglich der Möglichkeit, der Datei .gitmodules einen Config-Parameter hinzuzufügen, um den schmutzigen Zustand eines gegebenen Submoduls zu ignorieren.

ignore = dirty

So git 1.7.2 ist out und enthält die Option --ignore-submodules für den status .

Von git help status :

--ignore-submodules[=<when>]
    Ignore changes to submodules when looking for changes.
    <when> can be either "untracked", "dirty" or "all", which
    is the default. When "untracked" is used submodules are
    not considered dirty when they only contain untracked
    content (but they are still scanned for modified content).
    Using "dirty" ignores all changes to the work tree of
    submodules, only changes to the commits stored in the
    superproject are shown (this was the behavior before
    1.7.0). Using "all" hides all changes to submodules (and
    suppresses the output of submodule summaries when the
    config option status.submodulesummary is set).

Der Wert, den ich möchte, ist dirty .

git status --ignore-submodules=dirty

Ich benutze einen Alias, weil ich faul bin:

alias gst='git status --ignore-submodules=dirty'

Wie Sie erwähnen, das Patch- Git-Submodul: ignorieren Sie schmutzige Submodule für die Zusammenfassung und Statu ist in der Herstellung.

Auch angekündigt in der Git 1.7.2-rc2 Version:

Git v1.7.2 Release Notes (draft)
================================

Updates since v1.7.1
--------------------

" git status " gelernt " --ignore-submodules " Option.

Wenn Sie also keine aktuelle Version kompilieren, haben Sie diese Option in den aktuellen stabilen Versionen noch nicht.

Dies als eine Option zu betrachten, ist nicht genau der Ansatz, der für jetzt gewählt wird :

Nach dieser Serie plane ich eine Konfigurationsoption ' ignore ' zu .gitmodules , die für jedes Submodul entweder auf "all", "dirty", "untracked" oder "none" (die Standardeinstellung) gesetzt werden kann.

" 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 außer Kraft zu setzen).

Und damit git submdule sync jedes Mal, wenn sich diese Option ändert, " git submdule sync " machen muss, möchte ich in .git/config zuerst danach suchen.
Wenn es dort nicht gefunden wird, wird es aus .gitmodules , falls vorhanden, übernommen.

So können Benutzer die Einstellung überschreiben, aber wenn sie dies nicht tun, kann Upstream sie leicht ändern (z. B. wenn ein Submodul .gitignore aktualisiert wurde, so dass " ignore=untracked " nicht mehr notwendig ist, kann es entfernt werden).
Das Wechseln von Zweigen wirkt sich auch sofort aus, wenn der Eintrag ' ignore ' in .gitmodules in den .gitmodules unterschiedlich ist.

Ein anderer Ansatz, um den git-Status (oder irgendeinen git-Befehl) zu veranlassen, ein bestimmtes Submodul zu ignorieren, ist mit Git 2.13 (Q2 2017) verfügbar:

git config submodule.<name>.active false

Weitere Informationen finden Sie unter " Neue Commits für Git Submodul ignorieren ".





git-config