Pregunta

A veces uso la función 'Conciliar trabajo sin conexión...' que se encuentra en el IDE P4V de Perforce para sincronizar cualquier archivo en el que he estado trabajando mientras estaba desconectado del depósito P4.Lanza otra ventana que realiza una 'Diferenciación de carpetas'.

Tengo archivos que nunca quiero registrar en el control de fuente (como los que se encuentran en la carpeta bin, como archivos DLL, resultados generados por código, etc.). ¿Hay alguna manera de filtrar esos archivos/carpetas para que no aparezcan como "nuevos"? agregado.Suelen saturar la lista de archivos que realmente me interesan.¿Tiene P4 el equivalente a la función 'ignorar archivo' de Subversion?

¿Fue útil?

Solución

A partir de la versión 2012.1, Perforce admite la P4IGNORE Variable ambiental.Actualicé mi respuesta a esta pregunta sobre ignorar directorios con una explicación de cómo funciona.Entonces me di cuenta de esta respuesta, que supongo que ahora es superflua.


Suponiendo que tiene un cliente llamado "CLIENTE", un directorio llamado "foo" (ubicado en la raíz de su proyecto) y desea ignorar todos los archivos .dll en ese árbol de directorios, puede agregar las siguientes líneas a la vista de su espacio de trabajo para lograrlo. este:

-//depot/foo/*.dll //CLIENT/foo/*.dll
-//depot/foo/.../*.dll //CLIENT/foo/.../*.dll

La primera línea los elimina del directorio "foo" y la segunda línea los elimina de todos los subdirectorios.Ahora, cuando 'Concilie el trabajo sin conexión...', todos los archivos .dll se moverán a las carpetas "Archivos excluidos" en la parte inferior de la pantalla de diferencias de carpeta.Estarán fuera de tu camino, pero aún podrás verlos y manipularlos si realmente lo necesitas.

También puedes hacerlo de otra manera, lo que reducirá tu carpeta "Archivos excluidos" a solo una, pero no podrás manipular ninguno de los archivos que contiene porque la ruta estará corrupta (pero si solo los quieres eliminar de tu camino, no importa).

-//depot/foo.../*.dll //CLIENT/foo.../*.dll

Otros consejos

Sí, pero.

La versión 2012.1 de Perforce agregó una característica conocida como p4ignorar, inspirado en Git.Sin embargo, los desarrolladores de Perforce hicieron un cambio en el comportamiento, sin justificación, que hace que la función sea mucho menos útil.

Mientras que Git toma reglas de todos .gitignore archivos, Perforce no sabe dónde buscar hasta que especifica un nombre de archivo en una variable de entorno P4IGNORE.Esta libertad es una maldición.No puedes hackear dos repositorios que usan nombres diferentes para sus archivos ignorados.

Además, la función de ignorar de Perforce no funciona.Puede configurarlo usted mismo con bastante facilidad, pero otros no se beneficiarán a menos que lo acepten explícitamente.Un colaborador que no lo haya hecho puede enviar accidentalmente archivos no deseados (p. ej.a bin carpeta creada por un script de compilación).

La función de ignorar de Git es excelente porque funciona de forma sencilla.Si el .gitignore Los archivos se agregan al repositorio (todos hacen esto), resolverán la caja para todos.Nadie publicará accidentalmente su clave privada.

Curiosamente, el Documentos forzados muestra '.p4ignore' como ejemplo de regla de ignorar, ¡que está al revés!Si las reglas son útiles, deben compartirse como parte del repositorio.


Perforce aún podría cumplir con la función.Elija una convención para los nombres de archivos, digamos p4ignore.txt, por lo que la función funciona según lo previsto.Suelta el P4IGNORE variable de entorno, es contraproducente.Edite los documentos para alentar a los desarrolladores a compartir reglas útiles.Permitir a los usuarios escribir reglas personales en un archivo en su carpeta de inicio, como lo hace Git.

Si conoce a alguien en Perforce, envíele esta publicación por correo electrónico.

Esto funciona a partir de Perforce 2013.1, el nuevo mecanismo P4IGNORE se agregó por primera vez en la versión 2012.1, descrito en el blog de Perforce aquí:

https://www.perforce.com/blog/new-20121-p4ignore

Como se describe actualmente, configura una variable de entorno "P4IGNORE" en un nombre de archivo que contiene una lista de los archivos a ignorar.

Así que puedes echarle un vistazo para ver si te gusta.

Si desea una solución que se aplique a todos los espacios de trabajo sin necesidad de copiarla, usted (o su administrador de sistemas) puede rechazar el envío de esos tipos de archivos mediante el uso de líneas como la siguiente en la tabla de protección p4:

write user * * -//.../*.suo
write user * * -//.../*.obj
write user * * -//.../*.ccscc

