web-dev-qa-db-fra.com

Git: Comment mettre à jour / extraire un seul fichier depuis le maître d'origine distant?

Le scénario:

  1. J'apporte localement des modifications dans un seul fichier et exécute git add, git commit et git Push
  2. Le fichier est poussé vers le référentiel maître d'origine distant.
  3. J'ai un autre référentiel local déployé via Capistrano avec la méthode "remote_cache" à partir de ce référentiel distant
  4. Maintenant, je ne veux pas déployer toute l'application, mais simplement mettre à jour/extraire ce fichier unique.

S'il vous plaît, est-ce possible avec git? Je n'ai pas pu trouver quoi que ce soit qui fonctionnerait, ni le comprendre. Avec SVN, je viens de faire svn up file et le tour est joué.

Je serai heureux pour toute aide, merci!

297
foresth

Il est possible de faire (dans le référentiel déployé)

git fetch
git checkout Origin/master -- path/to/file

L'extraction téléchargera toutes les modifications récentes, mais ne la mettra pas dans votre code extrait actuel (zone de travail).

La caisse mettra à jour l'arbre de travail avec le fichier particulier à partir des modifications téléchargées (Origin/master).

Au moins, cela fonctionne pour moi pour ces petites corrections de typo, où il est étrange de créer une branche, etc. juste pour changer un mot dans un fichier.

793
qzio

Le code suivant a fonctionné pour moi:

     git fetch
     git checkout <branch from which file needs to be fetched> <filepath> 
19
Shagun Pruthi
git archive --format=Zip --remote=ssh://<user>@<Host>/repos/<repo name> <tag or HEAD> <filename> > <output file name>.Zip
18
Dmitry R

Ce que vous pouvez faire c'est:

  1. Mettez à jour votre dépôt Git local:

    git fetch

  2. Construisez une branche locale et passez à la caisse dessus:

    git branch pouet && git checkout pouet

  3. Appliquez le commit que vous voulez sur cette branche:

    git cherry-pick abcdefabcdef

    (abcdefabcdef est le sha1 du commit que vous souhaitez appliquer)

6
jag

Ou git stash (si vous avez des modifications) sur la branche sur laquelle vous êtes, checkout master, recherchez les dernières modifications, récupérez ce fichier sur votre bureau (ou dans l'ensemble de l'application). Passez à la succursale où vous vous trouviez. Git stash s'applique de nouveau à l'état où vous vous trouviez, puis corrigez les modifications manuellement ou faites-les glisser pour remplacer le fichier.

De cette façon, ce n’est pas vraiment cool, mais c’est parfait si vous ne trouvez pas autre chose.

2
jahrichie