versiones traduccion source meaning management estrategia control code version-control perforce

version-control - traduccion - perforce vs git



¿Cómo encontrar archivos sin seguimiento en un árbol de Perforce?(análogo del estado svn) (15)

¿Hay un análogo del svn status o git status ?

Sí, PERO .

A partir de la versión 2012.1 de Perforce, está el p4 status del comando p4 status y en P4V ''conciliar el trabajo fuera de línea''. Sin embargo, ambos son muy lentos. Para excluir archivos irrelevantes, deberá escribir un archivo p4ignore.txt por https://stackoverflow.com/a/13126496/284795

¿Alguien tiene un script o alias para encontrar archivos sin seguimiento (realmente: sin agregar) en un árbol de Perforce?

EDITAR: Actualicé la respuesta aceptada en esta, ya que parece que P4V agregó soporte para esto en el lanzamiento de enero de 2009.


Ahh, uno de los clásicos de Perforce :) Sí, realmente apesta que todavía EXISTE una forma fácil de hacerlo en los comandos predeterminados.

La forma más fácil es ejecutar un comando para encontrar todos los archivos en la raíz de sus clientes y luego intentar agregarlos al depósito. Obtendrá una lista de cambios de todos los archivos nuevos y los archivos existentes se ignorarán.

Ej dir / s / b / AD | p4 -x - agregar

(use ''find. -type f -print'' desde una línea de comando nix).

Si desea una lista física (en la consola o el archivo), puede canalizar los resultados de un diff (o agregar si también los quiere en una lista de cambios).

Si está ejecutando esto dentro de P4Win, puede usar $ r para sustituir la raíz del cliente del espacio de trabajo actual.


Como alternativa, desde P4Win, use la opción "Archivos locales no en el depósito" en el panel de vista de la izquierda.

No uso mucho P4V, pero creo que el equivalente es seleccionar "Ocultar archivos de espacio de trabajo local" en el menú desplegable del filtro de la pestaña de vista del espacio de trabajo.p4 help fstat

En P4V 2015.1, encontrará estas opciones en el botón de filtro de esta manera:


El comando p4 fstat permite probar si existe un archivo en el área de trabajo, combinarlo con find para localizar archivos para verificar como en el siguiente ejemplo de Perl:

// throw the output of p4 fstat to a ''output file'' // find: // -type f :- only look at files, // -print0 :- terminate strings with /0s to support filenames with spaces // xargs: // Groups its input into command lines, // -0 :- read input strings terminated with /0s // p4: // fstat :- fetch workspace stat on files my $status=system "(find . -type f -print0 | xargs -0 p4 fstat > /dev/null) >& $outputFile"; // read output file open F1, $outputFile or die "$!/n"; // iterate over all the lines in F1 while (<F1>) { // remove trailing whitespace chomp $_; // grep lines which has ''no such file'' or ''not in client'' if($_ =~ m/no such file/ || $_ =~ m/not in client/){ // Remove the content after ''-'' $_=~ s/-/s.*//g; // below line is optional. Check ur output file for more clarity. $_=~ s/^.////g; print "$_/n"; } } close F1;

O puede usar p4 reconcile -n -m ...

Si está ''abierto para eliminar'', entonces se ha eliminado del espacio de trabajo. Tenga en cuenta que el comando anterior se está ejecutando en modo de vista previa ( -n ).


En Linux, o si tiene gnu-tools instaladas en Windows:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null

Esto mostrará un mensaje de error por cada archivo no contabilizado. Si quieres capturar ese resultado:

find . -type f -print0 | xargs -0 p4 fstat >/dev/null 2>mylogfile


En P4V, en la opción de menú "Ver", seleccione "Archivos en la carpeta", que muestra una nueva pestaña en el panel derecho. En el extremo derecho de las pestañas hay un pequeño ícono que abre una ventana llamada "Archivos en la carpeta" con 2 íconos. Seleccione el icono de la izquierda que se parece a un embudo y verá varias opciones. Elija "Mostrar elementos que no están en el almacén" y se mostrarán todos los archivos en la carpeta. A continuación, haga clic con el botón derecho en el archivo que desea agregar y seleccione "Marcar para agregar ...". Puede verificar que esté allí en la pestaña "Pendiente". Solo envíe como normal (Ctrl + S).


En Unix:

find -type f ! -name ''*~'' -print0| xargs -0 p4 fstat 2>&1|awk ''/no such file/{print $1}''

Esto imprimirá una lista de archivos que no se agregan en su cliente o en el depósito de Perforce. ¡He usado ! -name ''*~'' ! -name ''*~'' para excluir archivos que terminan en ~.


Los siguientes comandos producen salida similar al estado, pero ninguno es bastante equivalente al svn status o git status , proporcionando un resumen de una línea del estado de cada archivo:

  • p4 status
  • p4 opened
  • p4 diff -ds

Método rápido, pero poco ortodoxo. Si la base de código no agrega nuevos archivos / cambia de vista con demasiada frecuencia, puede crear un repositorio ''git'' local de su salida. Desde una sincronización limpia y clara, git init, agregue y comprometa todos los archivos localmente. El estado de Git es rápido y mostrará los archivos no comprometidos previamente.


Me siento impulsado a agregar una respuesta, ya que la respuesta aceptada, y algunas de las otras, tienen lo que creo que es un problema importante: no entienden la diferencia entre un comando de consulta de solo lectura y un comando que realiza cambios.

No espero ningún crédito por esta respuesta, pero espero que ayude a otros a evitar perder el tiempo y cometer errores siguiendo la respuesta incorrecta pero en mi humilde opinión aceptada.

