2009-12-15 5 views
13

J'utilise git diff pour générer des correctifs qui peuvent être appliqués au serveur distant pour mettre à jour un projet.Comment appliquer git diff -binary patches sans git installé?

Localement, je lance:

git diff --no-prefix HEAD~1 HEAD > example.patch 

Ajouter example.patch au serveur distant et lancez:

patch --dry-run -p0 < example.patch 

Si la marche à sec est réussie, je lance:

patch -p0 < example.patch 

Cela fonctionne bien, sauf lorsque diff inclut des fichiers binaires. Aujourd'hui, je trouve que je peux utiliser:

git diff --no-prefix --binary HEAD~1 HEAD > example.patch 

Le problème est que le fichier correctif généré ne peut pas être appliquée à l'aide patch.

Comment puis-je appliquer ces fichiers de correctifs binaires sans avoir installé le serveur?

Je voudrais conserver la capacité d'utiliser la marche à sec.

Merci

Répondre

6

Pour une réponse bizarre, ce que vous pouvez faire est d'utiliser sshfs pour monter le système distant sur lequel jamais vous n'avez git, puis exécutez vos commandes de cette façon. Abordez le problème à partir d'un autre cadre de référence: Au lieu de vous demander comment exécuter les commandes là où l'outil ne fonctionne pas, pourquoi ne pas créer un environnement où les données arrivent dans votre outil? (Sshfs?)

+0

c'est pas mal en fait. très très pas mal. Je l'aime –

+0

le seul souci est qu'il peut être un peu lent pour les gros correctifs (mais cela ne devrait pas arriver si vous déployez beaucoup de petits correctifs) Aussi, que se passe-t-il s'il y a un problème de connexion pendant que vous appliquez un pièce? –

2

Dans de nombreuses situations aussi, vous ne pouvez pas créer de données avec un outil plus avancé et l'utiliser avec moins avancé. C'est une coïncidence heureuse que patch fonctionne pour les git-diffs non-binaires. git diff introduit une extension à diff standard.

Pour atteindre l'objectif, vous pouvez:

  • installer git sur le système de destination (qui est la meilleure approche, vraiment)
  • montage du système de destination au niveau local, comme chiggsy dit
  • juste scp/rsync nouveaux fichiers. Pas mal pour les petits.
+1

Hey Temoto, merci pour la réponse, mais je cherche une réponse que je ne connais pas déjà. –

-5

Utilisez cette

git apply example.patch 
git add --patch 
git commit 

Vous pouvez omettre le drapeau --patch, mais vous ne verrez pas tous les changements et vérifier processus rapiéçage.

+2

avez-vous même lu ma question? –

+0

OK, je ne l'ai pas compris exactement en premier. Donc, si vous n'avez pas de Git sur le serveur distant, la seule façon est de copier les fichiers binaires modifiés. Pour autant que je sache, 'patch' ne supporte pas les différences binaires. – Zebooka

+0

oui, le patch standard ne supporte pas les diffs binaires, mais git diff peut générer des patchs binaires. Je voudrais les appliquer sans avoir installé git sur le serveur distant. –

2

Selon the change log, nous pouvons nous attendre à ce que les versions de correctifs> 2.6.1 prennent en charge les diffs binaires GIT.

+0

patch 2.7.5 ne fonctionne toujours pas sur mon système :( –

+0

Le Changelog à http://git.savannah.gnu.org/cgit/patch.git/tree/NEWS ne semble pas en parler non plus ... –

Questions connexes