tfs changeset shelveset

tfs - Convertir los conjuntos de cambios a shelveset



changeset (4)

¿Es posible crear un conjunto de estantes a partir de dos versiones de una rama solo por algunas operaciones en tfs / tfpt?

por ejemplo, crear un conjunto de líneas desde (changeset 2013 -> changeset 2034)


Es posible crear un conjunto de estantes a partir de un conjunto de cambios con algunas limitaciones. Necesitaba deshacer un cambio de una rama para eliminarlo de una versión, pero tampoco estaba en ninguna otra rama, así que quería mantener el cambio en un estante. Logré esto de la siguiente manera:

  • Deshacer el conjunto de cambios y comprobar en la restauración.
  • Deshacer la reversión del conjunto de cambios. Esto me da un conjunto de cambios pendientes que contienen el cambio original.
  • Detengan los cambios pendientes.

Podría aplicar esta técnica al caso descrito en la pregunta, pero sería mucho esfuerzo manual ya que tendría que repetirse para cada conjunto de cambios. También generaría una gran cantidad de problemas en TFS, ya que también tendrías que revisar los rollbacks de los rollbacks.


No es imposible. Técnicamente hablando, puedes hacerlo, aunque no quieras. Dejaré que el lector decida.

Es posible que desee hacer esto en un nuevo espacio de trabajo.

  1. Obtener el Changeset en cuestión (nuevo código)
  2. Mueve toda la fuente a la carpeta temporal. (No mueva la carpeta $ tf). El árbol fuente ahora debería estar vacío.
  3. Obtener el Changeset anterior.
  4. Copia espejo del nuevo código encima del antiguo
  5. Hacer una reconciliación.

Ahora puedes crear el Shelveset.

Si puedes enfocarte en una carpeta en particular, entonces irá más rápido y podrás automatizarla. Aquí hay un ejemplo de líneas de comando que harán esto. Lo probé y funcionó para mí.

En este ejemplo, señalo una carpeta de la raíz llamada "Src". Cambia tu carpeta raíz.

md tmpws cd tmpws tf vc workspace /new /noprompt tmpws /location:local /permission:private tf vc get "$/Src" /version:C2222 /recursive /noprompt cd .. md tmp move "tmpws/Src" tmp cd tmpws tf vc get "$/Src" /version:C1111 /recursive /noprompt /force /overwrite cd .. robocopy "tmp/Src" "tmpws/Src" /mir tf vc reconcile /promote /adds /deletes /diff /recursive /noprompt tf vc shelve /replace /noprompt mychange tf vc undo "$/Src" /recursive /noprompt tf vc workspace /delete tmpws cd .. rmdir /q /s tmp rmdir /q /s tmpws


No, no es posible. Los conjuntos de cambios y estanterías son cosas diferentes, con diferentes propósitos. Probablemente podría escribir un complemento para hacer lo que está buscando (recuperar el conjunto de cambios, revisar los archivos, guardar los archivos).


Si bien esta solución no involucra una solución TFS pura, no implica eliminar el historial de conjuntos de cambios de TFS como lo hace la respuesta de Lee Richardson.

Puede usar Git-TFS para clonar un repositorio o sucursal de TFS, luego crear una nueva rama a partir de una confirmación anterior (registro de TFS), volver a aplicar los cambios de una confirmación más reciente y publicarla como un conjunto de estantes:

  1. Busque en el git log la confirmación antes de la que desea crear un conjunto de cambios para:

    $ git log --oneline AAAAAAA Newest commit BBBBBBB The commit for which I want a shelveset CCCCCCC The commit where I will create a new branch from

  2. Cree una nueva rama del compromiso que se produce antes de la que desea crear retroactivamente el conjunto de estantes para:

    $ git checkout -b CCCCCCC

  3. Compruebe los cambios de la confirmación para la que desea crear el conjunto de estantes para:

    $ git checkout BBBBBBB -- .

  4. Confirma estos archivos en etapas:

    $ git commit -m "Committing stuff for a retroactive shelveset that does X, Y and Z."

  5. Crea el conjunto de estanterías:

    $ git tfs shelve my_retroactive_shelveset HEAD

Ventajas

  • Esto mantiene limpio el historial de conjuntos de cambios de TFS sin necesidad de revertir un conjunto de cambios, crear un conjunto de estantes para deshacer el conjunto de cambios revertido anteriormente.

  • Dado que el conjunto de estantes se creó a partir de una sucursal en Git, puede eliminarla y aún así mantener limpio el historial de Git-TFS.

Desventajas

  • No es una solución TFS pura