2010-11-03 2 views
5

Ogni volta che rinominare una cartella utilizzando ToroiseSVN e quindi eseguire un commit sulla cartella principale, diventa brutta. Di solito ottengo qualche strano conflitto tra alberi e errori su SVN .tmp file/cartelle non esistenti e altri messaggi oscuri che non ho mai visto prima. È piuttosto stressante considerare che la cartella viene eliminata e presumibilmente ricreata, e se viene semplicemente cancellata o mutilata in qualche modo orribile?TortoiseSVN, la cartella rinominare invariabilmente fallisce

È meglio eseguire la ridenominazione direttamente sul repository anziché nella copia di lavoro? Questi problemi sono normali?

+1

Sono completamente d'accordo. Mi sono tirato i capelli negli ultimi giorni a occuparmi di queste sciocchezze. – Jeff

risposta

0

Se il tuo repository è impostato correttamente, non dovresti avere questo tipo di problemi. Ma avere un sacco di file e cartelle temporanee come dici tu fai può causare questo tipo di problema.

La ridenominazione diretta nel repository probabilmente risolverà la maggior parte dei problemi, ma potrebbe comunque causare alcuni conflitti di unione difficili se i file temporanei sono stati modificati prima della ridenominazione.

Se possibile, prova a inserire qualsiasi cartella e file temporanei in una cartella principale che puoi aggiungere a svn: ignora e ti libererai di molti di questi problemi.

+0

Sono i file nascosti SVN a cui mi sto lamentando, non i miei file temporanei. –

+0

Puoi pubblicare gli errori che stai ricevendo e la struttura della tua cartella? –

+0

Gli errori descritti indicano il danneggiamento della copia di lavoro sul lato client. Il modo in cui il repository è impostato è irrilevante. –

2

Questi problemi sono normali?

No. Finché si passa attraverso il menu TortoiseSVN per spostare/rinominare le cose, tutto dovrebbe funzionare bene.

Esempi di cose cattive non si dovrebbe mai fare:

  • spostare/copia/rinomina/eliminazione di una cartella di versione nella copia di lavoro con explorer
  • cambiare il contenuto delle cartelle .svn
  • eliminazione. cartelle svn (utilizzare invece la funzione di esportazione)

Sono stato coinvolto nella formazione degli utenti che hanno migrato da VSS a SVN + TortoiseSVN. L'esperienza dimostra che anche dopo anni di utilizzo di TortoiseSVN, gli utenti continueranno a corrompere regolarmente le copie di lavoro effettuando una delle operazioni di cui sopra. Una volta danneggiato, è tipicamente impossibile riparare la copia di lavoro.

Fortunatamente SVN 1.7 (non ancora rilasciato) eliminerà un sacco di questa merda centralizzando i metadati in un'unica grande cartella .svn alla radice della copia di lavoro, come git e mercurial.

e gli errori sui file SVN tmp/cartelle non esistente

Si potrebbe utilizzare xcopy per manipolare copie di lavoro. Quando si usa xcopy per copiare una cartella, si ometteranno le cartelle vuote (a meno che non si usi lo switch /E).

Ciò causerà l'omissione delle cartelle .svn/tmp nella copia di lavoro, corrompendo in modo efficace la copia di lavoro.

+0

No, faccio clic con il pulsante destro del mouse su una sottodirectory e utilizzo l'opzione "rinominare" dell'estensione della shell TortoiseSVN. Tutto funziona, fino a quando non provo a impegnare la directory principale, come da istruzioni Tortoise –

+0

@John: la tua copia di lavoro potrebbe essere già stata danneggiata prima della ridenominazione. –

+0

Quando viene visualizzato _IS_ SVN 1.7? –

1

In generale, penso che la ridenominazione non sia una buona idea quando si lavora con SVN, solo perché è così facile fare casino. Può diventare particolarmente brutto se hai un gruppo di sviluppatori che lavora con lo stesso codice base e fai uso di rami.

Se non si è troppo interessati alla cronologia delle modifiche, suggerisco di creare manualmente una copia della cartella (ad esempio tramite Explorer non SVN), rinominandola (sempre tramite Esplora risorse), eliminare tutte le cartelle .svn al suo interno (quindi avere una cartella pulita senza riferimenti), quindi aggiungere SVN (e i file all'interno) al repository. Quindi solo SVN: elimina la vecchia cartella. Ovviamente questo non risolve il problema se qualcun altro sta modificando gli stessi file sorgente o sta usando un ramo, ma almeno ti costringe a pensare alle implicazioni di un rinominare.

+1

* Se non sei troppo interessato alla cronologia delle modifiche * :) – Groo

0

Non rinominare una cartella/file se si dispone di più di un ramo attivo. SVN non conserva i metadati necessari per affrontarli, quindi otterrai un conflitto di fusione. Neanche GIT. Bazaar sottolinea la ridenominazione come una ragione per passare al proprio sistema.

+0

La domanda è come 7 anni. La ridenominazione delle cartelle nel 2017 funziona principalmente come previsto. L'unica avvertenza è quella che hai menzionato (il porting delle modifiche tra i rami non riconosce le cartelle rinominate come lo stesso oggetto) anche se ci sono soluzioni alternative. In particolare, utilizzo la funzione "Ripara spostamento" in TortoiseSVN prima di eseguire il commit dell'unione in cui avviene la ridenominazione. –

+0

Sto usando SVN 1.8.5. Lo spostamento di riparazione causerà comunque un conflitto di unione se sono presenti modifiche a file in un ramo che sono stati rinominati nell'altro. Questo semplice esperimento sugli archivi vergini sia in SVN che in GIT. Di nuovo, questo è qualcosa che Bazaar si rivolge esplicitamente. – AbleArcher