version control - ¿Puedes "ignorar" un archivo en Perforce?
version-control ignore (10)
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í:
Tal como se describe actualmente, establece una variable de entorno "P4IGNORE" en un nombre de archivo que contiene una lista de los archivos a ignorar.
Entonces puedes verlo para ver cómo te gusta.
A veces uso la función ''Conciliar trabajo sin conexión ...'' que se encuentra en el IDE P4V de Perforce para sincronizar todos los archivos en los que he estado trabajando mientras estoy desconectado del almacén P4. Se inicia otra ventana que realiza un ''Diff Folder''.
Tengo archivos que nunca quiero registrar en el control de código 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" que podrían ser adicional. Tienden a saturar la lista de archivos que realmente me interesan. ¿P4 tiene el equivalente de la función ''ignorar archivo'' de Subversion?
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 lista adecuada de archivos, 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.
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 archivos y directorios 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 archivos de salida generados hará que el proceso de exclusión de archivos 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 listas de cambios si contienen un determinado archivo o archivos con una extensión determinada, etc.
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 .
Perforce Streams hace que ignorar archivos 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 rutas en su directorio.
Desde la 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 utilizando esa secuencia. También se aplica a las secuencias que heredan de la secuencia en la que se especifican los tipos 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 archivos de ignorar por área de trabajo llegará pronto, y de hecho está en p4ignore
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 archivo que el servidor usará para hacer ignorar las reglas; el patrón de archivo global glob o regexp ignora forzosamente.
Otras respuestas tienen configuraciones globales del servidor 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 servidor 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.
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 función sea mucho menos útil.
Mientras que Git toma las reglas de todos los archivos .gitignore
, 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 de ignorar.
Además, la función de ignorar de Perforce no funciona. Puede configurarlo para usted, pero otros no se benefician a menos que opten explícitamente. Un colaborador que no ha podido accidentalmente cometer archivos no deseados (por ejemplo, una carpeta bin
creada por un script de compilación).
La función de ignorar de Git es genial porque funciona bien. Si los archivos .gitignore
se agregan al repositorio ( todo el mundo lo hace ), resolverán el problema para todos. Nadie publicará accidentalmente su clave 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 repositorio.
Perforce aún podría cumplir con la función. Elija una convención para los nombres de los archivos, 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 archivo en su carpeta de inicio, .gitignore .
Si conoce a alguien en Perforce, envíeles esta publicación por correo electrónico.
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 de 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ébelo
Si está utilizando el complemento Eclipse Perforce, la documentación del complemento enumera varias formas de ignorar los archivos.
A partir de la versión 2012.1, Perforce admite la variable de entorno P4IGNORE
. Actualicé mi respuesta a esta pregunta sobre 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 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 directorio "foo" y la segunda línea los elimina de todos los subdirectorios. Ahora, cuando ''Concilie Offline Work ...'', todos los archivos .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 camino, pero aún pueden verlos y manipularlos si realmente lo necesitas.
También puede hacerlo de otra manera, lo que reducirá su carpeta "Archivos Excluidos" a solo uno, pero no podrá manipular ninguno de los archivos 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