214 votes

Est-il possible de faire un checkout clairsemé sans d'abord extraire le référentiel entier?

Je suis en train de travailler avec un espace de stockage avec un très grand nombre de fichiers qui prend des heures à la caisse. Je suis à la recherche dans la possibilité de s'Git bien travailler avec ce type de référentiel maintenant qu'il prend en charge éparses extractions, mais tous les exemples que j'ai pu trouver est le suivant:

git clone <path>
git config core.sparsecheckout true
echo <dir> > .git/info/sparse-checkout
git read-tree -m -u HEAD

Le problème avec cette séquence de commandes est le clone d'origine a également fait un checkout. Si vous ajoutez -n pour le clone d'origine de la commande, puis la lecture de l'arbre de commande entraîne l'erreur suivante:

erreur: Sparse checkout laisse pas d'entrée sur le répertoire de travail

Comment peuvent faire les rares commander sans vérification de tous les fichiers en premier?

169voto

apenwarr Points 4956

Essaye ça:

 mkdir myrepo
cd myrepo
git init
git config core.sparseCheckout true
git remote add -f origin git://...
echo path/to/subdir/*> .git/info/sparse-checkout
git checkout [branchname]
 

44voto

onionjake Points 1109

Git Clone a une option qui fait ce que vous voulez:

 git clone --no-checkout
 

Vous pouvez ensuite utiliser la caisse clairsemée.

10voto

ruslan Points 5754

Malheureusement, aucune de ces fonctionné pour moi alors j'ai passé un très long temps à essayer différentes combinaisons de sparse-checkout le fichier.

Dans mon cas, je voulais sauter des dossiers avec IntelliJ IDEA configs.

Voici ce que j'ai fait:


Exécutez git clone https://github.com/myaccount/myrepo.git --no-checkout

Exécutez git config core.sparsecheckout true

Créée .git\info\sparse-checkout avec le contenu suivant

!.idea/*
!.idea_modules/*
/*

Exécutez git checkout --' pour obtenir tous les fichiers.


Chose essentielle à faire ce travail était d'ajouter /* après le nom du dossier.

J'ai git 1.9

4voto

balor123 Points 1485

Je suis nouveau sur git, mais il semble que si je fais un git checkout pour chaque répertoire, puis il travaille. Aussi, les rares-caisse fichier doit avoir une barre oblique après chaque répertoire comme indiqué. Quelqu'un qui a plus d'expérience s'il vous plaît confirmer que cela fonctionne.

Fait intéressant, si vous extrayez un répertoire non dans les rares-la caisse de fichier, il semble pas faire de différence. Ils n'apparaissent pas dans git status et git lecture de l'arbre -m -u TÊTE ne cause pas être retiré. git reset --hard ne cause pas le répertoire à supprimer. Quelqu'un de plus expérimenté soins de commenter ce que git pense répertoires qui sont vérifiées, mais qui ne sont pas dans la sparse checkout fichier?

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