Fusionar eliminaciones en una fusión sin fundamento de Team Foundation Server

Tengo dos sucursales de TFS que no tienen una relación padre / hijo directa en TFS. En una determinada revisión, 94 en mi ejemplo, se eliminaron varios elementos. Me han encomendado la tarea de aplicar esas eliminaciones a la twig principal. Me gustaría hacerlo a través de una fusión sin fundamento. Intenté con el siguiente command para hacerlo:

tf merge /baseless /recursive /version:94 .\programs\program1 ..\Release\programs\program1 

La mayoría de los elementos en el tree se marcaron como "fusionar", y algunos se marcaron como "editar fusión". Sin embargo, ninguno de los elementos se eliminó en el destino. Por un capricho intenté fusionarme sobre una sola eliminación como esta:

 tf merge /baseless /recursive /version:94 .\programs\program1\source1.cs ..\Release\programs\program1\source1.cs 

Recibí el siguiente post de error:

 The item [TFS_PATH] does not exist at the specified version. 

¿Cómo hago esto? ¿Hay alguna manera de evitar hacer todas esas eliminaciones yo mismo?

Experimenté un poco y aquí está mi versión de lo anterior. Parece funcionar para mi:

 get-tfsChangeset xx |% {$_.changes} |? {($_.changetype -band $tfs.VCS_ChangeType::delete) -ne 0 } |% {$_.item.serverItem -replace "\$/branch1","$/branch2"} | Add-TfsPendingChange -delete 

para hacerlo aún más útil, uno puede parametrizar el número de set de cambios y las routes de bifurcación para permitir un procesamiento más conveniente.

por ejemplo, para procesar todas las eliminaciones en una twig determinada, ejecútelo desde la location de origen:

 $sourcePath="\$/MySourcePath" $destPath="$/MydestPath" Get-TfsItemHistory ./*.sql -r -IncludeItems | %{$_.changes} | ? {($_.changetype -band $tfs.VCS_ChangeType::delete) -ne 0 } | % {$_.item.serverItem -replace $sourcePath,$destPath} | Add-TfsPendingChange -delete 

No, lo siento, no se puede hacer. La fusión sin base es muy tonta, ya que asciende a poco más que "tomar el contenido de una carpeta y copyrla en otro lugar". Como el nombre Baseless implica, no hay información histórica con la cual hacer una diferencia. En la práctica, eso significa que los contenidos de los files se propagan pero no los cambios en el espacio de nombres (elimina, resta, cambia el nombre). Puede diferir el contenido del file haciendo coincidir nombres de files similares y cruzando los dedos, pero diferir el espacio de nombres realmente requiere saber cómo era la estructura del tree la última vez que se sincronizaron las twigs, por lo que TFS ni siquiera se molesta.

Dicho esto, si conoce el set de cambios # donde se realizaron las eliminaciones deseadas, la creación de scripts de las eliminaciones por sí mismo no es un problema.

 $tfs = Get-TfsServer -path . -all $deletes = get-tfschangeset 94 | % { $_.changes } | ? { ($_.changetype -band $tfs.VCS_ChangeType::delete) -ne 0 } | % { $_.serveritem } ($deletes -replace "$/branch1" "$/branch2") | Add-TfsPendingChange -delete 

[no probado pero debería funcionar]

La documentation de Patrones y prácticas implica que debe resolver los conflictos de fusión usted mismo, una vez. (Advertencia: no he probado esto)

EDIT: PS Vea también La mañana después de una fusión sin base TFS .