2011-01-10 9 views
48

Sto usando git come frontend di Subversion (via git svn).Git: avviso: refname 'xxx' è ambiguo quando si utilizza git-svn

Quindi, per ogni trunk/ramo svn ho un ramo remoto in git chiamato "remotes/xxx". Ad esempio "telecomandi/trunk", "remotes/coolfeature".

Ora voglio avere un ramo "predefinito" locale per ogni ramo remoto, usarlo per dcommit. Il problema è che voglio tali succursali siano nomi di rami Subversion, come "tronco", "coolfeature", in modo da avere le seguenti filiali in git:

trunk 
coolfeature 
remotes/trunk 
remotes/coolfeature 

Il problema è che ogni volta che mi riferisco "tronco "o" coolfeature "git lamenta il nome del ramo è ambiguo. Non è un grosso problema, ma mi sento a disagio.

La domanda è: come posso gestire questo avviso, partendo dal presupposto che la semplice ridenominazione dei rami non è ciò che voglio fare. Quali sono le migliori pratiche per questi casi?

+3

non sono sicuro. Ho evitato questo semplicemente scegliendo nomi diversi ma simili. Tuttavia, potresti provare a usare "refs/heads/trunk" o forse anche "heads/trunk". Penso che dovrebbe funzionare. – MatrixFrog

risposta

40

Se si passa il flag --prefix=svn/ al comando git svn clone, tutti i rami di Subversion saranno denominati come remotes/svn/branchname. Se questo è accettabile, corregge l'avviso "refname is ambiguous". Vi dà anche un bel modo di fare riferimento ai rami svn remoto, come in per esempio se si desidera creare un ramo di monitoraggio locale, che sarebbe qualcosa di simile:

$ git checkout -b branchname svn/branchname

La sezione locale ha quindi la stessa nome come il ramo svn remoto e nessun problema di refname ambiguo.

+19

Come posso riparare un repository che ho già clonato per avere '--prefix = svn /'? –

+0

Ho appena clonato in una nuova directory e poi ho recuperato i rami locali che avevo dall'altra directory: git fetch ../other_dir branch_name: branch_name --- Il completamento della tabulazione è ottimo anche per i nomi dei rami. – EnigmaCurry

+1

Se hai già creato un ramo con lo stesso nome, puoi rinominare il tuo ramo con questo comando: git branch -m [currentName] [newName] – MikeD

13

Se si desidera solo per sbarazzarsi di avvertimento, impostare core.warnAmbiguousRefs a false:

git config --global core.warnambiguousrefs false 

Se si desidera che questo comportamento solo per singolo repository, omettere --global bandiera.

+0

Probabilmente ho violato tutte le regole conosciute/sconosciute qui, ma ho provato "git tag -a HEAD -m 'Start of repo'" su un nuovo repository, dopo il quale ho ricevuto il messaggio di errore OPs. La correzione descritta in questo post mi ha permesso di continuare a lavorare. – bakoyaro

1

È possibile che si disponga di un altro "trunk" e "coolfeature" come tag. In questo caso, git non sa se fai riferimento a branch o tag. Rinominare i tag e verificare se git non riporta "ambiguo" nome

+0

Questo non è il mio caso. '.git/refs /' contiene nomi non ambigui. Non ho tag. Cosa sta causando il git a lamentarsi al primo posto? –

0

Per evitare i messaggi di conflitto, quando si parla di sedi locali, li prefisso con head/

per esempio, il ramo in conflitto topic

$ git diff topic remotes/topic 
warning: reframe 'topic' is ambiguous. 
... 

diventa

$ git diff heads/topic remotes/topic 
... 
Problemi correlati