J'ai un dépôt git ~/.janus/
avec un tas de sous-modules. Je souhaite ajouter un sous-module ~/.janus/snipmate-snippets/snippets/
, mais lorsque j'exécute git submodule add <[email protected]:...>
dans le snipmate-snippets
répertoire, j'obtiens le message d'erreur suivant:
You need to run this command from the toplevel of the working tree.
La question est donc la suivante: comment ajouter un sous-module au snipmate-snippets
répertoire?
git
git-submodules
Robert Audi
la source
la source
git submodule add -b <branch> <url> <relative_path_4m_root>
Réponses:
Vous entrez
~/.janus
et exécutez:Si vous avez besoin de plus d'informations sur les sous-modules (ou git en général), ProGit est assez utile.
la source
'subprojects' already exists in the index
(j'utilisais des sous-projets comme nom de répertoire) . Au lieu de cela, ce qui a aidé, c'est la réponse du VonC ci-dessous, c'est-à-dire fairecd subprojects
, puisgit submodule add <get@github …>
sans le chemin.Notez qu'à partir de git1.8.4 (juillet 2013), vous n'aurez plus à retourner dans le répertoire racine.
( Bouke Versteegh commente que vous n'avez pas à utiliser
/.
, comme danssnippets/.
:snippets
c'est suffisant)Voir commit 091a6eb0feed820a43663ca63dc2bc0bb247bbae :
Dépend de la validation 12b9d32790b40bf3ea49134095619700191abf1f
la source
/.
n'est pas nécessaire, git créera les extraits de répertoire sans lui.Relative path can only be used from the toplevel of the working tree
. Je faisgit submodule add ../../../functest
Relative path can only be used from the toplevel of the working tree
") n'est pas celui de la question d'origine ("You need to run this command from the toplevel of the working tree
")J'ai eu un problème similaire, mais je me suis peint dans un coin avec des outils GUI.
J'avais un sous-projet avec quelques fichiers que je venais de copier jusqu'à présent au lieu de vérifier dans leur propre dépôt git. J'ai créé un dépôt dans le sous-dossier, j'ai pu valider, pousser, etc. très bien. Mais dans le référentiel parent, le sous-dossier n'était pas traité comme un sous-module, et ses fichiers étaient toujours suivis par le référentiel parent - pas bon.
Pour sortir de ce bordel, j'ai dû dire à Git d'arrêter de suivre le sous-dossier (sans supprimer les fichiers):
Ensuite, j'ai dû lui dire qu'il y avait un sous-module (ce que vous ne pouvez pas faire si quelque chose est actuellement suivi par git):
Mettre à jour
La façon idéale de gérer cela implique quelques étapes supplémentaires. Idéalement, le référentiel existant est déplacé vers son propre répertoire, exempt de tout module git parent, validé et poussé, puis ajouté en tant que sous-module comme:
Cela clonera le dépôt git en tant que sous-module - ce qui implique les étapes de clonage standard, mais également plusieurs autres étapes de configuration plus obscures que git prend en votre nom pour faire fonctionner ce sous-module. La différence la plus importante est qu'il y place un simple fichier .git, au lieu d'un répertoire .git, qui contient une référence de chemin vers l'emplacement du vrai répertoire git - généralement à la racine du projet parent .git / modules / jslib.
Si vous ne faites pas les choses de cette façon, cela fonctionnera bien pour vous, mais dès que vous vous engagez et poussez le parent, et qu'un autre dev va tirer ce parent, vous venez de rendre leur vie beaucoup plus difficile. Il leur sera très difficile de répliquer la structure que vous avez sur votre machine tant que vous avez un répertoire .git complet dans un sous-dossier d'un répertoire qui contient son propre répertoire .git.
Donc, déplacer, pousser, ajouter un sous-module, c'est l'option la plus propre.
la source
Pour ceux d'entre vous qui partagent mon étrange envie de modifier manuellement les fichiers de configuration, l'ajout (ou la modification) des éléments suivants ferait également l'affaire.
.git / config (configuration personnelle)
.gitmodules (configuration partagée validée )
Voir aussi ceci - différence entre .gitmodules et spécification de sous-modules dans .git / config?
la source
script bash à une ligne pour aider la réponse de Chris à l'installation ci-dessus, car je m'étais moi-même peint dans un coin en utilisant les mises à jour Vundle de mes scripts .vim.
DEST
est le chemin d'accès au répertoire contenant vos sous-modules. Faites cela après avoir faitgit rm -r $DEST
à votre santé
la source