Come può il mio client applicare la patch creata da git diff
senza git installato? Ho provato ad usare il patch
comando ma chiede sempre il nome del file da patchare.
patch
non supporta completamente questo formato.
Come può il mio client applicare la patch creata da git diff
senza git installato? Ho provato ad usare il patch
comando ma chiede sempre il nome del file da patchare.
patch
non supporta completamente questo formato.
Risposte:
git diff > patchfile
e
patch -p1 < patchfile
funziona ma come molte persone hanno notato nei commenti e in altre risposte la patch non comprende aggiunte, eliminazioni e rinominazioni. Non esiste alcuna opzione, ma git apply patchfile
se è necessario gestire l'aggiunta, l'eliminazione e la ridenominazione dei file.
EDIT dicembre 2015
Le ultime versioni del patch
comando (2.7, rilasciate a settembre 2012) supportano la maggior parte delle funzionalità del formato "diff --git", inclusi i nomi e le copie, le modifiche alle autorizzazioni e le differenze di collegamento simbolico (ma non le differenze binarie) ( annuncio di rilascio ).
Quindi, a condizione che si usi la versione attuale / più recente, patch
non è necessario utilizzare git
per poter applicare il suo diff come patch.
git diff > patchfile
, mapatch -p1 < patchfile
relative
opzione come:git diff --no-prefix --relative=my/relative/path > patchfile
patch -p1 < patchfile
non richiede l'installazione di git. Il primo comando mostra il comando per generare diff, non applicarlo.
git diff from_branch > patchfile; git checkout from_branch; git patch -p1 < patchfile
ogit diff from_branch to_branch > patchfile; ...
Uso
git apply patchfile
se possibile.
patch -p1 < patchfile
ha un potenziale effetto collaterale.
git apply
gestisce anche l'aggiunta, l'eliminazione e la ridenominazione di file se sono descritti nel git diff
formato, il che patch
non funziona. Infine, git apply
è un modello "applica tutto o annulla tutto" in cui tutto è applicato o nulla è, mentre patch può applicare parzialmente i file patch, lasciando la directory di lavoro in uno stato strano.
git apply
è il modo migliore per farlo, ma questa domanda chiede specificamente come applicare la patch senza Git installato .
--dry-run --verbose
sono utili per determinare quali saranno gli effetti collaterali, se presenti. (usando la patch v2.5.8)
git apply patchfile -
... l'unica risposta sana di mente ..." - è quasi ridicolo. Ogni volta che gli sviluppatori OpenSSL mi inviano una patch per il test, Git non riesce ad applicarla. Questo è ogni volta. Devo ancora vedere che quello stupido strumento applica una patch.
Io uso
patch -p1 --merge < patchfile
In questo modo, i conflitti possono essere risolti come al solito.