Come può il mio client applicare la patch creata da git diffsenza git installato? Ho provato ad usare il patchcomando ma chiede sempre il nome del file da patchare.
patchnon supporta completamente questo formato.
Come può il mio client applicare la patch creata da git diffsenza git installato? Ho provato ad usare il patchcomando ma chiede sempre il nome del file da patchare.
patchnon 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 patchfilese è necessario gestire l'aggiunta, l'eliminazione e la ridenominazione dei file.
EDIT dicembre 2015
Le ultime versioni del patchcomando (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, patchnon è necessario utilizzare gitper poter applicare il suo diff come patch.
git diff > patchfile, mapatch -p1 < patchfile
relativeopzione come:git diff --no-prefix --relative=my/relative/path > patchfile
patch -p1 < patchfilenon 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 < patchfileogit diff from_branch to_branch > patchfile; ...
Uso
git apply patchfile
se possibile.
patch -p1 < patchfile
ha un potenziale effetto collaterale.
git applygestisce anche l'aggiunta, l'eliminazione e la ridenominazione di file se sono descritti nel git diffformato, il che patchnon 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 --verbosesono 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.