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

StackOverflow https://stackoverflow.com/questions/9272

  •  08-06-2019
  •  | 
  •  

Pregunta

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

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

¿Fue útil?

Solución

EDITAR: Por favor use p4 status ahora.Ya no hay necesidad de pasar por obstáculos.Ver @ColonelPanic respuesta.

En la versión de P4V de enero de 2009, puede hacer clic derecho en cualquier carpeta del árbol de su espacio de trabajo y hacer clic en "conciliar el trabajo sin conexión..."

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

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

Es una herramienta muy útil que me ha salvado el culo varias veces.

EDITAR:Ah, la pregunta se refería específicamente a los scripts, pero dejaré esta respuesta aquí por si acaso.

Otros consejos

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

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

Esto mostrará un mensaje de error por cada archivo no contabilizado.Si desea capturar esa salida:

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

Bajo 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 están agregados en su cliente o en el depósito de Perforce.he usado ! -name '*~' para excluir archivos que terminan en ~.

Ahh, uno de los clásicos de Perforce :) Sí, realmente apesta que TODAVÍA no haya una manera fácil de hacerlo integrado en los comandos predeterminados.

La forma más sencilla es ejecutar un comando para buscar todos los archivos en la raíz de su cliente y luego intentar agregarlos al depósito.Terminará con una lista de cambios de todos los archivos nuevos y se ignorarán los archivos existentes.

Por ejemplo, dir /s /b /ad | P4 -X - Agregar

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

Si desea una lista física (en la consola o archivo), puede canalizar los resultados de una diferencia (o agregarlos si también los desea 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.

¿Existe un análogo de svn status o git status?

Sí, pero.

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

Me siento obligado 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 sólo 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 aceptada pero en mi humilde opinión incorrecta.

---+ 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 "dame archivos que no estén en el repositorio, es decir.eso habría que añadirlo".

-n dice "no hacer cambios", es decirun ensayo.(Aunque los mensajes pueden decir "abierto para agregar", mentalmente debes interpretar eso como "se abriría para agregar si no fuera -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 agregarse, sino también los archivos que podrían necesitar eliminarse o que se han modificado sin abrirlos para editarlos a través de p4 edit, es p4 reconcile -n.

Varias respuestas proporcionaron guiones, que a menudo incluían p4 fstat.Si bien no he verificado todos esos scripts, a menudo uso scripts similares para compensar las deficiencias de los comandos forzados, como p4 reconcile -n - p.ej.a menudo encuentro que quiero rutas locales en lugar de rutas de depósito de Perforce o rutas 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 en realidad encuentra el mismo tipo de cambios que p4 reconcile lo hace y los agrega al repositorio. p4 status no parece tener un -n opción de ejecución en seco como p4 reconcile hace.

Si lo haces p4 status, mira los archivos y piensa "Oh, no los necesito", entonces tendrás que p4 revert ellos si desea continuar editando en el mismo espacio de trabajo.O si no, los cambios que p4 status agregados a su conjunto de cambios se verificarán la próxima vez.

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

Sólo puedo imaginar que quien haya elegido "estado" para un comando que no sea de sólo lectura tuviera un dominio limitado del idioma inglés y otras herramientas de control de versiones.

---+ P4V GUI

En la interfaz gráfica de usuario p4v, el comando de reconciliación busca cambios locales que pueden necesitar agregarse, eliminarse o abrirse para editarlos.Afortunadamente, no los agrega a una lista de cambios de forma predeterminada;pero es posible que desee tener cuidado de cerrar la ventana de conciliación después de inspeccionarla, si no desea confirmar los cambios.

Utilizo lo siguiente en mi herramienta que realiza copias de seguridad de cualquier archivo en el espacio de trabajo que difiere 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:

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:

"directorio /S /B /A-D" enumera todos los archivos en o debajo de esta carpeta (/S) en formato "simple" (/B) excluyendo directorios (/ANUNCIO).El "sed"cambia personajes peligrosos a sus"%xx"formulario (al estilo HTML) y el "p4 tiene"El comando comprueba esta lista ("-X-") contra el servidor que descarta cualquier cosa sobre los archivos que realmente ubica en el repositorio ("1>NUL:").El resultado es un montón 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.

¡Y voilá!

Alternativamente desde P4Win, use la opción "Archivos locales no en Depot" en el panel de vista izquierdo.

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

En P4V 2015.1 encontrarás estas opciones debajo del botón de filtro como este:enter image description here

Rápido y sucio: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 ahora contendrá todos los archivos que actualmente no forman parte del depósito.

Los siguientes comandos producen resultados similares a los de estado, pero ninguno es equivalente a svn status o git status, proporcionando un resumen de una línea del estado de cada archivo:

  • p4 status
  • p4 opened
  • p4 diff -ds

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 agregarse.Probablemente lo hagas no Quiero usar su respuesta para limpiar su espacio de trabajo.

Los siguientes usos p4 fstat (gracias 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

Método rápido, pero poco ortodoxo.Si el código base no agrega nuevos archivos/cambia la vista con demasiada frecuencia, puede crear un repositorio 'git' local desde su pago.Desde una sincronización limpia y forzada, inicie git init, agregue y confirme todos los archivos localmente.El estado de Git es rápido y mostrará archivos que no se han confirmado previamente.

El p4 fstat El comando le permite probar si existe un archivo en el espacio 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 puedes 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 ejecuta en modo de vista previa (-n).

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

Lo puedes encontrar aquí: https://gist.github.com/givanse/8c69f55f8243733702cf7bcb0e9290a9

En P4V, en el elemento del menú "Ver", elija "Archivos en la carpeta", lo que abre 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 carpeta" con 2 íconos.Selecciona el ícono de la izquierda que parece un embudo y verás varias opciones.Elija "Mostrar elementos que no están en Depot" y se mostrarán todos los archivos de la carpeta.Luego simplemente haga clic derecho en el archivo que desea agregar y elija "Marcar para agregar...".Puedes verificar que esté allí en la pestaña "Pendiente".Simplemente envíelo normalmente (Ctrl+S).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top