2010-03-03 4 views
7

Je veux git cloner un dépôt svn à l'exception d'un dossier dans le dossier racine de svn.git svn clone sauf un dossier particulier

Comment faire?

que je pouvais faire git svn clone svnrepo/dir/sb-dir/ si je devais seulement sb-dir mais j'ai besoin tous les dossiers (et fichiers) dans le dir sauf le dossier design

Répondre

3

Si vous utilisez le latest Git1.7.0, il offre une fonction de commande clairsemée .

La fonction de «vérification éparse» permet de vérifier seulement une partie de l'arbre de travail.

Voir Git Sparse Checkout SO question pour plus: vous avez encore besoin de cloner le repo tous, mais vous pouvez la caisse (c.-à-remplir votre arbre de travail) avec uniquement des parties du repo clonée)


La seule d'une autre manière transformerait design en sous-module.
Comme le GitPro book mentions:

support

sous-module de Git permet un dépôt pour contenir, en tant que sous-répertoire, une caisse d'un projet externe.
Les sous-modules conservent leur propre identité; la prise en charge du sous-module ne stocke que l'emplacement du référentiel de sous-module et l'ID de validation, de sorte que les autres développeurs qui clonent le projet conteneur ("superprojet") peuvent facilement cloner tous les sous-modules à la même révision.
Des extractions partielles du superprojet sont possibles: vous pouvez demander à Git de ne cloner aucun, certains ou tous les sous-modules.

Submodule est la seule façon dont je suis conscient de réaliser « clonage partiel », puisque n votre cas, il est la partie de clonage qui est problématique.
De vos commentaires:

mon problème est que le dossier de conception est quelque 700 mb; et ça prend des heures pour git svn clone. L'ensemble du reste du projet réuni est en 10s de mb.

Mais cela signifie que la modification du repo SVN, pour isoler design comme référence « externe », puis git svn clone et ajouter dans le clone Git repo une référence de sous-module.

+1

Merci! Mais mon problème est que le dossier de conception est de 700 mb; et ça prend des heures pour git svn clone. L'ensemble du reste du projet réuni est en 10s de mb. C'est faux en premier lieu je sais, pour le mettre en repo. Mais je voulais un moyen sain de traiter localement en utilisant git. Cela ne semble pas possible, alors –

+0

@becomingGuru: le bon sens serait de séparer ce repo et d'isoler le design dans son propre repo, référencé comme un sous-module. De cette façon, vous obtiendrez * exactement * ce que vous cherchez. Voir http://stackoverflow.com/questions/359424/detach-subdirectory-into-separate-git-repository – VonC

2

Vous pouvez utiliser l'option --ignore-paths=<regex>-git svn init ou git svn fetch, ou ajoutez l'option de configuration svn-remote.<name>.ignore-paths à .git/config. Cela est documenté comme "Cela permet de spécifier une expression régulière Perl qui provoquera le saut de tous les chemins correspondants à partir de la vérification de SVN." Recherchez manual pour "ignore-paths" pour plus de détails. Après avoir essayé l'expérience dans this answer, j'ai appris que la regex semblait être appliquée au chemin complet de chaque répertoire ou fichier à partir de la racine du dépôt. Par conséquent, si vous disposez d'une disposition de référentiel standard et souhaitez exclure la même chose de chaque tronc/branche/étiquette, vous pouvez utiliser une expression régulière telle que ^(trunk|((branches|tags)/[^/]+))(<file-to-ignore>|<other-file-to-ignore>).

Questions connexes