git-svn: come posso creare un nuovo ramo svn tramite git?


193

Ho un repository git che tiene traccia di un repository svn. L'ho clonato usando --stdlayout.

Ho creato una nuova filiale locale tramite git checkout -b foobar

Ora voglio che questo ramo finisca nel …/branches/foobarrepository svn.

Come posso farlo?

(ha estratto un sacco di testo investigativo. vedi la cronologia delle domande se ti interessa)


Risposte:


280

So che questa domanda ha avuto risposta qualche tempo fa, ma dopo averla letta, potrei aiutare ad aggiungere esempi del comando specifico git svn branch e metterlo in relazione con un tipico flusso di lavoro.

Come kch ha risposto, usa git svn branch. Ecco un esempio completo, (notare che -nper la prova a secco da testare):

git svn branch -n  -m "Branch for authentication bug" auth_bug

Se va bene, il server risponde con una risposta come questa:

Copia di https://scm-server.com/svn/portal/trunk all'indirizzo r8914 su https://scm-server.com/svn/portal/branches/auth_bug ...

E senza lo -nswitch il server probabilmente aggiunge qualcosa come:

Trovato possibile punto di succursale: https://scm-server.com/svn/portal/trunk => https://scm-server.com/portal/branches/auth_bug , 8914

Parent branch trovato: (refs / remotes / auth_bug)

d731b1fa028d30d685fe260f5bb912cbf59e1971

Seguendo il genitore con do_switch

Parent seguito con successo r8915 = 6ed10c57afcec62e9077fbeed74a326eaa4863b8

(Refs / telecomandi / auth_bug)

La parte migliore di esso, ora puoi creare un ramo locale basato sul tuo ramo remoto in questo modo:

git checkout -b local/auth_bug auth_bug

Il che significa "estrarre e creare un ramo locale denominato auth_buge farlo seguire al ramo remoto (ultimo parametro)auth_bug

Verifica che il tuo ramo locale funzioni su quel ramo remoto usando dcommitcon --dry-run( -n):

git svn dcommit -n

E il server SVN dovrebbe rispondere con il nome della nuova filiale:

Impegnarsi a https://scm-server.com/svn/portal/branches/auth_bug ...


2
Sì, git co significa che Jesper ha creato un alias git.
Jason Axelson,

3
aggiornato e sostituito git cocon in git checkoutmodo che l'esempio possa funzionare per chiunque
Jesper Rønn-Jensen,

5
Ho già votato questa risposta, ma non so quante volte continuo a tornare. Grazie!
Ben Doerr,

35
C'è una parte complicata al git-svn branchcomando: devi essere online per creare un nuovo ramo in questo modo. È possibile effettuare le seguenti operazioni offline: 1. git checkout -b foobar2. hack-hack-hack 3 git commit -m "Done foobar".. E quando online spingi questo cambiamento facendo 1. git svn branch foobar2. git branch --set-upstream foobar remotes/foobar3 git svn dcommit..
vadishev,

2
Quindi sostituire il passaggio 2 con git checkout -b foobar-new remotes/foobar. 3. git checkout foobar4. git rebase foobar-new5. Per verificare per accertarsi che il ramo ora si impegni sul ramo svn. git svn dcommit --dry-run6. Finalmente git svn dcommitgit branch -D foobar-new
esegui

64

a partire da git v1.6.1, git svn branchè disponibile.

Dai documenti git:

    ramo
        Creare un ramo nel repository SVN.

        -m, --messaggio
            Permette di specificare il messaggio di commit.

        -t, --tag
            Crea un tag usando tags_subdir invece di rami_subdir
            specificato durante git svn init.

Le versioni precedenti di git non forniscono un modo per creare un ramo svn.


4

@kch Ho appena (7 dicembre 2008) compilato il tag v1.6.1-rc1 di git e contiene il comando branch git svn e la relativa documentazione. Quindi la versione v1.6.1 di git dovrebbe (si spera) contenere questo comando.


infatti, ho installato 1.6.1 ora e il comando è disponibile. aggiornato la mia risposta di conseguenza.
dal
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.