Domanda

problema

Come si crea una copia con git-svn da un repository Subversion, ad esempio, come si fa a tirare solo le ultime tre revisioni?

Il comando git clone può ottenere gli ultimi n revisioni da un repository Git, se si utilizza l'opzione --depth, cioè si ottiene una copia del repository. Esempio:

git clone --depth 3 git://some/repo myshallowcopyrepo

C'è un'opzione simile per git-svn?

Le mie scoperte finora

Finora ho trovato solo l'opzione -rN dove N è la revisione di tirare. Esempio:

git svn clone -rN svn://some/repo

Secondo la documentazione v'è la possibilità di utilizzare -r$REVNUMBER:HEAD. Ho provato quanto segue per ottenere gli ultimi 3 revisioni che hanno restituito un messaggio di errore.

$ git svn clone --prefix=svn/ -s -rHEAD~3:HEAD http://some/svn/repo .
revision argument: HEAD~3:HEAD not understood by git-svn

Così ho sostituito HEAD~3 con il numero effettivo della terza, ma ultima revisione 534. Che ha funzionato, ma che mi richiede prima capire il numero di revisione del terzo, ma dell'ultimo commit.

$ git svn clone --prefix=svn/ -s -r534:HEAD http://some/svn/repo .

Documentazione

git-clone

git-svn

È stato utile?

Soluzione

Hai già scoperto il modo più semplice per specificare un clone superficiale in Git-SVN, specificando il numero di revisione SVN che si desidera avviare il clone a (-r$REV:HEAD).

Ad esempio: git svn clone -s -r1450:HEAD some/svn/repo

struttura di dati di Git è basata su puntatori in un grafo orientato aciclico (DAG), che lo rende banale tornare a piedi n impegna. Ma in SVN (e quindi in Git-SVN) si dovrà trovare il numero di revisione da soli.

Altri suggerimenti

mi ritrovo con la seguente spesso per ottenere un numero limitato di revisioni fuori del nostro enorme albero di eversione (stiamo raggiungendo presto svn revisione 35000).

# checkout a specific revision
git svn clone -r N svn://some/repo/branch/some-branch
# enter it and get all commits since revision 'N'
cd some-branch
git svn rebase

E un buon modo per scoprire dove un ramo iniziare è quello di fare un svn log e trovare il primo sul ramo (l'ultimo elencato quando si fa):

svn log --stop-on-copy svn://some/repo/branch/some-branch

Finora non ho davvero trovato la seccatura vale la pena nel monitoraggio di tutte le filiali. Ci vuole troppo tempo per clonare e svn e git non funzionano insieme come bene come vorrei. Io tendo a creare file di patch e applicarle sul clone git di un altro ramo svn.

... 7 anni più tardi, nel deserto, a colpi di Tumbleweed ...

Non ero soddisfatto della risposta accettata così ho creato alcuni script per fare questo per voi disponibili su Github . Questi dovrebbero aiutare tutti coloro che vogliono usare git svn clone ma non vuole clonare l'intero repository e non vuole andare a caccia di una revisione specifica per clonare da nel mezzo della storia (forse si sta clonando un mazzo di pronti contro termine) . Qui possiamo solo clonare gli ultimi N revisioni:

Usa git svn clone per clonare le 50 revisioni

# -u    The SVN URL to clone
# -l    The limit of revisions
# -o    The output directory

./git-svn-cloneback.sh -u https://server/project/trunk -l 50 -o myproj --authors-file=svn-authors.txt

Trova la precedente revisione N da un repo SVN

# -u    The SVN URL to clone
# -l    The limit of revisions

./svn-lookback.sh -u https://server/project/trunk -l 5     
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top