171 votes

Sous-répertoires Git Checkout ?

Est-il possible de vérifier les sous-répertoires d'un dépôt Git?

Imagine que je suis en train d'ouvrir une nouvelle installation de WordPress. Je vais créer deux nouveaux répertoires pour mon plugin et la personnalisation du thème:

  • wordpress/wp-content/plugins/myplugins/
  • wordpress/wp-content/themes/mytheme/

Je veux maintenir ces répertoires via Git. Dans Subversion, je voudrais accomplir cela en ayant trunk/myplugins/ et trunk/mytheme/ répertoires et de vérifier les sous-répertoires. Ne Git avoir un moyen pour accomplir la même tâche à l'aide d'un référentiel unique?

J'ai peut-être juste à côté du bateau sur certains Git paradigme, comme un long temps SVN utilisateur avec peu d'exposition à Git.

Edit: Plusieurs branches de stocker un contenu différent est un moyen intéressant pour gérer cela.

127voto

Collin Anderson Points 952

Éparses les extractions sont maintenant dans Git 1.7.

Voir aussi la question "Est-il possible de faire un clairsemée commander sans vérification de l'ensemble du référentiel d'abord?".

Notez que éparses extractions encore besoin de vous pour télécharger l'ensemble du référentiel, même si certains des fichiers Git téléchargements ne finira pas dans votre arbre de travail.

17voto

Aristotle Pagaltzis Points 43253

Il n'y a pas de véritable moyen de le faire git. Et si vous n'avez pas à apporter les changements qui affectent à la fois les arbres à la fois comme une seule unité de travail, il n'y a pas de bonne raison de l'utilisation d'un référentiel unique pour les deux. Je pensais que j'allais rater cette Subversion, mais j'ai trouvé que la création de référentiels de a tellement peu d'administratif mentale, les frais généraux (en raison du simple fait que les référentiels sont stockés juste à côté de leur copie de travail, plutôt que d'exiger me explicitement choisir un endroit à l'extérieur de la copie de travail) que j'ai utilisé pour juste faire beaucoup de petits à usage unique dépôts.

Si vous insistez (ou en a vraiment besoin), bien que, vous pourriez faire un dépôt git avec juste mytheme et myplugins annuaires et symlink ceux de l'intérieur de l'installation de WordPress.


MDCore a écrit:

faire un commit pour, par exemple, mytheme incrémenter le numéro de révision de myplugin

Notez que ce n'est pas un sujet de préoccupation pour git, si vous décidez de mettre les deux répertoires dans un référentiel unique, parce que git ne fait pas entièrement avec le concept de plus en plus monotone que les numéros de révision de toute forme.

Le seul critère pour ce que les choses de rassembler dans un seul dépôt git est de savoir si elle constitue une seule unité, c'est à dire. dans votre cas, s'il ya des changements où il ne fait pas de sens pour regarder les modifications dans chaque répertoire dans l'isolement. Si vous avez des modifications lorsque vous avez besoin de modifier des fichiers dans les deux répertoires à la fois et les modifications vont de pair, ils doivent être d'un seul référentiel. Si non, alors ne pas glom ensemble.

Git vraiment veut vraiment que vous utilisez des dépôts d'entités distinctes.

submodules

Submodules ne pas répondre au désir de garder les deux répertoires dans un seul référentiel, car ils seraient en fait de faire respecter ayant un référentiel pour chaque répertoire, qui sont ensuite regroupés dans un autre référentiel à l'aide de submodules. Pire, puisque les répertoires à l'intérieur de l'installation de WordPress ne sont pas les sous-répertoires du répertoire, en font aussi partie d'une hiérarchie avec de nombreux autres fichiers, en utilisant le répertoire des référentiels comme submodules dans un référentiel unifié offrirait aucun avantage, parce que le référentiel unifié serait pas l'expression d'un cas d'utilisation ou du besoin.

16voto

OleTraveler Points 854

Une chose que je n'aime pas à propos de éparses extractions, c'est que si vous voulez extraire un sous-répertoire qui est un peu répertoires profondes, votre structure de répertoire doit contenir tous les répertoires.

Comment je contourner cela est de cloner le repo dans un endroit qui n'est pas mon espace de travail, puis de créer un lien symbolique dans mon répertoire d'espace de travail à la sous-répertoire dans le référentiel. Git fonctionne comme cela tout à fait bien, parce que les choses comme git status affiche le changement de fichiers relative à votre répertoire de travail courant.

9voto

Pat Notz Points 46841

En fait, "étroit" ou "partielle" ou "sparse" les extractions sont actuellement en cours de, lourds de développement pour Git. Remarque, vous aurez toujours la pleine dépôt en vertu de l' .git. Donc, les deux autres postes sont en cours pour l'état actuel de Git, mais il semble comme, nous serons en mesure de le faire éparses extractions par la suite. La caisse de l'listes de diffusion si vous êtes intéressé par plus de détails, ils sont en train de changer rapidement.

1voto

MDCore Points 4564

Vous ne pouvez pas commander un répertoire unique d'un dépôt, car la totalité du dépôt est géré par le single .git dossier à la racine du projet au lieu de subversion de myriade de .svn répertoires.

Le problème avec le travail sur les plugins dans un référentiel unique, c'est que faire un commit pour, par exemple, mytheme incrémenter le numéro de révision de myplugin, de sorte que même dans subversion, il est préférable d'utiliser des référentiels.

La subversion de paradigme pour les sous-projets sont la propriété svn:externals qui se traduit par un peu de submodules dans git (mais pas exactement dans le cas où vous avez utilisé svn:externals avant.)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X