[TFS] Filename Collision

Le filename collision sono uno dei pochi casi in cui non é possibile risolvere un conflitto mediante la GUI di Team Explorer.

Innanzittutto come si formano. Il caso tipico é quello in cui si parte da una cartella (Baseline)

Si fa una Branch e successivamente si aggiunge in entrambe le cartelle un file (anche identico) con lo stesso nome:

Nel momento in cui tenterete di effettuare un Merge (in questo caso faccio da Branch a Baseline, ma vale ovviamente anche l'inverso):

e successivamente il checkin, TFS vi segnalerà che c'é una "filename collision".

Perché avviene?

Il motivo é semplice: i due file non derivano da una "radice comune", infatti nascono separatamente. Quanto TFS tenta l'operazione di Merge cerca di aggiungere in Baseline il file che avete aggiunto a Branch. Siccome trova già un altro file si ferma. Le soluzioni proposte dalla UI sono: "Undo my local changes" (leggi: rinuncia a fare la merge per questo file) oppure "Ignore conflict" (rinuncia a fare il check-in per questo file.

Se quello che volete fare é copiare da Source Branch su Target Branch o gestire il Merging visuale dei file e quindi renderli nuovamente considerati come "un unico file presente in due rami di branch" la soluzione migliore é:

  1. Tentare il checkin (già fatto a questo punto) in modo tale che il conflitto venga rilevato
  2. Risolvere il conflitto da linea di comando con:
    tf resolve Added.txt /auto:AcceptYoursRenameTheirs /newname:AddedOLD.txt

Praticamente così facendo avete "copiato" da Branch a Baseline il file e rinominato il file esistente su Baseline in AddedOLD.txt. Se volete avere la gestione nel tool di merging di VS (premesso che abbiate abilitato il checkout multiplo sul Team Project) potete a questo punto:

  1. creare un differente Workspace
  2. Estrarre Added.txt sul nuovo Workspace
  3. Effettuare il copia incolla del contenuto da AddedOLD.txt a Added.txt
  4. Effettuare il checkin da entrambi i workspace

Unico problema: DOVETE FARLO A MANO UN FILE ALLA VOLTA (oppure scrivervi un programmino o un batch per Powershell per farlo)!!!

Print | posted on venerdì 7 marzo 2008 20:02

Comments have been closed on this topic.