vldr; Comment puis-je savoir que mon répertoire de travail actuel est à l'intérieur d'un répertoire sous-module?
Les processus de travail diffèrent si vous travaillez à l'intérieur ou à l'extérieur sous-modulations. Et heure et encore je suis confus parce que je ne suis pas conscient que je suis à l'intérieur d'une sous-coode. P>
de manière optimale J'aimerais corriger Idéalement, je voudrais avoir une fonction shell comme ceci: p> Qu'est-ce que __ git_ps1 code> me montrerait que je suis à l'intérieur d'une sous-module, mais apparemment n'a aucune disposition à le faire. p>
__ git_ps1 Code> pour me montrer le fait que je suis à l'intérieur d'une sous-module, mais je ne trouve pas de manière élégante Pour interroger Git pour ce fait. p>
Quelqu'un_magic code >? p> p>
3 Réponses :
Potentiellement, vous pouvez regarder le répertoire en fonction de la manière dont la sous-module a été ajoutée, il peut encore avoir un répertoire Si un répertoire git d'une sous-module est à l'intérieur du sous-module, déplacez le répertoire git de la sous-module dans son chemin SuperProjects $ git_dir / modules, puis connectez le répertoire GIT et son répertoire de travail en définissant le Core.worktree et l'ajout. Fichier GIT pointant vers le répertoire GIT incorporé dans le répertoire Git SuperProjects. P>
Un référentiel cloné de manière indépendante et ajoutée ultérieurement en tant que sous-module ou d'anciennes configurations dispose du répertoire git sous-modules à l'intérieur du sous-module au lieu d'incorporer dans le répertoire Git SuperProjects. P>
Cette commande est récursive par défaut. P>
blockQquote> ... Mais cela reste problématique car pendant que le test est facile lorsque vous êtes à la racine du sous-module, il est plus difficile lorsque vous êtes dans un répertoire profondément imbriqué (car vous auriez alors Pour rechercher itérativement les répertoires parent jusqu'à la recherche d'un L'entrée de la page de manuel J'ai cité ci-dessus points États-Unis à une seconde, meilleure option: p> dans une sous-module, la valeur Je ne sais pas s'il y a d'autres situations dans lesquelles .git code>. Si c'est pas em> réellement un répertoire, vous pouvez être sûr que vous êtes dans une sous-module. Au moins avec des versions récentes de git, l'entrée
.git code> est en fait un fichier qui ressemble à quelque chose comme:
.git code>. Il y a une commande
Summodule GIT AbsorbgitDirs code> pouvant être exécutée dans le référentiel parent qui résoudra ceci; à partir du
Summodule git Code> Homme: P>
.git code> ou vous atteignez
/ code>). p> <
CORE.WORKTREE CODE> est définie (sur un chemin relatif de la racine du sous-module de retour). Cela signifie que vous pouvez (a) vérifier si le paramètre
CORE.WORKTREE CODE> a une valeur pour déterminer si vous êtes dans une sous-module, et (B), vous pouvez utiliser la valeur de
.worktree code> pour déterminer le nom de la sous-module. Qui nous fait quelque chose comme: p>
corporel.worktree code> sera défini automatiquement, mais ceci semble travailler dans mes tests limités. p> p>
Git Rev-Payse --Show-SuperProject-Tree-Tree-Tree-Traduct - Code>
P>
sortira rien si le référentiel actuel n'est pas utilisé comme sous-module par aucun projet. P>
Remarque: ceci était nouveau dans Git 2.13, et il y avait une solution de bogue mineur en 2.19.2 (il s'agissait de si le superproject avait une soumission de conflit de sous-module). Informations trouvées en exécutant Git journal -s show-Superproject-work-arborescence code> dans le référentiel git pour git, puis vérifiant contenant des balises pour les révisions énumérées.
Sumouule-ness est juste une question de savoir comment un repo utilisé est utilisé, que la commande actuelle soit ce que quelque chose à la commande devraient être là.
Vous pouvez voir si l'arbre de travail est à l'intérieur d'un autre arbre de travail qui pense qu'il devrait exister Soyez une commande ici: P>
top=`git rev-parse --show-toplevel 2>&-` || exit if up=`git -C "$top/.." rev-parse --show-toplevel 2>&-` then echo work tree is at ${top#$up/} in another work tree at=`git -C "$up" rev-parse :${top#$up/}` && echo ... which thinks $(git cat-file -t $at) $at should be checked out there fi