¿Puedes "ignorar" un file en Perforce?

A veces uso la function 'Conciliar trabajo sin connection …' que se encuentra en el IDE P4V de Perforce para sincronizar todos los files en los que he estado trabajando mientras estoy desconectado del almacén P4. Se inicia otra window que realiza un 'Diff Folder'.

Tengo files que nunca quiero registrar en el control de código fuente (como los que se encuentran en la carpeta bin como files DLL, resultados generados por código, etc.) ¿Hay alguna manera de filtrar esos files / carpetas para que no aparezcan como "nuevos" que podrían ser adicional. Tienden a saturar la list de files que realmente me interesan. ¿P4 tiene el equivalente de la function 'ignorar file' de Subversion?

A partir de la versión 2012.1, Perforce admite la variable de entorno P4IGNORE . Actualicé mi respuesta a esta pregunta sobre ignorar directorys 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 directory llamado "foo" (ubicado en la raíz de su proyecto) y desea ignorar todos los files .dll en ese tree de directorys, puede agregar las siguientes líneas a su vista de espacio de trabajo para lograr esta:

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

La primera línea los elimina del directory "foo" y la segunda línea los elimina de todos los subdirectorys. Ahora, cuando 'Concilie Offline Work …', todos los files .dll se moverán a las carpetas de "Archivos Excluidos" en la parte inferior de la pantalla de diff de la carpeta. Ellos estarán fuera de tu path, pero aún pueden verlos y manipularlos si realmente lo necesitas.

También puede hacerlo de otra manera, lo que networkingucirá su carpeta "Archivos Excluidos" a solo uno, pero no podrá manipular ninguno de los files que contiene porque la ruta estará dañada (pero si solo quiere que salgan) de tu manera, no importa).

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

Sí, pero.

La versión de Perforce 2012.1 agregó una característica 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 function sea mucho less útil.

Mientras que Git toma las reglas de todos los files .gitignore , Perforce no sabe dónde search hasta que especifique un nombre de file en una variable de entorno P4IGNORE . Esta libertad es una maldición. No puede piratear dos repositorys que usan nombres diferentes para sus files de ignorar.

Además, la function de ignorar de Perforce no funciona. Puede configurarlo para usted, pero otros no se benefician a less que opten explícitamente. Un queueborador que no ha podido accidentalmente cometer files no deseados (por ejemplo, una carpeta bin creada por un script de compilation).

La function de ignorar de Git es genial porque funciona bien. Si los files .gitignore se agregan al repository ( todo el mundo lo hace ), resolverán el problema para todos. Nadie publicará accidentalmente su key privada.

De manera divertida, los documentos de Perforce muestran '.p4ignore' como una regla de ignorar ejemplo, ¡que está al revés! Si las reglas son útiles, deben compartirse como parte del repository.


Perforce aún podría cumplir con la function. Elija una convención para los nombres de los files, digamos p4ignore.txt , de modo que la característica resuelva la casilla. P4IGNORE la variable de entorno P4IGNORE , es contraproducente. Edite los documentos para alentar a los desarrolladores a compartir reglas útiles. Permita que los usuarios escriban reglas personales en un file en su carpeta de inicio, como lo hace Git .

Si conoce a alguien en Perforce, envíeles 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, descrita en el blog Perforce aquí:

http://www.perforce.com/blog/120130/new-20121-p4ignore

Tal como se describe actualmente, establece una variable de entorno "P4IGNORE" en un nombre de file que contiene una list de los files a ignorar.

Entonces puedes verlo para ver cómo te gusta.

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

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

Recuerdo haber hecho esto antes, pero no tengo los permissions necesarios para probar esto aquí. Consulte la guía Sysadmin de Perforce y pruébelo

Perforce Streams hace que ignorar files sea mucho más fácil, a partir de la versión 2011.1. De acuerdo con la documentation, puede ignorar ciertas extensiones o ciertas routes en su directory.

Desde la p4 help stream

 Ignonetworking: Optional; a list of file or directory names to be ignonetworking 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 Ignonetworking field may appear in any order. Ignonetworking 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 utilizando esa secuencia. También se aplica a las secuencias que henetworkingan de la secuencia en la que se especifican los types de ignorar.

Puede 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 files de ignorar por área de trabajo llegará pronto, y de hecho está en P4 2012.1 beta.

La sugerencia de Will de usar .p4ignore solo parece funcionar con el complemento de WebSphere Studio (P4WSAD). Acabo de probarlo en mi cuadro de Windows local y no se ignoraron los files y directorys que enumeré.

La sugerencia de Raven de modificar las especificaciones de su cliente es la forma correcta bajo Perforce. La organización adecuada de su código / datos / ejecutables y files de salida generados hará que el process de exclusión de files sea mucho más fácil de verificar.

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

RESPUESTA HISTÓRICA: ya no es correcto. En el momento en que esto fue escrito originalmente, era cierto;

No puede escribir y verificar en un file que el server usará para hacer ignorar las reglas; el patrón de file global glob o regexp ignora forzosamente.

Otras respuestas tienen configuraciones globales del server que son globales (y no por carpeta). Las otras respuestas muestran cosas que podrían funcionar para usted, si quiere una línea en su vista por carpeta multiplicada por el número de extensiones que desea ignorar en esa única carpeta, o que proporciona esta capacidad solo en los plugins de WebSphere Studio, o proporciona capacidad para el server administradores, pero no disponibles para los usuarios.

En resumen, me parece Perforce realmente débil en esta área. Aunque aprecio que aquellos que usan el plugin de 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 de P4IGNORE agregada a mediados de 2012.

Me resultó más fácil conciliar el trabajo fuera de línea usando un script de 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)' 

Lo adapté de este artículo de Perforce Knowledge Base .

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 el cartel original estaba pidiendo, aunque a través de otra capa de indirección.

http://p4delta.sourceforge.net

Desafortunadamente, aunque esto parece producir la list adecuada de files, no puedo hacer que funcione "p4delta –execute" ("No se puede modificar una cadena congelada") y el proyecto no se ha actualizado en el año. Quizás otros tendrán mejor suerte.

Si está utilizando el complemento Eclipse Perforce, la documentation del complemento enumera varias forms de ignorar los files.