Quali sono le differenze tra commit e patching?

6

Sono abbastanza nuovo rispetto al controllo del codice sorgente e vorrei conoscere le differenze tra il commit e il patching? Inoltre, come / quando viene utilizzata una patch e può essere utilizzata su un'applicazione web?

    
posta eugenewcf 05.03.2012 - 16:17
fonte

3 risposte

4

Non sono sicuro di git / mercurial, ma ecco cosa penso in base a ciò che so di CVS, dato che ho usato solo le patch, anche se sono abbastanza sicuro che funzioni / sia usato allo stesso modo .

Quando "esegui il commit", sostituisci in modo efficace la versione remota del file con quella sul tuo repository locale. Quello che commetti è in effetti una "patch".

A patch is a file containing the set of differences between two version of one or more files.

L'applicazione di patch è quando si riceve una patch da qualcun altro (ad esempio, per e-mail, ad esempio), per poter unire la versione locale con la versione della persona che ha inviato la patch, pur non unendosi con la versione su il repository remoto. Ciò accade spesso perché la persona che ha fornito la patch non ha autorizzazioni di scrittura nel repository.

In pratica, una persona può creare una patch contenente l'insieme di differenze di uno o più file tra due versioni. E un'altra persona può applicare la patch alla propria versione e quindi commettere la patch al repository.

Per quanto riguarda il motivo per cui viene utilizzato, lo scenario che ho descritto sopra quando una persona non ha accesso è valido. Un altro uso è che puoi dare / commettere patch se non vuoi impegnare tutte le modifiche che hai apportato. Ad esempio, hai apportato tre modifiche a un file, ma l'ultima modifica è un codice di debug che non è destinato a essere eseguito, quindi crei una patch, rimuovi l'ultima modifica dal file di patch e la patch è pronta per essere inviato / commesso.

Infine, come per la tua ultima domanda, può essere utilizzato per qualsiasi tipo di applicazione in cui il codice è memorizzato in un repository.

Modifica: un esempio concreto: puoi inviare una patch per riparare un progetto Github in cui non hai accesso in scrittura.

    
risposta data 05.03.2012 - 16:25
fonte
7

La patch può essere applicata ovunque: su una copia di lavoro o su un repository. È solo un formato file che elenca le modifiche necessarie per portare il codice da uno stato all'altro. Il controllo della versione non deve essere coinvolto.

Un commit salva una serie di modifiche al codice (simile a ciò che una patch fa riferimento) al repository del codice sorgente (ad esempio Mercurial / Git repo). Da lì, ogni volta che qualcuno controlla l'ultimo codice includerà quel commit.

    
risposta data 05.03.2012 - 16:37
fonte
5

Posso capire la tua confusione, le due parole sono strettamente correlate. C'è un glossario per Mercurial che dice:

  • Patch (noun) The product of a diff operation.

    Example: "I've sent you my patch."

  • Patch (verb) The process of using a patch file to transform one changeset into another.

    Example: "You will need to patch that revision.

  • Commit (noun) A synonym for changeset.

    Example: "Is the bug fixed in your recent commit?"

  • Commit (verb) The act of recording changes to a repository. When files are committed in a working directory, Mercurial finds the differences between the committed files and their parent changeset, creating a new changeset in the repository.

    Example: "You should commit those changes now."

Quindi, per elaborare un po ': una patch è una descrizione delle modifiche tra due versioni / changeset. Ottieni questa descrizione con hg diff e assomiglia a questo:

diff --git a/x b/x
--- a/x
+++ b/x
@@ -1,3 +1,3 @@
 a
-old line
+new line
 b

La patch è in formato diff unificato . Questo è un formato leggibile dalla macchina così Mercurial può applicare una patch per apportare le stesse modifiche da qualche altra parte - Mercurial può usare la patch per patch il tuo codice.

Quando hai apportato modifiche ai tuoi file, puoi impegnare le modifiche con hg commit . Questo crea un nuovo changeset (che è anche conosciuto come commit). Come puoi vedere dal glossario, un changeset registra le differenze tra i file committed e il changeset genitore - questa è una patch. Quindi un changeset avrà una patch all'interno, oltre ad altre informazioni come il nome del committer, la data e il messaggio.

Una patch è spesso usata quando devi discutere del codice con un collega. Puoi mandargli una patch in una email e lui può controllarla. Puoi anche usare una patch se vuoi modificare un file con il commit della modifica: per un'applicazione web, potresti avere una patch con le personalizzazioni locali. Quando si ottiene una nuova versione dell'app, rimuovere prima la patch, aggiornare l'app e quindi riapplicare la patch. In questo modo puoi mantenere le tue personalizzazioni come patch sulla parte superiore del codice sorgente originale.

    
risposta data 06.03.2012 - 11:31
fonte

Leggi altre domande sui tag