Git: puis-je supprimer la liste des entrées 'modified content'/dirty submodule dans status, diff, etc.?
quelque part (autour de la 1.6.x libère, je pense) git est devenu conscient des changements à l'intérieur des sous-modules. Cela ne sert qu'à m'ennuyer:
$ 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
faites que ça s'arrête.
Edit:
Ok, donc j'ai une réponse. Maintenant j'ai une autre question:
puis-je mettre ça dans ~/.gitconfig
? De mon point de départ, il semble que je ne puisse pas, et je n'ai rien vu de prometteur en parcourant le patch. (Je suppose que je peux toujours faire un alias.)
9 réponses
il y a même une possibilité de définir le mode Ignorer pour chaque sous-module ajouté dans le .fichier gitmodules.
juste aujourd'hui, j'ai rencontré ce problème et immédiatement écrit un article dans mon blog à ce sujet après avoir trouvé une solution: comment ignorer les changements dans les sous-modules git
L'essentiel, c':
une fois que vous avez ajouté un sous-module il y aura un fichier nommé
.gitmodules
dans la racine de votre dépôt
il suffit d'ajouter une ligne à ce .gitmodules
fichier:
[submodule "bundle/fugitive"]
path = bundle/fugitive
url = git://github.com/tpope/vim-fugitive.git
ignore = dirty
mise à Jour: Voir (et upvote) nilshaldenwang 's réponse quant à la possibilité d'ajouter à la .gitmodules
fichier de configuration de paramètre pour ignorer sale état d'un sous module.
ignore = dirty
Donc git 1.7.2 et comprend le --ignore-submodules
option status
.
de 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).
la valeur que Je veux dirty
.
git status --ignore-submodules=dirty
j'utilise un alias parce que je suis paresseux:
alias gst='git status --ignore-submodules=dirty'
il y a deux types d'avis de changement que vous pouvez supprimer.
le premier est untracked content
qui se produit lorsque vous apportez des modifications à votre sous-module, mais que vous n'avez pas encore apportées. Le référentiel parent les remarque et git status
les rapporte en conséquence:
modified: modules/media (untracked content)
vous pouvez les supprimer avec:
[submodule "modules/media"]
path = modules/media
url = git@github.com:user/media.git
ignore = dirty
cependant, une fois que vous propagez ces modifications, le dépôt parent encore une fois, prenez-en connaissance et signalez-les en conséquence:
modified: modules/media (new commits)
si vous voulez supprimer ceux-ci aussi, vous devez ignorer all
changements
[submodule "modules/media"]
path = modules/media
url = git@github.com:user/media.git
ignore = all
vous pouvez également utiliser
% git config [--global] submodule.ignore dirty
pour définir submodule.ignore = dirty
dans votre fichier .git/config
. --global
affichera l'indicateur ignore dans votre ~/.gitconfig
et s'appliquera à tous vos dépôts. Sans lui, il devrait être défini dans .git/config
pour juste la pension dans laquelle vous êtes actuellement.
la seule documentation que je peux trouver sur ce est submodule.<name>.ignore
au git-config docs . Je l'ai déplacé à partir d'un .gitmodules fichier dans mon ~/.gitconfig et il travaille toujours pour moi.
Comme vous le mentionnez, le patch git sous-module: ignorer sale submodules pour le résumé et le statut de est en train de se faire.
également annoncé dans le Git 1.7.2-rc2 release:
Git v1.7.2 Release Notes (draft)
================================
Updates since v1.7.1
--------------------
"
git status
"appris"--ignore-submodules
" option.
qui signifie:
git config --global diff.ignoreSubmodules dirty
concernant cette option n'est pas exactement la approche choisie pour l'instant :
après cette série , j'ai l'intention d'ajouter une option de configuration"
ignore
"à.gitmodules
, qui peut être définie pour chaque sous-module à" tout"," sale"," non suivi " ou "Aucun" (la valeur par défaut).
" git diff
" et " git status
" utilisera la valeur de configuration pour chaque sous-module.
Utiliser " --ignore-submodule
" l'emporte sur cette valeur par défaut (et le nouveau paramètre "none" y sera ajouté pour pouvoir outrepasser les paramètres de configuration).
et pour éviter d'avoir à faire "
git submdule sync
"chaque fois que cette option Change, je voudrais d'abord la rechercher dans.git/config
.
S'il n'y est pas trouvé, il sera tiré de.gitmodules
, s'il est présent.donc les utilisateurs peuvent outrepasser le paramètre mais s'ils ne le font pas, en amont peut le changer facilement (par exemple quand un sous-modules
.gitignore
a été mis à jour de sorte que "ignore=untracked
" n'est plus nécessaire il peut être supprimé).
De même, la commutation de branches aura un effet instantané si l'entréeignore
" dans.gitmodules
est différente d'une branche à l'autre.
une autre approche pour faire le statut git (ou n'importe quelle commande git) pour ignorer un sous-module particulier est disponible avec Git 2.13 (T2 2017):
git config submodule.<name>.active false
voir plus à " ignorer les nouvelles propagations pour git sous-module ".
Donc git v1.7.2-rc2 a ce que je veux:
$ git diff --ignore-submodules=dirty vendor # no output
$ git status --ignore-submodules=dirty vendor # On branch … nothing to commit (working directory clean)
construire son propre 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
vous pouvez ne pas vouloir ajouter ignore = dirty
à .gitmodules
, vous pouvez vouloir être plus sélectif au sujet des changements que vous vouliez ignorer.
pour ce faire, ajouter des motifs à .git/submodule_foo/bar/info/exclude
, où submodule_foo/bar/
est le chemin du sous-module.
les motifs sont similaires aux motifs que vous ajouteriez à .gitignore
, la racine étant le répertoire submodule. Par exemple, ce motif ignore le répertoire build
dans le sous-module submodule_foo/bar/
:
# in .git/submodule_foo/bar/info/exclude:
/build/