¿Puede "ignorar" un archivo en Perforce?

101

A veces utilizo la función 'Reconciliar trabajo sin conexión ...' que se encuentra en el IDE de P4V de Perforce para sincronizar los archivos en los que he estado trabajando mientras estaba desconectado del depósito de P4. Lanza otra ventana que realiza un 'Folder Diff'.

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

Rayo
fuente
¿Podría proporcionar un ejemplo de la salida CVS para que podamos ver lo que quiere decir y por qué las respuestas dadas no hacen lo que desea?
Greg Whitfield
2
En el foro de ideas de Perforce, puede votar una sugerencia para listas de ignorar estilo Git p4ideax.com/ideas/15/ignore-support
Colonel Panic
Haga clic en "Reconciliar trabajo sin conexión", desmarque "Archivos locales no en el depósito", presione "Reconciliar". Siempre que no esté agregando archivos, probablemente sea la solución más rápida.
carril

Respuestas:

59

A partir de la versión 2012.1, Perforce admite la P4IGNOREvariable de entorno. Actualicé mi respuesta a esta pregunta sobre cómo ignorar directorios con una explicación de cómo funciona. Entonces noté esta respuesta, que ahora es superflua, supongo.


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 del espacio de trabajo para lograr esta:

- // depósito / foo / *. dll //CLIENT/foo/*.dll
- // depósito / 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 'Conciliar 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 carpetas. Estarán fuera de tu camino, pero aún puedes verlos y manipularlos si realmente lo necesitas.

También puede hacerlo de otra manera, lo que reducirá su carpeta "Archivos excluidos" a solo una, pero no podrá manipular ninguno de los archivos que contiene porque la ruta estará dañada (pero si solo los quiere fuera a tu manera, no importa).

- // depósito / foo ... / *. dll //CLIENT/foo.../*.dll
cuervo
fuente
30
Si bien esto funciona, no es muy útil ya que tendrá que poner estas líneas en cada espacio de trabajo que haya creado.
dgrant
6
Nota: esto no funciona para el trabajo normal de conciliación fuera de línea de p4v. Los "archivos excluidos" solo parecen estar en la ventana de conciliación "avanzada" ...
Catskul
6
El filtro de exclusión no funciona dentro del Reconcile Offline Workdiálogo. Funciona si lo abres por dentro, Advanced Reconcile...pero esto es inútil porque en el 99,9% de las veces no necesitas o no quieres usar el diálogo avanzado.
sorin
12
@raven: 1) (Ejemplo :) Algunos proyectos usan carpetas bin / obj debajo de cada proyecto en lugar de tenerlos en una ubicación central. (Conclusión generalizada :) La suposición de Perforce de que todos los archivos intermedios se colocan en una ubicación de espacio de trabajo fácilmente excluible es un diseño innecesariamente restrictivo para un VCS. 2) Algunos proyectos involucran caché local y / u otros archivos generados por usuario en la estructura del directorio (por ejemplo, el caché * .ncb IntelliSense). La imposibilidad de excluirlos como política común perjudica gravemente las funciones Reconciliar trabajo sin conexión y Diff Folders.
Sam Harwell
6
Este problema en particular me está matando.
Warren P
47

Sí, pero.

Perforce versión 2012.1 agregó una función conocida como p4ignore , inspirada 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 las reglas de todos .gitignore archivos, Perforce no sabe dónde buscar hasta que especifique un nombre de archivo en una variable de entorno P4IGNORE. Esta libertad es una maldición. No puede piratear dos repositorios que usan nombres diferentes para sus archivos ignorados.

Además, la función de ignorar de Perforce no funciona bien. Puede configurarlo con bastante facilidad, pero otros no se benefician a menos que lo suscriban explícitamente. Un colaborador que no lo ha hecho puede enviar accidentalmente archivos no deseados (por ejemplo, una bincarpeta creada por un script de compilación).

La función de ignorar de Git es excelente porque funciona de manera sencilla. Si los .gitignorearchivos se agregan al repositorio ( todos hacen esto ), funcionarán bien para todos. Nadie publicará accidentalmente su clave privada.

Curiosamente, los documentos de Perforce muestran '.p4ignore' como un ejemplo de regla de ignorar, que es 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 archivo, por ejemplo p4ignore.txt, para que la función funcione correctamente. Suelta la P4IGNOREvariable de entorno, es contraproducente. Edite los documentos para animar a los desarrolladores a compartir reglas útiles. Permita que los usuarios escriban 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.

