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?
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.)
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'
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
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
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 ".
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.
Vous devez ajouter
ignorer = sale
aux .gitmodules
$ 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)
# 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
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.
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/