Qual è la ragione per la /a /b prefissi di git diff

Sto usando git per alcuni anni ora e sempre chiesta perché git diff prefissi i nomi dei file modificati con a/e b/. Mi aspettavo che alla fine si imbattono in un caso in cui è utile, ma fino ad ora è stato sempre fastidioso e non è mai utile.

Che cosa è bene? Perché questo è attivata per impostazione predefinita? In quali situazioni è utile?

InformationsquelleAutor mkl | 2011-07-20



5 Replies
  1. 46

    Come accennato in diff pagina man, un/et b/rappresentano il prefisso per differenziare di origine e di destinazione.

    In realtà, sono disponibili le opzioni:

    --no-prefix
    

    Non mostrano di origine o di destinazione prefisso.

    --src-prefix=<prefix>
    

    Mostra il dato di origine prefisso invece di “a/”.

    --dst-prefix=<prefix>
    

    Mostra il dato di destinazione prefisso invece di “b/”

    • Grazie, noi stavamo scrivendo quasi nello stesso tempo in ogni caso. Nota: comments.gmane.org/gmane.comp.version-control.git/175850 cita che il percorso prefissi di diff macchinari utilizzati dalle programmati per “a/” per l’origine prefisso e “b/” per la destinazione prefisso.
    • diff OS X –no-prefisso non funziona
    • che versione di Git si sta utilizzando sul vostro OS X?
    • mi piace come male le impostazioni predefinite per tutto su git sono. a e b per origine e destinazione… come è chiaro? comunque, è anche possibile disattivare per bene con git config --global diff.noprefix true
    • C’è un modo per disattivare il prefisso indicato da git add --patch?
    • No certo: la diff.noprefix config aiutare? (git-scm.com/docs/git-config#git-config-diffnoprefix)
    • che non influisce git add --patch.

  2. 28

    Se non lo trovi utile, si può spegnere con:

    git config --global diff.noprefix true
    
    • Ma nessuna proprietà per impostare in modo permanente per qualcosa di significativo?
    • Sarebbe bello se ci fosse un opzione simile per le differenze nell’utilizzo di git add --patch. Mi piace dbl-fare clic su questi nomi per un rapido incollare in konsole, ma è fastidioso avere sempre a tagliare questo stupido, inutile prefisso.
  3. 15

    Queste directory prefissi ci sono, fondamentalmente, per la compatibilità e scelto come impostazioni predefinite. Segue la spiegazione.

    Prima di git

    Prima di git (e altri VCS), il flusso di lavoro per creare una patch per più file potrebbe essere stato, per esempio, il seguente:

    • Diciamo che hanno un codice sorgente di un progetto asdf in una directory asdf-source.latest.
    • Si copia la directory in una nuova directory (ad esempio,asdf-source.new, idealmente hard-linking i file all’interno).
    • Ora è possibile effettuare tutte le modifiche in asdf-source.new, provare a compilare il codice, test, etc.
    • Dopo aver finito, si crea una patch utilizzando, ad esempio,diff -r asdf-source.latest asdf-source.new >new_feature.patch. L’uscita evoluto nel tempo. Tra le altre cose, git utilizza un “unificata” in uscita per impostazione predefinita, che può essere acquisita utilizzando diff -u parametro.

    Ora si può vedere la patch ha percorsi per i file modificati utilizzando i nomi di directory.

    La persona (o script di build, e così via), applicando una patch, quindi, utilizza patch invece di utilizzare git apply o git am. In ordine per il comando a trovare un file, il nome della directory deve essere rimosso dal percorso, utilizzando patch -pN opzione (N indica il numero di nomi di directory e separatori per rimuovere). Nel caso di cui sopra, il comando potrebbe essere patch -p1 <new_feature.patch. Questo rende possibile per la patch creatore di utilizzare la sua/il suo proprio i nomi delle directory.

    Se mai incontrare uno script patch di qualche progetto che utilizza un sacco di patch (di solito utilizzato per trasferito nuovamente patch per stabile versioni dei pacchetti in distribuzioni Linux per esempio), le patch possono variare nel formato.
    Il patch di comando è in grado di individuare i formati correttamente, ma è un po ‘ più difficile con i percorsi (come molte directory di rimuovere).
    Alcuni problemi:

    • Costringendo gli sviluppatori a utilizzare 0 directory non è molto bello.
    • Avere patch cercare il file potrebbe essere pericoloso (come è possibile trovare un file diverso).

    In modo da avere a tutti di inviare patch che possono essere applicati con patch -p1 sembra il modo più logico prendere.

    Torna a git

    Quando git è stato creato, con l’adozione di valori predefiniti (che sono compatibili con la maggior parte del progetto linee guida per la presentazione, principalmente kernel) per tali opzioni. Grazie a questo si è in grado di utilizzare git e inviare correttamente formattata patch a qualcuno che utilizza patch applicare e viceversa (git è in grado di gestire diffcreato patch così). Avendo “a” e “b” come prefissi, in particolare, consente di risparmiare spazio (e una piccola percentuale di larghezza di banda), pur mantenendo tutto il lavoro.

    È possibile impostare git config diff.mnemonicprefix true in ordine per git per l’uso di prefissi diversi a seconda di cosa si sta confrontando (vedi git help config per ulteriori dettagli).

    • Con git vostro reclamo /”, Costringendo gli sviluppatori a utilizzare 0 directory non è molto bello”/ non ha senso. Non c’è un vs. b. /”Avendo patch cercare il file potrebbe essere pericoloso (come è possibile trovare diversi file)”/ fa alcun senso dal momento che non vi è alcuna vecchia dir e dir. b. -p0 è la patch di default. Con -p1 dovrete digitare più. Così diff.noprefix true è un significativo default.
    • Dicendo “Costringendo gli sviluppatori a utilizzare 0 directories”, voglio dire che il caso d’uso ha spiegato all’inizio della sezione. Mi è stato più facile avere in 2 e directory di output di default sarebbe poi applicato con -p1. Circa la “ricerca di un file diverso”, che naturalmente non è facile, ma avere -p0 non elimina nulla, il che significa che i percorsi completi (ad esempio /etc/hosts) saranno conservati e trattati come tali. Questo è, naturalmente, trattati in corrente patch di attuazione.
    • Secondo la pagina di man di patch(1) versione 2.7.1, il default non è -p0. Non utilizzando -p (o --strip) opzione rimuoverà tutti i nomi di directory, quindi, con /u/howard/src/blurfl/blurfl.c “non specificando -p, a tutti dà solo blurfl.c.”
    • Hai ragione. -p0 è richiesto. Mi dispiace. Con diff.noprefix true è anche molto più semplice copia&incolla il file.
  4. 6

    È di differenziare di origine e di destinazione. Si può anche cambiare per essere più significativo:

    –src-prefix=<prefix>

    Show the given source prefix instead of "a/".
    

    –dst-prefix=<prefix>

    Show the given destination prefix instead of "b/".
    

    http://git-scm.com/docs/git-diff

    • Stessa risposta di mio 😉
    • voi ragazzi creato quasi la stessa risposta 1min a parte!
  5. 4

    Se si desidera aggiungere git diff --no-prefix al tuo .gitconfig manualmente, basta aggiungere la seguente:

    [diff]
    noprefix = true
    
    • Questo funziona per hg così.

Lascia un commento