--- + BREVE

Probablemente la forma más conveniente de encontrar todos los archivos sin seguimiento en un espacio de trabajo forzado es p4 reconcile -na .

-a dice "darme archivos que no están en el repositorio, es decir, que deberían agregarse".

-n dice "no hacer cambios", es decir, una ejecución en seco. (Aunque los mensajes pueden decir "abierto para agregar", mentalmente debes interpretar eso como "se abriría para agregar si no -n")

Probablemente la forma más conveniente de encontrar todos los cambios locales realizados sin conexión (no solo los archivos que podrían necesitar ser agregados, sino también los que podrían necesitar ser eliminados, o que han sido modificados sin abrirse para su edición a través de la edición p4 edit es p4 reconcile -n .

Varias respuestas proporcionaron secuencias de comandos, a menudo involucrando p4 fstat . Aunque no he verificado todos esos scripts, a menudo utilizo scripts similares para compensar las deficiencias de los comandos forzados como p4 reconcile -n - por ejemplo, a menudo encuentro que quiero rutas locales en lugar de vías de acceso de almacén de Perforce o de espacio de trabajo.

--- + ADVERTENCIA

p4 status NO es la contraparte de los comandos de estado en otros sistemas de control de versiones.

p4 status NO es una consulta de solo lectura. p4 status realidad encuentra el mismo tipo de cambios que hace la p4 reconcile y los agrega al repositorio. p4 status no parece tener una opción de ejecución en seco como p4 reconcile .

Si hace el p4 status , mire los archivos y piense "Oh, no los necesito", entonces tendrá que p4 revert a p4 revert si quiere continuar editando en el mismo espacio de trabajo. De lo contrario, los cambios que p4 status agregó a su conjunto de cambios serán verificados la próxima vez.

Parece haber poca o ninguna razón para usar el p4 status lugar de p4 reconcile -n , excepto algunos detalles del espacio de trabajo local frente al nombre de la ruta de depósito.

Solo puedo imaginar que quien eligió ''estado'' para un comando que no sea de solo lectura tuvo un dominio limitado del idioma inglés y otras herramientas de control de versiones.

--- + GUI P4V

En la GUI p4v , el comando conciliar encuentra cambios locales que pueden necesitar agregarse, eliminarse o abrirse para su edición. Afortunadamente no los agrega a una lista de cambios por defecto; pero aún así debería tener cuidado de cerrar la ventana de conciliación después de inspeccionarla, si no desea confirmar los cambios.


Necesitaba algo que funcionara en Linux, Mac o Windows. Así que escribí un script de Python para eso. La idea básica es iterar a través de archivos y ejecutar p4 fstat en cada uno. (por supuesto ignorando las dependencias y las carpetas tmp)

Puede encontrarlo aquí: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9


No tengo suficientes puntos de reputación para comentar, pero la solución de Ross también enumera los archivos que están abiertos para agregar. Probablemente no quiera usar su respuesta para limpiar su espacio de trabajo.

Los siguientes usos p4 fstat (gracias a Mark Harrison) en lugar de p4 have , y enumera los archivos que no están en el depósito y no están abiertos para agregar.

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s//*/%2A/g" | p4 -x- fstat 2>&1 | sed -n -e "s/ - no such file[(]s[)]/.$//gp"

=== Jac


Quick ''n Dirty: en p4v haga clic derecho en la carpeta en cuestión y agregue todos los archivos debajo de ella a una nueva lista de cambios. La lista de cambios contendrá ahora todos los archivos que actualmente no forman parte del depósito.


Utilizo lo siguiente en mi herramienta que hace copias de seguridad de todos los archivos en el espacio de trabajo que difieren del repositorio (para Windows). Maneja algunos casos extraños que a Perforce no le gustan mucho, como espacios en blanco incrustados, estrellas, porcentajes y marcas hash:

dir /S /B /A-D | sed -e "s/%/%25/g" -e "s/@/%40/g" -e "s/#/%23/g" -e "s//*/%2A/g" | p4 -x- have 1>NUL:

" dir / S / B / AD " enumera todos los archivos en esta carpeta o debajo ( / S ) en formato "vacío" ( / B ) excluyendo directorios (/ AD ). El " sed " cambia los caracteres peligrosos a su forma " % xx " (a la HTML), y el comando " p4 have " comprueba esta lista (" -x- ") contra el servidor descartando cualquier cosa sobre los archivos que realmente ubica en el repositorio (" 1> NUL: "). El resultado es un grupo de líneas como:

Z:/No_Backup/Workspaces/full/depot/Projects/Archerfish/Portal/Main/admin/html/images/nav/navxx_background.gif - file(s) not on client.

Et voilà!


EDITAR: Usa el p4 status ahora. Ya no hay necesidad de saltar por los aros. Ver la answer @ ColonelPanic.

En la versión de enero de 2009 de P4V, puede hacer clic derecho en cualquier carpeta en su árbol de área de trabajo y hacer clic en "reconciliar trabajo fuera de línea ..."

Esto procesará un poco y luego mostrará una vista de árbol dividido de los archivos que no están desprotegidos, pero que tienen diferencias con respecto a la versión de depósito o que no están registrados. Incluso puede haber algunas otras categorías que trae a colación.

Puede hacer clic derecho en los archivos en esta vista y verificarlos, agregarlos o incluso revertirlos.

Es una herramienta muy útil que me salvó el culo un par de veces.

EDITAR: ah la pregunta sobre los guiones específicamente, pero voy a dejar esta respuesta aquí por las dudas.