web-dev-qa-db-fra.com

Git: puis-je supprimer la liste des entrées de «contenu modifié» / sous-module sale dans status, diff, etc.?

Quelque part (autour des versions 1.6.x, je pense), git a pris conscience des changements à l'intérieur des sous-modules. Cela ne fait que m'énerver:

 $ git status vendeur | grep modifié: 
 # modifié: fournisseur/Rails (contenu modifié) 
 $ git diff vendor /
 diff --git a/vendor/Rails b/vendor/Rails 
 --- a/vendor/Rails 
 +++ b/fournisseur/Rails 
 @@ -1 +1 @@ 
 - Validation du sous-projet 046c900df27994d454b7f906caa0e4226bb42b6f 
 + Validation du sous-projet 046c900df27994d454b7f906caa0e4226bb42b6.

Veuillez l'arrêter?

Modifier:

D'accord, j'ai donc une réponse. Maintenant, j'ai une autre question:

Puis-je mettre cela dans ~/.gitconfig? De mon initiale, il semble que je ne peux pas, et je n'ai rien vu de prometteur en écrémant le patch. (Je suppose que je peux toujours créer un alias.)

117
kch

Mise à jour: Voir (et vote positif) nilshaldenwang 's réponse concernant la possibilité d'ajouter au .gitmodules fichier un paramètre de configuration pour ignorer l'état sale d'un sous-module donné.

ignore = dirty

Donc git 1.7.2 est sorti et inclut le --ignore-submodules option pour status.

De git help status:

 - ignore-submodules [= <when>] 
 Ignore les modifications apportées aux sous-modules lors de la recherche de modifications. 
 <when> peut être "non suivi", "sale" ou " all ", qui 
 est la valeur par défaut. Lorsque "non suivi" est utilisé, les sous-modules ne sont pas 
 Non considérés comme sales lorsqu'ils contiennent uniquement du contenu 
 Non suivi (mais ils sont toujours analysés pour le contenu modifié). 
 L'utilisation de "sale" ignore toutes les modifications dans l'arborescence de travail des sous-modules 
, seules les modifications apportées aux validations stockées dans le superprojet 
 sont affichées (c'était le comportement avant 
 1.7.0). L'utilisation de "tous" masque toutes les modifications apportées aux sous-modules (et 
 Supprime la sortie des résumés des sous-modules lorsque l'option de configuration 
 Status.submodulesummary est définie). 

La valeur que je veux est dirty.

git status --ignore-submodules=dirty

J'utilise un alias parce que je suis paresseux:

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

Il est même possible de définir le mode ignorer pour chaque sous-module ajouté dans le fichier .gitmodules.

Aujourd'hui, j'ai rencontré ce problème et j'ai immédiatement écrit un article sur mon blog à ce sujet après avoir trouvé une solution: Comment ignorer les modifications dans les sous-modules git

L'essentiel:

Une fois que vous avez ajouté un sous-module, un fichier nommé .gitmodules à la racine de votre référentiel

Ajoutez simplement une ligne à ce .gitmodules fichier:

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

Il existe deux types d'avis de modification que vous pouvez supprimer.

Le premier est untracked content Qui se produit lorsque vous apportez des modifications à votre sous-module mais que vous ne les avez pas encore validées. Le référentiel parent les remarque et git status Le signale en conséquence:

modified: modules/media (untracked content)

Vous pouvez les supprimer avec:

[submodule "modules/media"]
   path = modules/media
   url = [email protected]:user/media.git
   ignore = dirty

Cependant, une fois que vous avez validé ces modifications, le référentiel parent en tiendra de nouveau compte et les signalera en conséquence:

modified:   modules/media (new commits)

Si vous souhaitez également les supprimer, vous devez ignorer les modifications de all

[submodule "modules/media"]
   path = modules/media
   url = [email protected]:user/media.git
   ignore = all
55
aleemb

Comme vous le mentionnez, le patch sous-module git: ignorer les sous-modules sales pour le résumé et l'état est en cours de création.

Également annoncé dans la version Git 1.7.2-rc2 :

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

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

"git status" appris "--ignore-submodules "option.

Sens:

git config --global diff.ignoreSubmodules dirty

Le considérer comme une option n'est pas exactement le approche choisie pour l'instant :

Après cette série, je prévois d'ajouter une option de configuration 'ignore' à ​​.gitmodules, qui peut être défini pour chaque sous-module sur "tous", "sale", "non suivi" ou "aucun" (par défaut).

"git diff" et "git status "utilisera cette valeur de configuration pour chaque sous-module.
En utilisant "--ignore-submodule "remplace cette valeur par défaut (et le nouveau paramètre" none "y sera ajouté pour pouvoir remplacer les paramètres de configuration).

Et pour éviter d'avoir à faire "git submdule sync "chaque fois que cette option change, je voudrais la rechercher dans .git/config première.
S'il ne s'y trouve pas, il sera extrait de .gitmodules, si présent.

Les utilisateurs peuvent donc remplacer le paramètre, mais s'ils ne le font pas, l'amont peut facilement le modifier (par exemple, lorsqu'un sous-module .gitignore a été mis à jour afin que "ignore=untracked "n'est plus nécessaire, il peut être supprimé).
Le changement de branche aura également un effet instantané si l'entrée 'ignore' dans .gitmodules est différent entre les branches.


Une autre approche pour rendre git status (ou toute commande git) pour ignorer un sous-module particulier est disponible avec Git 2.13 (Q2 2017):

git config submodule.<name>.active false

Voir plus sur " Ignorer les nouveaux commit pour le sous-module git ".

13
VonC

Vous pouvez aussi utiliser

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

mettre en place submodule.ignore = dirty dans votre .git/config fichier. --global définira le drapeau Ignorer dans votre ~/.gitconfig et s'appliquent à tous vos référentiels. Sans cela, il devrait être défini dans .git/config pour le repo dans lequel vous vous trouvez actuellement.

La seule documentation que je puisse trouver à ce sujet est submodule.<name>.ignore dans les documents git-config . Je l'ai déplacé d'un fichier .gitmodules dans mon ~/.gitconfig et cela fonctionne toujours pour moi.

10
kjell_

Vous devez ajouter

ignorer = sale

aux .gitmodules

6
Roman

Donc git v1.7.2-rc2 a ce que je veux:

 $ git diff --ignore-submodules = sale vendeur 
 # pas de sortie 
 $ git status --ignore-submodules = sales vendor 
 # Sur la branche… 
 rien à valider (répertoire de travail propre) 

Construire votre 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
2
kch

J'ai répondu à cette question ici plus en détail.

Il suffit de courir

git config --global diff.ignoreSubmodules dirty

pour ajouter une option de configuration locale pour ignorer ces modifications.

1
Devpool

Vous ne voudrez peut-être pas ajouter ignore = dirty à .gitmodules, vous souhaiterez peut-être être plus sélectif sur les modifications que vous souhaitez ignorer.

Pour ce faire, ajoutez des modèles à .git/submodule_foo/bar/info/exclude, où submodule_foo/bar/ est le chemin du sous-module.

Les motifs sont similaires à ceux que vous ajouteriez à .gitignore, la racine étant le répertoire du sous-module. Par exemple, ce modèle ignore le répertoire build dans le sous-module submodule_foo/bar/:

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