2009-12-15 16 views
13

Io uso git diff per generare patch che possono essere applicate al server remoto per aggiornare un progetto.Come applicare git diff --binary patches senza git installato?

A livello locale, corro:

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

Upload example.patch al server remoto ed eseguire:

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

Se dry-run è successo, ho eseguito:

patch -p0 < example.patch 

Funziona bene, tranne quando diff include file binari. Oggi ho trovato che posso usare:

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

Il problema è che il file di patch generato non può essere applicato tramite patch.

Come posso applicare questi file di patch binari senza aver installato git sul server?

Vorrei mantenere la capacità di utilizzare il funzionamento a secco.

Grazie

risposta

6

Per una risposta stravagante, quello che si potrebbe fare è utilizzare sshfs di montare il sistema remoto di dove mai si ha git, e quindi eseguire i comandi in questo modo. Affrontate il problema da un diverso schema di riferimento: invece di chiedervi come eseguire comandi dove lo strumento non è, perché non creare un ambiente in cui i dati arrivano al vostro strumento (tramite sshfs?)

+0

non è male in realtà. molto molto male Mi piace il –

+0

l'unica preoccupazione è che potrebbe essere un po 'lento per le patch grandi (ma questo non dovrebbe accadere se stai distribuendo un sacco di piccole patch) Inoltre, cosa succede se c'è un problema di connessione mentre stai applicando un patch? –

2

In molte situazioni e in questo Inoltre, non puoi creare dati con uno strumento più avanzato e usarlo con meno avanzato. È una felice coincidenza che lo patch funzioni per git-diff non binari. git diff introduce un'estensione al diff standard.

Per raggiungere l'obiettivo, è possibile:

  • installare git sul sistema di destinazione (che è l'approccio migliore, in realtà)
  • mount sistema di destinazione a livello locale, come chiggsy dice
  • solo scp/rsync nuovi file. Non male per i più piccoli.
+1

Hey Temoto, grazie per la risposta, ma sto cercando una risposta che non conosco già. –

-5

Utilizzare questa

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

È possibile omettere la bandiera --patch, ma non sarà possibile vedere ogni cambiamento e controllare processi patching.

+2

hai letto anche la mia domanda? –

+0

OK, non l'ho capito esattamente per primo. Quindi, se non ci sono Git sul server remoto, l'unico modo è copiare i file binari modificati. Per quanto ne so, 'patch' non supporta le differenze binarie. – Zebooka

+0

sì, la patch standard non supporta i binari diff, ma git diff può generare patch binari. Vorrei applicarli senza git installato sul server remoto. –

2

Secondo the change log, possiamo aspettarci versioni di patch> 2.6.1 per supportare le differenze binarie GIT.

+0

patch 2.7.5 ancora non sul mio sistema :( –

+0

Il Changelog su http://git.savannah.gnu.org/cgit/patch.git/tree/NEWS non sembra menzionare questo neanche ... –