1718 votes

Est-il possible de cloner un dépôt git sous-répertoire?

J'ai mon repo git qui, à la racine, a deux sous-répertoires

/finisht
/static

Quand cela a été SVN, /finisht a été vérifié dans un endroit, tandis que /static a été vérifié d'ailleurs, comme suit:

svn co svn+ssh://admin@domain.com/home/admin/repos/finisht/static static

Est-il de toute façon pour ce faire avec git?

1684voto

Chronial Points 15402

Ce que vous essayez de faire est appelée sparse checkout, et que la fonctionnalité a été ajoutée dans git 1.7.0 (Fév. 2012). Les étapes pour faire un clairsemée clone sont comme suit:

git init <repo>
cd <repo>
git remote add -f origin <url>

Cela crée un dépôt vide avec votre télécommande. Ensuite il faut faire:

git config core.sparsecheckout true

Maintenant, vous devez définir les fichiers/dossiers que vous souhaitez extraire. Ceci est fait par la liste dans .git/info/sparse-checkout, par exemple:

echo "some/dir/" >> .git/info/sparse-checkout
echo "another/sub/tree" >> .git/info/sparse-checkout

Dernier mais non le moins, la mise à jour de votre vide des pensions de l'état à partir de la télécommande:

git pull origin master

Vous pouvez avoir un coup d'oeil à l' étendue tutoriel et vous devriez probablement lu l'officiel de la documentation pour sparse checkout.

742voto

Jörg W Mittag Points 153275

Cette réponse est obsolète et ne s'appliquent qu'à git versions inférieures à la version 1.7.0 (Fév. 2012). Voir ci-dessous pour les versions plus récentes.

Non, ce n'est pas possible dans Git.

La mise en œuvre de quelque chose comme cela dans Git serait un effort important et cela voudrait dire que l'intégrité de la clientside référentiel peut plus être garanti. Si vous êtes intéressé, recherche pour les discussions sur les "sparse " clone" et "sparse " chercher" sur le git liste de diffusion.

En général, le consensus dans le Git de la communauté, c'est que si vous avez plusieurs répertoires qui sont toujours vérifiées de façon indépendante, alors ce sont vraiment deux projets différents et devraient vivre dans deux dépôts différents. Vous pouvez les coller ensemble à l'aide de Submodules.

77voto

hillu Points 4033

Si vous n'envisagez pas d'interagir avec le référentiel à partir duquel vous cloné, vous pouvez faire un git clone et de réécrire votre référentiel à l'aide de git filter-branch --sous-répertoire-filtre. De cette façon, au moins l'histoire sera préservée.

63voto

Chris Johnsen Points 50064

Git 1.7.0 a "sparse " extractions". Voir "de base.sparseCheckout" dans le git config page de manuel, "Sparse checkout" dans le git de lecture de l'arbre- man, et "Ignorez-worktree bits" dans le git update-index page de manuel.

L'interface n'est pas aussi pratique que SVN (par exemple, il n'y a aucun moyen de faire un clairsemée caisse à la fois d'un clone initial), mais la fonctionnalité de base sur lesquels plus simple, les interfaces pourrait être construit est maintenant disponible.

9voto

david_adler Points 448

Hey j'ai juste écrit un script

l'utilisation de la

      python get_git_sub_dir.py path/to/sub/dir <RECURSIVE>

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