2010-10-26 2 views
5

Nella mia squadra, alcuni ci aiutano a vicenda con l'unione. I.e. il mio codice è unito a trunk da qualcun altro. Sembra che le informazioni dell'autore non siano completamente conservate durante l'unione. Quando annoto (colpa) la fusione viene mostrata come autore.SVN - Un'unione conserva l'autore in modo che la colpa sia corretta?

La fusione ha fatto qualcosa di sbagliato o l'autore originale non è stato conservato in un'unione?

risposta

10

Se il server non unire il monitoraggio e gli strumenti client sono la versione 1.5 o successiva, questo funzionerà:

svn blame --use-merge-history TARGET 
+4

Oppure 'svn blame -g TARGET' (più breve) –

1

Un'unione si presenta come il checkout di un trunk, ha apportato un carico di modifiche tutte in una volta e quindi reimpegnato. Chiunque abbia eseguito il commit finale dopo l'unione verrà visualizzato come autore. Se stai aiutando le persone con l'unione, assicurati che lo facciano con il nome utente della persona a cui desideri attribuire.

Detto questo, se qualcuno fa un errore nell'unione, allora vuoi il nome della persona che "ha aiutato" con l'unione se fosse stato lui a farlo, sicuramente?

+0

L'opzione '--username' a' svn commit' può essere utilizzato per commettere un altro utente . –

0

Non sono sicuro al 100%, ma penso che la risposta sarebbe: Sì e No ... Annotazione AFAIK mostrerà solo l'autore che ha apportato la modifica più recente a quella riga di codice. Questo, nel tuo caso, sarebbe la persona che ha fatto l'unione. Se è necessario andare oltre, è necessario dare la colpa alla versione prima dell'unione.

1

L'unica informazione sul server SVN è l'autore del commit. Questo è ciò che la colpa/annotazione utilizzerà.

Quindi no, l'autore non viene conservato durante questo tipo di unione. Richiederebbe MOLTE più informazioni rispetto agli handle SVN.

0

Un'unione potrebbe modificare la proprietà svn:mergeinfo. In questo caso, gli autori dei commit originali di ogni unione possono essere rilevati indirettamente.

Ma questo è solo un cerotto - se si vuole vero autore di monitoraggio attraverso le unioni, potrebbe essere necessario passare ad uno strumento strumento progettato per lo sviluppo distribuito: qualcosa di simile git, hg, o addirittura darcs.

1

A mio parere l'approccio che l'unione non ha fatto l'autore originale è sbagliato ... ma questa è una storia diversa.

In Subverison ogni commit è associato a un autore. Un'unione può essere eseguita solo in una copia di lavoro che appartiene a un particolare autore. A mio parere, le informazioni in SVN sono corrette, perché il tizio che ha fuso il codice è "responsabile" per l'unione ... quindi la relazione con il suo nome è corretta.

+1

Credo che esistano scenari validi per questo approccio. Ad esempio, abbiamo diversi apprendisti nella nostra azienda e lavorano in diversi settori della stessa app. Sicuramente non voglio che facciano fusioni incustodite alle applicazioni che alla fine andranno a vivere. Voglio rivedere prima le loro modifiche e infine fare l'unione. Mi assumo comunque la responsabilità della fusione poiché sono comunque il proprietario del progetto. Inoltre troverai il mio nome nella cronologia SVN come commutatore di missioni. Ma ancora, potrei voler sapere quale linea è stata presa, senza il mio nome che si frappone. –