2010-05-07 1 views
13

Ho un repository in cui "master" sta andando in una certa direzione, e un secondo ramo "foo" sarà divergente per un paio di commit, quindi tracciare tutte le successive modifiche a "master". Questo è tutto per scelta, naturalmente.Subversion ha --record-only per unioni, come faccio a fare lo stesso in Git?

In Subversion è possibile eseguire un'unione solo -regec per contrassegnare le cose come "l'unione è avvenuta" anche se non sono state apportate modifiche effettive. cioè questo modifica i numeri di tracciamento unione nelle proprietà allegate alle directory nel ramo di destinazione.

ho avuto un gioco con ..

git merge --no-commit maestro

.. come qualcosa che possa essere in grado di sperimentare con prima di fare l'impegno, ma sta facendo un casino del ramo di destinazione per parte della modifica in questione (rinomina seguita da eliminazione).

Ci deve essere un modo più semplice ..?

  • Paul

risposta

12

E 'questo quello che stai cercando?

git merge --strategy=ours master 

nostra

Questo risolve qualsiasi numero di teste, ma l'albero risultante della fusione è sempre quella della testa ramo corrente, ignorando in modo efficace tutte le modifiche da tutte le altre branche. È pensato per essere utilizzato per sostituire la vecchia cronologia di sviluppo dei rami laterali.

Questo sembra essere quello che stai chiedendo - crea un merge commit che in realtà non introduce alcuna modifica.

Ma vuoi davvero farlo? C'è qualche ragione per cui non puoi semplicemente far divergere i rami (senza che si verifichi una fusione) e poi unirli più tardi?

+2

P.S. Giuro che questa è la terza volta che ho menzionato '--strategy = ours' nell'ultima settimana. Mi chiedo perché tutti debbano improvvisamente buttare via la storia ... – Cascabel

+0

Sto modificando un file di configurazione del database sul ramo, subito dopo il punto di diramazione, e non voglio unirmi al master. Risolti i bug successivi sul ramo, però, voglio unirmi al master. Ciò consentirà che, senza cherry-picking, la correzione commetta individualmente. –

+0

Mentre facevo quanto sopra, mi è venuto in mente che questa informazione del database appartiene davvero alle variabili di ambiente, come nell'app Twelve-Factor. –

0

Paul, git gestisce rinominare seguito da elimina con (relativamente a svn) facilità. Traccia il contenuto non il nome del file. In svn questo sarebbe doloroso, quali sono i tuoi problemi con git mentre lo fai?

0

jefromi l'ha inchiodato. Ecco la cosa reale: http://github.com/jbehave/jbehave-core/blob/master/examples/trader/src/main/java/org/jbehave/examples/trader/TraderStory.java (gioca con gli switch switch e guarda la riga 65).

Non si trattava tanto di "buttare via la storia", ma di più sull'uso di Git per gestire i cambiamenti divergenti da un'unica base. Per convincere la gente ad adottare JBehave (IMO), dobbiamo rendere gli esempi davvero facili da seguire. Prima di questo esempio di 'Trader' c'erano JBehave vanilla + una variante di Guice + una variante di SpringFramework + una variante di PicoContainer tutti nella stessa directory di origine. Ora, quattro rami possono illustrare le rappresentazioni più canoniche dell'esempio 'Trader'.

+0

Spiacente, ma il collegamento è rotto –