Colonel Panic
fuente
2
Gracias por la aclaración. Intenté usar .p4ignore con P4VS, pero mi solución, que se suponía que debía ignorarse, no se ignoró. Primero pensé que estaba haciendo algo mal. Ahora lo sé mejor.
Michael S.
1
@gentlesea, a partir de Perforce 2013.1, la función de ignorar finalmente funciona en la aplicación gráfica.
Coronel Panic
2
Discusión 'Hacer que la función de ignorar funcione bien' en p4ideax.com/ideas/17856/…
Colonel Panic
1
Para las variables de configuración que difieren según el espacio de trabajo que esté usando, intente usar archivos P4CONFIG. Luego, puede hacer que su archivo P4CONFIG especifique un valor P4IGNORE diferente a medida que se mueve de un espacio de trabajo a otro.
Bryan Pendleton
2
Perforce no sabe cómo crear el software adecuado, ni siquiera lo básico. Es por eso que todos los que están atrapados en el sueño forzosamente con mudarse a git.
Pavel P
22

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

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

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

Así que puedes comprobarlo para ver cómo te gusta.

svec
fuente
1
También puede incluir nombres de directorio, no solo nombres de archivo.
cenizas999
Como se mencionó anteriormente: desafortunadamente, TIENE que configurar P4IGNORE.
Technophile
1
Arreglé el enlace @DerMike; supongo que Perforce cambió las URL de su blog.
svec
7

Si desea una solución que se aplique a todos los espacios de trabajo sin necesidad de copiarlo, usted (o su administrador de sistemas) puede rechazar el envío de esos tipos de archivos mediante el uso de líneas como las siguientes 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 probar esto aquí. Consulte la guía Sysadmin de Perforce y pruébela

Mike Burrows
fuente
3
Desafortunadamente, esto causa errores al enviar en lugar de ignorar la vista de conciliación. Por lo tanto, puede mantener ciertos archivos fuera de un repositorio, pero no puede ayudar a sus usuarios a no ver el ruido.
Warren P
6

Perforce Streams hace que ignorar archivos sea mucho más fácil, a partir de la versión 2011.1. Según 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.

Esto esencialmente hace lo que especifica la respuesta de @ raven, pero se hace más fácil con las transmisiones, ya que se propaga automáticamente a cada espacio de trabajo que usa esa transmisión. También se aplica a las transmisiones heredadas de la transmisión en la que especifica los tipos ignorados.

Puede editar la transmisión a través de p4 stream //stream_depot/stream_name o hacer clic con el botón 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, se encuentra en P4 2012.1 beta.

Oportunidad
fuente
Sí, esto me funciona para compartir la configuración de "ignorar" en un equipo (estoy usando p4 2013.2). Tenga en cuenta que solo funciona en un depósito habilitado para corrientes. (Si puede propagar la variable de entorno P4IGNORE = .p4ignore en todo su equipo, esa es probablemente la mejor solución).
yoyo
1
Tenga en cuenta que el campo Ignorado de una secuencia se puede utilizar para ignorar una carpeta, un archivo o una extensión de archivo específicos, pero la compatibilidad con comodines es limitada y no hay forma de ignorar una carpeta completa y luego "dejar de ignorar" archivos o subcarpetas específicos. (A partir de la versión 2013.2 del servidor p4)
yoyo
3

La sugerencia de Will de usar .p4ignoresolo parece funcionar con el complemento WebSphere Studio (P4WSAD). Lo intenté en mi caja de Windows local y los archivos y directorios que enumeré no fueron ignorados.

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 los archivos de salida generados facilitará mucho el proceso de exclusión de archivos para que no se revisen.

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

marca
fuente
15
Estoy completamente en desacuerdo con toda la declaración "Organización adecuada de su código ...". El hecho es que seguir la convención de Perforce de editar el espacio de trabajo requiere que cada usuario realice el cambio. Considerando que, un archivo .p4ignore verdadero solo se crearía / administraría una vez.
Mike
9
Ah, y sin mencionar, ¿te gusta ramificar tu código? Buena suerte manteniendo sus espacios de trabajo para cada sucursal. ¡Eso suena divertido!
Mike
2

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 hacer ignorar reglas; el patrón de archivo glob o regexp general 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 el número 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 disponible para los usuarios.

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

ACTUALIZACIÓN: Vea la respuesta aceptada para la nueva capacidad P4IGNORE agregada a mediados de 2012.

Warren P
fuente
1

He encontrado que es 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 .

kevin cline
fuente
Eso fue hace siete años, no me sorprende. Me sorprende que alguien todavía esté usando Perforce.
Kevin Cline
... no por elección: '(
DerMike
0

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 póster original, aunque a través de otra capa de indirecta.

http://p4delta.sourceforge.net

Desafortunadamente, aunque 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 ha actualizado en el año. Quizás otros tengan mejor suerte.

Derek Prior
fuente
-1

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

Deepak Sarda
fuente
5
duplicado y no responde la pregunta
Warren P