tfs - una - Archivos enumerados como cambios pendientes al realizar fusiones que no cambiaron?
razones para fusionar una empresa (5)
Hemos tenido esto que suceder más de unas pocas veces si consideramos que es más que un golpe de suerte en este momento. Cuando nos volvemos a unir después de completar nuestra sucursal, hay mucho más cambios que los que deberían ser. Así que la mayoría de los archivos que muestran cambios pendientes nunca cambiaron (en la mayoría de los casos ni en la rama ni en la base). Cuando los comparo (uso más allá de comparar) no hay diferencias. No revisé todos los archivos que no cambiaron, pero en la mayoría de los casos parece que están marcados como [merge]
y los archivos que realmente cambiaron están marcados como [merge,edit]
.
En un caso, probablemente cambiamos alrededor de 100 archivos, mientras que los cambios pendientes mostraron más de 22,000 cambios. Intentamos registrarlos en un punto pensando que los tfs serían lo suficientemente inteligentes como para saber qué archivos cambiaron y cuáles no. Pero verificó en todos los archivos. ¿Alguien sabe qué está pasando y cómo solucionarlo?
Estamos ejecutando TFS 2012 w / Update1
Todo el mundo está usando Visual Studio 2012 w / Update 1.
Desde mi experiencia esto sucede cuando TFS no tiene relación entre el archivo A en la rama A y el archivo B en la rama B.
Al fusionar sucursales, TFS siempre crea una relación entre los archivos cuando ya no existe ninguna relación. Por lo tanto, quiere registrarse como "fusión" para recordar estas relaciones.
Tiendo a deshacer estos cambios de "fusión" cuando no necesito las relaciones (por ejemplo, para la reparación).
El comentario anterior con la opción "No a todos" en el diálogo de confirmación de deshacer funciona bien, pero como comentó Mark Hosang, esto no funcionará correctamente si tiene archivos nuevos. Mladen Mihajlovic tiene razón en que puede asegurarse de no seleccionar esos archivos nuevos. Sin embargo, con una gran base de código, vadear esto es muy tedioso.
Entonces mi método: antes de llegar al diálogo de confirmación, se le presenta una ventana para seleccionar qué archivos deshacer. Esta ventana tiene columnas ordenables Puede ordenar por la columna Change
y seleccionar solo los archivos con estado de merge
(estos son los archivos sin modificar, merge, edit
son archivos editados y merge, branch
son archivos nuevos). Simplemente haga clic en Deshacer cambios solo con aquellos seleccionados, y luego disfrute de la belleza de un conjunto de cambios de fusión despejado.
En cuanto al problema en el que había cambiado 100 archivos y TFS quería fusionar varios miles. Esto generalmente se produce al renaming (o eliminar y luego eliminar o eliminar) una rama. Esto me ha mordido un par de veces y siento tu dolor.
El mejor consejo que puedo dar es que, una vez que haya creado una sucursal, déjelo en paz. No lo mueva, no lo cambie de nombre. Si la ubicación o el nombre de la sucursal son incorrectos, viva con él hasta que sea el momento de eliminar la sucursal y crear una nueva.
Debido a la forma en que TFS 201x funciona detrás de escena, cambiar la carpeta raíz de una rama la convierte efectivamente en un objeto diferente. Cuando intente fusionar la rama de nuevo, TFS realizará una fusión sin fundamento, lo que significa que parece que todos los archivos de la sucursal han cambiado (aunque no lo hayan hecho). Este es un nuevo comportamiento, versiones anteriores de TFS (2005/2008 ) no sufras de este problema.
por ejemplo, usted tiene un proyecto de equipo que se parece a esto
$/TeamProject/Main
A continuación, crea una rama desde "Principal" llamada "Dev"
$/TeamProject/Dev
Puede fusionar todo lo que quiera y no debería haber ningún problema. Luego decides que la estructura de la carpeta puede ser un poco desordenada cuando tienes varias ramas de desarrollo, por lo que creas una carpeta llamada "Desarrollo" en la raíz del proyecto del equipo y mueves la rama de desarrollo a esta carpeta
$/TeamProject/Development/Dev
Ahora bien, detrás de escena, el movimiento es un cambio de nombre y un borrado, la antigua rama de desarrollo todavía existe bajo $/TeamProject/Dev
(puede ver esto yendo a "herramientas", "opciones", "Control de origen", "Team Foundation" Servidor "y luego verifique la configuración que dice" mostrar elementos eliminados en el Control de código fuente "
¡La carpeta llamada $/TeamProject/Development/Dev
es en realidad una cosa nueva! Por lo tanto, no tiene una relación de fusión con "Principal". Aunque confuso, el IDE mostrará una relación, pero en realidad no existe. La primera vez que se fusiona de $/TeamProject/Development/Dev
a $/TeamProject/Main
TFS se realizará una combinación furtiva e infundada para establecer la relación de bifurcación.
Lo mismo sucede si cambia el nombre de una rama (la antigua rama se eliminará y se creará una nueva rama debajo de las cubiertas)
Este blog entra en más detalles
Para cualquiera que tenga el mismo problema, hay que deshacer los cambios pendientes. Cuando obtenga el cuadro de diálogo de confirmación, elija "No a todos". Solo se deben dejar los cambios pendientes.
Prueba esto:
- seleccionar todos los archivos pendientes
- en el menú contextual, haga clic en ''Deshacer ...''
- en el cuadro de diálogo "Deshacer cambios pendientes", ordena los archivos por columna "Cambiar"
- anule la selección de todos los archivos excepto ''combinar'' usando shift + clic
- haga clic en el botón ''Deshacer cambios''