Non, vous n'avez pas besoin d'ajouter votre sous-module à votre .gitignore
: ce que le parent verra de votre sous-module est un gitlink (une entrée spéciale,mode 160000
).
Cela signifie: toute modification effectuée directement dans un sous-module doit être suivie d'un commit dans le répertoire parent.
De cette façon, le répertoire parent enregistrera le bon commit pour l'état du sous-module: Ce commit est le "gitlink" mentionné ci-dessus;
Vous pouvez en savoir plus sur cette politique dans " git submodule update (vraie nature des sous-modules) ".
L'idée principale des sous-modules est une approche basée sur les composants , dans laquelle vous référencez d'autres dépôts à des commits spécifiques. Mais si vous modifiez quelque chose dans ces sous-modules, vous devez également mettre à jour ces références dans le référentiel parent.
Notez qu'avec Git 2.13 (Q2 2017), sans ignorer le gitlink, vous pouvez toujours ignorer le sous-module avec:
git config submodule.<name>.active false
Pour en savoir plus, consultez " Ignorer les nouveaux commits pour le sous-module git ".
Remarque: avec Git 2.15.x / 2.16 (Q1 2018), ignorer un sous-module est plus précis.
" git status --ignored --untracked
" ne s'est pas arrêté à une arborescence de travail d'un projet séparé qui est incorporé dans un répertoire ignoré et des fichiers répertoriés dans cet autre projet, au lieu de simplement afficher le répertoire lui-même comme ignoré.
Voir commit fadb482 (25 octobre 2017) par Johannes Schindelin ( dscho
) .
(Fusionné par Junio C Hamano - gitster
- dans commit da7996a , 06 novembre 2017)
status
: ne vous laissez pas confondre par les sous-modules dans les répertoires exclus
Nous transmettons méticuleusement le exclude
drapeau à la treat_directory()
fonction afin de pouvoir indiquer que les fichiers qu'elle contient sont exclus plutôt que non suivis lors de la récurrence.
Mais nous n'avons pas encore traité les sous-modules de la même manière.
Pour cette raison, git status --ignored --untracked
avec un sous-module
submodule
dans un gitignored tracked/
afficherait le sous-module dans la Untracked files
section " ", par exemple
On branch master
Untracked files:
(use "git add <file>..." to include in what will be committed)
tracked/submodule/
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/initial.t
Au lieu de cela, nous voudrions qu'il affiche le sous-module dans la Ignored files
section " ":
On branch master
Ignored files:
(use "git add -f <file>..." to include in what will be committed)
tracked/submodule/
.gitmodules
fichier. Il est vrai que ce fichier (le.gitmodules
) peut inclure des informations d'identification, mais s'il est utilisé uniquement pour cloner des dépôts publics, il n'a pas à les inclure. De plus, ils peuvent quand même être mis en cache, même sous Windows, avec des aides d'identification comme le «Git Credential Manager for Windows» ( github.com/Microsoft/Git-Credential-Manager-for-Windows/… ). Donc, avoir des informations d'identification dans le.gitmodules
n'est pas une fatalité.Pour une raison quelconque, submodule.module-name.active ne fonctionnait pas pour moi.
C'est pourquoi j'ai utilisé submodule.module-name.ignore
https://git-scm.com/docs/gitmodules - vous trouverez ici une description des valeurs possibles pour le paramètre
Fonctionne pour moi pour les messages (nouveaux commits) et (contenu modifié).
la source
Pour ajouter à la réponse acceptée, j'ai constaté que l'ajout du dossier de sous-module Git à .gitignore causait en fait des problèmes - en particulier lorsque vous essayez de créer un nouveau clone du projet. Plus précisément, l'exécution des commandes de clonage de sous-module normales entraînait le vide du dossier du sous-module:
Seulement en essayant de réexécuter
il était clair quel était le problème, en fonction du résultat:
Au lieu d'ajouter
-f
, j'ai supprimé le dossier du sous-module Git de .gitignore et relancé les commandes de clonage du sous-module - qui ont maintenant créé le dossier avec succès. Je pense qu'il peut y avoir un bogue dans le fait qu'une des commandes de clonage de sous-module respecte .gitignore mais ne prévient pas qu'elle saute un sous-module en conséquence.la source