175 votes

GIT: la Caisse pour un dossier spécifique

Je veux utiliser quelque chose de similaire à:

git checkout -- <path>/<file>

mais je veux extraire le fichier dans un dossier j'ai choisi, plutôt que de l'écraser local /.

Une idée?

243voto

Adrian Macneil Points 5339

Une autre solution qui est un peu plus propre - il suffit de spécifier un travail à l'autre de l'arbre.

À la caisse tout à partir de votre TÊTE (pas d'index) à un annuaire:

git --work-tree=/path/to/outputdir checkout HEAD -- .

Pour extraire un sous-répertoire ou le fichier à partir de votre TÊTE à un répertoire spécifique:

git --work-tree=/path/to/outputdir checkout HEAD -- subdirname

65voto

hasenj Points 36139

Que par la Façon de faire un "git à l'exportation" (comme "svn export")

Vous pouvez utiliser git checkout-index pour qui, c'est un faible niveau de commande, si vous voulez tout exporter, vous pouvez utiliser -a,

git checkout-index -a -f --prefix=/destination/path/

Pour citer les pages de manuel:

Le " / " final [préfixe] est important. Le nom exporté est littéralement juste avec le préfixe de la chaîne spécifiée.

Si vous souhaitez exporter un certain répertoire, il y a quelques astuces impliqués. La commande ne prend que les fichiers, pas les répertoires. Pour l'appliquer à des répertoires, utilisez la fonction "rechercher" de commandement et de rediriger la sortie vers git.

find dirname -print0 | git checkout-index --prefix=/path-to/dest/ -f -z --stdin

Aussi à partir de l'homme pages:

L'intuition n'est pas le but ici. La répétabilité est.

35voto

Tobu Points 10101

Pour un seul et même fichier:

git show HEAD:abspath/to/file > file.copy

20voto

proski Points 31

Les solutions ci-dessus ne fonctionne pas pour moi parce que j'avais besoin de vérifier un certain tagged version de l'arbre. C'est ainsi que "cvs export" info est destiné à être utilisé, par la manière. "git checkout-index" ne prenez pas la balise argument, il vérifie les fichiers à partir de l'index. "git checkout <balise>" serait de modifier l'index quel que soit le travail de l'arbre, donc j'aurais besoin de réinitialiser l'arbre d'origine. J'ai fini par clonage du référentiel. Partagé clone est assez rapide et ne prend pas beaucoup d'espace supplémentaire. L' .répertoire git peut être retiré si vous le souhaitez.

git clone --shared --no-checkout <repository> <destination>
cd <destination>
git checkout <tag>
rm -rf .git

Les nouvelles versions de git devrait soutenir "git clone --branche" pour vérifier l'étiquette spécifiée automatiquement:

git clone --shared --branch <tag> <repository> <destination>
rm -rf <destination>/.git

0voto

user3070485 Points 11

git --travail-arbre=/chemin/vers/outputdir la caisse de TÊTE -- .

À mon avis, c'est seulement pour aller travailler dans les chanceux cas où le fichier est dans le répertoire racine du projet. Supposons que le répertoire qu'il veut p[dentelle le fichier est c:/temp et son dossier dans l'arbre de travail est /le/chemin/myprojectsrootdir/manuels/pdf/aide.pdf

Alors sûrement la commande spécifiée ci-dessus va placer le nouveau fichier dans

c:/temp/manuals/pdf/help.pdf

et pas dans

c:/temp/help.pdf

c'est à dire dans le dossier choisi c:/temp comme spécifié.

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