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 é:
- Tentare il checkin (già fatto a questo punto) in modo tale che il conflitto venga rilevato
- 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:
- creare un differente Workspace
- Estrarre Added.txt sul nuovo Workspace
- Effettuare il copia incolla del contenuto da AddedOLD.txt a Added.txt
- 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)!!!