P4 Shelve: ¿Qué se guarda realmente?

He usado varios sistemas de control de versiones a lo largo de los años, y diría que domino SVN y Mercurial, pero ahora tengo un contrato que me obliga a usar forzosamente. Tengo los elementos básicos bajo control, pero ocasionalmente encuentro un área donde no está claro exactamente lo que está haciendo.

Los cambios de estanterías son uno de estos.

Esta semana estaba en una situación en la que estaba en medio de un trabajo, y necesitaba cambiar el enfoque y trabajar en una solución rápida para alguien. El viejo trabajo se basó en una revisión anterior, y para la nueva pieza de trabajo necesitaba estar a más tardar. Asique…

  • Dejé de lado mi list de cambios actual.
  • Actualicé mi espacio de trabajo a la última revisión
  • Hizo mi trabajo
  • Enviado.
  • Unshelved mis cambios originales

Sabía que estaba en la última revisión cuando me desvinculé, pero "Está bien, necesitaba actualizar de todos modos". Lo que me sorprendió fue que no necesitaba resolver ningún file. Inseguro acerca de por qué sería yo …

  • Revertido mi espacio de trabajo
  • Actualizado a la revisión en la que había estado trabajando originalmente
  • Unshelved mis files nuevamente (no había borrado la versión archivada)
  • Actualizado a la última revisión

En este punto, forzosamente me pidió que resolviera los files, y no fue una resolución trivial (es decir, no uno que podría haberse hecho automáticamente).

Esto me ha dejado con preguntas:

  • ¿Deja shelve simplemente copyr un file y luego copyrlo? o está almacenando un delta?
  • ¿Es posible hacer que los cambios de otros se deshagan mediante el uso de shelve?
  • ¿Cómo debería estar trabajando cuando surja esta situación en el futuro?

p4 shelve guarda sus files en el server de Perforce, pero no elimina los cambios pendientes de su espacio de trabajo actual. Después de emitir el command p4 shelve, podría haber emitido un command p4 revertir para restaurar su espacio de trabajo a las versiones no modificadas de sus files, pero a partir de su descripción, parece que no lo hizo.

Así que su actualización al último paso de revisión (synchronization p4) llevó todos los files sin abrir a la revisión principal, pero dejó los files abiertos como estaban antes de que los archivara.

Su command unshelve no tuvo ningún efecto real, ya que los files ya estaban en el estado en que los dejó antes de que los archivara.

En cuanto a tus preguntas:

  • shelve está copyndo los files (probablemente como un delta, pero no es importante para mí como usuario) a un lugar donde usted (o sus compañeros de trabajo) pueden getlos más tarde, pero no está "fuera del path", ya que no t revierte automáticamente sus cambios archivados en su espacio de trabajo local

  • dejar de lado por sí mismo no cambia la revisión principal del file en Perforce; es más como una micro twig. Sin embargo, cuando desenvuelve un file, es posible que tenga que integrar los cambios que realizó antes de archivar el file con los cambios que se han realizado en el file desde que se archivó. Esto puede hacer que los cambios de otros se deshagan si no tienes cuidado.

  • Enérgicamente.