2009-10-24 5 views
25

Duplicate possible:
Is there any way to clone a git repository’s sub-directory only?parties clone d'un projet github

Je suis en train de cloner des parties d'un projet github, mais je ne peux obtenir le dossier racine. C'est la première fois que j'essaie d'utiliser github et je viens d'installer tortoisegit, im utilisé pour svn et cvs où vous pourriez juste prendre un dossier que vous vouliez commander, mais il semble que git a seulement un fichier .git dans le dossier racine je ne sais pas quoi faire.

+0

Il semble étrange que vous ayez seulement le répertoire .git. Avez-vous clone le repository correctement? – Spoike

+0

Je pense que vous m'avez mal compris, je reçois tous les fichiers mais je ne veux qu'un sous-dossier du projet. – Dennis

Répondre

8

Il existe la fusion de sous-arborescence.

Mais voici une solution plus facile mais partielle qui est peut-être assez bon pour vos besoins. Juste fourche et fusionner périodiquement.

  1. Fork (clone) le dépôt
  2. Retirez les pièces que vous n'avez pas besoin et déplacer le sous-dossier où vous avez besoin
  3. Commit

À l'avenir, quand vous voulez Synchronisez avec le code Git en amont, fusionnez-le avec votre fourche. Les fichiers que vous avez conservés seront synchronisés avec ceux de l'amont, et vous pourriez avoir quelques petits nettoyages à faire qui sont faciles à voir depuis git status.

+2

Cela semble compliqué, pourquoi quelqu'un utiliserait git sur svn ou cvs? – Dennis

+1

Dans le contexte de GitHub, je dirais que Git facilite la coopération avec les autres, que ce soit en tant qu'équipe dédiée ou occasionnellement. – JasonSmith

7

Dans la communauté Git ce que vous voulez est appelé un "paiement partiel". Il n'est pas actuellement supporté par Git, mais il apparaît de temps en temps sur la liste de diffusion. Git a des parties de l'interne nécessaires pour supporter une extraction partielle, mais il n'y a pas de moyen facile de les utiliser en tant qu'utilisateur. J'imagine que Git pourra éventuellement effectuer des retraits partiels, mais cela pourrait prendre un certain temps avant que ça arrive.

En plus de jhs's answers (fusion de sous-arborescence, rm, mv, commit, fusionner), il existe également a third-party ‘subtree’ command qui peut faciliter le fonctionnement avec des extractions partielles. Bien que ce ne soit pas son objectif principal, il n'est donc pas évident de savoir comment l'utiliser pour travailler avec un paiement partiel. Si vous connaissez déjà bien Git, vous pouvez le résoudre, mais si vous êtes nouveau sur Git, cette commande subtree sera probablement assez opaque. Enfin, si tout ce que vous voulez faire est de télécharger les derniers fichiers, vous pourriez être en mesure de use git archive to download a tar file of a specific branch or tag (or any commit-ish). Cela peut ne pas fonctionner avec GitHub (cela dépend de la configuration du serveur), je n'ai pas vérifié. Même si cela ne fonctionne pas directement, vous pouvez cloner votre propre dépôt "miroir", puis récupérer des archives (sous-arbre).

+1

Cela peut avoir été ajouté depuis Oct'09, mais pour obtenir une archive de GitHub, il y a en fait un bouton 'Download' dans la partie supérieure droite de tout repo/fork/branch/commit qui vous permettra de tirer une copie d'archive de le code de ce point dans l'histoire (par exemple un commit précédent si vous y naviguez d'abord) – johnny

-1

Ce n'est pas vraiment quelque chose que vous faites dans git. Rappelez-vous que vous utilisez un DVCS, donc vous devez extraire l'historique complet du dépôt - qu'est-ce qui est supposé arriver aux commits qui changent les fichiers en dehors du répertoire que vous arrêtez? Si un projet est suffisamment volumineux, le mainteneur de tout repo que vous clonez doit utiliser des sous-modules pour diviser les sections, de sorte que les développeurs puissent seulement abattre les zones sur lesquelles ils veulent travailler.

Git (enfin, les DVCS en général) n'est pas conçu pour les utilisateurs finaux comme pour les développeurs. Je trouve git (particulièrement en combinaison avec github) pour être incroyablement utile pour le codage.S'il y a un projet sur github auquel je veux contribuer, je le fourche, je le tire, hackhackhack, poussez vers le haut, et envoyez une requête pull, easypeasy, plutôt que de faire un checkout, pirater, créer un diff, essayer de trouver où l'envoyer par courriel à, et en espérant que le diff ne se casse pas avant que les développeurs ne parviennent à le fusionner.

Git dans son ensemble est certainement plus compliqué que svn, mais c'est parce que le codage est un processus compliqué. Le flux de travail VCS centralisé est incroyablement douloureux pour moi, parce que j'ai été élevé sur DVCS, et je ne suis pas autorisé à faire toutes sortes de choses que je suis habitué à faire. Donc, oui, il sera plus compliqué d'utiliser git vs svn si vous faites les mêmes choses, mais l'avantage est qu'il y abeaucoup plus de choses que vous pouvez faire. Git a été développé pour le développement du noyau Linux, et ça se voit.

+5

Je ne vois pas pourquoi cela ne devrait pas être quelque chose fourni par git. La requête, "donne moi tous les fichiers correspondant à /foo/bar/.* au commit 6789abc", est bien définie et utile. – jameshfisher