Recuerdo haber hecho esto antes, pero no tengo los permisos necesarios para probarlo aquí.Verificar Guía de administrador de sistemas de Perforce y pruébalo

Perforce Streams hace que ignorar archivos sea mucho más fácil, a partir de la versión 2011.1.De acuerdo con la documentación, puede ignorar ciertas extensiones o ciertas rutas en su directorio.

De p4 help stream

Ignored: Optional; a list of file or directory names to be ignored in
                 client views. For example:

                     /tmp      # ignores files named 'tmp'
                     /tmp/...  # ignores dirs named 'tmp'
                     .tmp      # ignores file names ending in '.tmp'

                 Lines in the Ignored field may appear in any order.  Ignored
                 names are inherited by child stream client views.

Básicamente, esto hace lo que especifica la respuesta de @ raven, pero se hace más fácilmente con las transmisiones, ya que se propaga automáticamente a cada espacio de trabajo que usa esa transmisión.También se aplica a cualquier secuencia que herede de la secuencia en la que especifica los tipos de ignorar.

Puedes editar la transmisión a través de p4 stream //stream_depot/stream_name o haciendo clic derecho en la transmisión en la vista de transmisión de p4v.

Y como señaló @svec, la capacidad de especificar archivos ignorados por espacio de trabajo llegará pronto y, de hecho, está en P4 2012.1 beta.

La sugerencia de Will de usar .p4ignore Sólo parece funcionar con el complemento WebSphere Studio (P4WSAD).Lo probé en mi cuadro de Windows local y todos los archivos y directorios que enumeré fueron no ignorado.

La sugerencia de Raven de modificar las especificaciones de su cliente es la forma correcta en Perforce.La organización adecuada de su código/datos/ejecutables y archivos de salida generados hará que el proceso de exclusión de archivos para que no se registren sea mucho más fácil.

Como enfoque más draconiano, siempre puede escribir un activador de envío que rechace el envío de listas de cambios si contienen un determinado archivo o archivos con una determinada extensión, etc.

RESPUESTA HISTÓRICA: ya no es correcta.En el momento en que esto se escribió originalmente, era cierto;

No puede escribir y registrar un archivo que el servidor utilizará para ignorar las reglas;El patrón general de archivo glob o regexp se ignora forzosamente.

Otras respuestas tienen configuraciones de servidor globales que son globales (y no por carpeta).Las otras respuestas muestran cosas que podrían funcionar para usted, si desea una línea en su vista por carpeta multiplicada por la cantidad de extensiones que desea ignorar en esa única carpeta, o que brindan esta capacidad solo en los complementos de WebSphere Studio, o brindan capacidad para el servidor. administradores, pero no está disponible para los usuarios.

En resumen, encuentro a Perforce realmente débil en esta área.Si bien aprecio que aquellos que usan el complemento Eclipse puedan usar .p4ignore, y creo que eso es genial, nos deja a aquellos de nosotros que no lo hacemos, en la oscuridad.

ACTUALIZAR:Consulte la respuesta aceptada para conocer la nueva capacidad P4IGNORE agregada a mediados de 2012.

Me ha resultado más fácil conciliar el trabajo fuera de línea usando un script BASH como este:

#!/bin/bash
# reconcile P4 offline work, assuming P4CLIENT is set
if [ -z "$P4CLIENT" ] ; then echo "P4CLIENT is not set"; exit 1; fi
unset PWD # confuses P4 on Windows/CYGWIN

# delete filew that are no longer present
p4 diff -sd ... | p4 -x - delete

# checkout files that have been changed.  
# I don't run this step.  Instead I just checkout everything, 
# then revert unchanged files before committing.
p4 diff -se ... | pr -x - edit

# Add new files, ignoring subversion info, EMACS backups, log files
# Filter output to see only added files and real errors
find . -type f \
 | grep -v -E '(\.svn)|(/build.*/)|(/\.settings)|~|#|(\.log)' \
 | p4 -x - add \
 | grep -v -E '(currently opened for add)|(existing file)|(already opened for edit)'

Adapté esto de este artículo de la base de conocimientos de Perforce.

También estoy buscando una solución similar a .p4ignore (y no una vinculada a un IDE en particular).Hasta ahora, lo más parecido que he encontrado es p4delta.Parece que hará exactamente lo que pedía el cartel original, aunque a través de otra capa de indirección.

http://p4delta.sourceforge.net

Desafortunadamente, si bien esto parece producir la lista adecuada de archivos, no puedo hacer que "p4delta --execute" funcione ("No se puede modificar una cadena congelada") y el proyecto no se actualizó en el año.Quizás otros tengan mejor suerte.

Si está utilizando el complemento Eclipse Perforce, entonces la documentación del complemento enumera varias formas de ignorar archivos.

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