2012-07-06 1 views
7

mentre facendo git svn clone -s https://svn.example.com/repo/ ho ricevuto il seguente output:git-svn clone non riesce "fatale: Non un nome di oggetto valido"

r3073 = a6132f3a937b632015e66d694250da9f606b8333 (refs/remotes/trunk) 
Found possible branch point: https://svn.example.com/repo/trunk => https://svn.example.com/repo/branches/v1.3, 3073 
W: Refspec glob conflict (ref: refs/remotes/trunk): 
expected path: repo/branches/trunk 
    real path: repo/trunk 
Continuing ahead with repo/trunk 
W: Refspec glob conflict (ref: refs/remotes/trunk): 
expected path: repo/branches/trunk 
    real path: repo/trunk 
Continuing ahead with repo/trunk 
W: Refspec glob conflict (ref: refs/remotes/trunk): 
expected path: repo/branches/trunk 
    real path: repo/trunk 
Continuing ahead with repo/trunk 
W: Refspec glob conflict (ref: refs/remotes/trunk): 
expected path: repo/branches/trunk 
    real path: repo/trunk 
Continuing ahead with repo/trunk 
fatal: Not a valid object name refs/remotes/tags/Sync Controllers 
cat-file commit refs/remotes/tags/Sync Controllers: command returned error: 128 

Esecuzione git branch -a dà:

remotes/tags/Sync%20Controllers 
remotes/tags/v1.1 
remotes/trunk 
remotes/v1.2 

Credo che il problema è che "telecomandi/tag/controller di sincronizzazione"! = "telecomandi/tag/sincronizzazione% 20Controllori".

+0

Vedi pure: https://bugs.launchpad.net/ubuntu/+source/git/+bug/786942 – kenorb

+0

correlati: http://stackoverflow.com/questions/7584605/git-svn-dcommit- fail-because-the-repository-name-contains-a-space È disponibile una patch. – kenorb

risposta

12

Il tag su SVN ha uno spazio al suo interno, ma il tag in git ha convertito questo spazio in %20 (URL codificato). Per risolverlo è sufficiente aggiungere manualmente una nuova variabile con il nome testualmente:

cd .git/refs/remotes/tags/ 
mv Sync%20Controllers Sync\ Controllers 

quindi eseguire di nuovo il comando git svn clone.

(normalmente faresti questo con git tag OLDTAG NEWTAG ma git non era che mi permette di definire un tag con uno spazio. I file di tag sono semplici file di testo contenenti l'hash del relativo commit.)

+2

Tuttavia, ho provato questa soluzione, ho ricevuto il seguente errore: 'fatale: il riferimento ha un formato non valido: 'refs/remotes/tags/WITH SPACE''. Come risolverlo? –

+0

(Sto usando git versione 1.8.3.msysgit.0) –

+0

Questo ha funzionato anche con un tag con un carattere '~' nel nome del file. Grazie. – Flimzy

3

È possibile utilizzare l'alternativa lato server git-svn, SubGit per evitare molti problemi di traduzione di git-svn.

Sono uno sviluppatore di SubGit e potrei dire che abbiamo lavorato molto per risolvere problemi di traduzione di caratteri come quello sopra; in questo caso specifico il tag verrebbe tradotto in un tag refs/tags/Sync+Controllers.

Nota anche che git-svn ha tradotto il tag Subversion come un ramo anziché come un tag.

+0

Devo installare SubGit sul server o non è necessario? Cosa succede se non ho accesso amministratore al mio repository SVN? – kenorb

+0

Con SubGit 2.0 non è necessario avere un accesso amministratore al proprio repository. Dovresti abilitare il hook pre-rev-change-change per ottenere una mappatura completa degli autori, ma è probabile che sia già abilitato. Controlla http://subgit.com/eap/ per maggiori dettagli. –

0

Credo che il problema con gli spazi sia corretto in Git> = 1.8.0 (vedere: #786942).

Quindi è necessario aggiornarlo.

L'ho provato e sembra funzionare nella versione recente di git.

Vedere GitHub Home page: https://github.com/git/git

+3

Sto usando 1.8.5.2 e mi sono imbattuto in questo problema – krinker

+0

E pensi che sia correlato agli spazi o ad alcuni caratteri speciali nei nomi di branch/tag, ecc.? – kenorb

+0

Ho visto questo problema anche con git = 1.8.3.1, svn = 1.7.14 e svn2git = 2.3.2 relativo agli spazi nei nomi di rami SVN. – jplandrain

1

mi sono imbattuto in questo problema oggi, e considerato questo ramo che contiene un passo in esso non è importante, ho appena eseguito

git branch -r -d partialPayment%202.4 

e rieseguire git svn fetch Ha saltato il ramo corrente e continua ad afferrare il prossimo.