2008-09-10 19 views
96

A veces uso la función 'Conciliar trabajo fuera de línea ...' que se encuentra en el IDE P4V de Perforce para sincronizar todos los archivos en los que he estado trabajando mientras estaba desconectado del depósito P4. Se inicia otra ventana que realiza un 'Diff Folder'.¿Puedes "ignorar" un archivo en Perforce?

Tengo archivos que nunca deseo 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 "Eso podría ser agregado. Tienden a saturar la lista de archivos que realmente me interesan. ¿P4 tiene el equivalente de la función 'ignorar archivo' de Subversion?

+0

¿Podría darnos un ejemplo de la salida de CVS para que podamos ver lo que quiere decir y por qué las respuestas dadas no hacen lo que quiere? –

+1

En el foro de ideas de Perforce, puede votar sobre una sugerencia para listas de ignorar estilo Git http://p4ideax.com/ideas/15/ignore-support –

+0

Pulse "Reconciliar trabajo fuera de línea", desmarque "Archivos locales no en depósito", presione "Reconciliar". Mientras no agregue archivos, probablemente sea la solución más rápida. – lane

Respuesta

58

A partir de la versión 2012.1, Perforce admite la variable de entorno P4IGNORE. Actualicé mi respuesta al this question about ignoring directories con una explicación de cómo funciona. Entonces noté esta respuesta, que ahora es superflua, supongo.


Suponiendo que haya un cliente llamado "cliente", un directorio llamado "foo" (que se encuentra en la raíz de su proyecto), y desea pasar por alto todos los archivos .dll en ese árbol de directorios, puede agregar el siguiente líneas a la vista del espacio de trabajo para lograr esto:

 
-//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 de "Archivos Excluidos" a solo uno, pero no podrá manipular ninguno de los archivos que contiene porque la ruta estará dañada (pero si solo quiero que se salgan de tu camino, no importa). sugerencia de utilizar .p4ignore

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

Si bien esto funciona, no es muy útil, ya que tendrá que poner estas líneas en cada área de trabajo que haya creado. – dgrant

+6

Nota: esto no funciona para el trabajo fuera de línea de conciliación normal desde p4v. Los "archivos excluidos" solo parecen estar en la ventana de reconciliación "avanzada" ... – Catskul

+6

El filtro de exclusión no funciona dentro del cuadro de diálogo 'Reconciliar trabajo fuera de línea '. Funciona si lo abre dentro de "Reconciliación avanzada ..." pero esto es inútil porque en el 99.9% de las veces no necesita o no quiere usar el cuadro de diálogo avanzado. – sorin

3

de Will sólo parece trabajar con el plug-in de WebSphere Studio (P4WSAD). Acabo de probarlo en mi cuadro de Windows local y los archivos y directorios que enumeré fueron no ignorados.

La sugerencia de Raven de modificar las especificaciones de su cliente es la 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 sea mucho más fácil de verificar.

Como un enfoque más draconianas, siempre se puede escribir un disparador que rechaza la presentación de listas de cambio si contienen un archivo determinado o archivos con una extensión determinada, etc.

+15

Estoy completamente en desacuerdo con toda la declaración "Organización correcta de su código ...". El hecho es que, siguiendo la convención de edición de Perforce, el espacio de trabajo requiere que cada usuario realice el cambio. Mientras que, un verdadero archivo .p4ignore solo se crearía/gestionaría una vez. – Mike

+9

Ah, y sin mencionar, ¿le gustaría ramificar su código? Buena suerte manteniendo tus espacios de trabajo para cada rama. ¡Eso suena divertido! – Mike

-1

Enviar si está utilizando el Eclipse Perforce plugin, luego the plugin documentation enumera varias formas de ignorar archivos.

+4

duplicado, y no responde a la pregunta –

7

Si desea una solución que se aplicará a todos los espacios de trabajo sin necesidad de ser copiado todo, usted (o su administrador de sistemas) puede rechazar la presentación de esos tipos de archivos mediante el uso de líneas como la tabla de abajo en el p4 proteger:

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

Recuerdo haberlo hecho antes, pero no tengo los permisos necesarios para probar esto aquí. Consulte Perforce's Sysadmin guide y pruébelo

+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. –

2

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

No puede escribir y registrar un archivo que el servidor utilizará 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 la capacidad para administradores del servidor, pero no disponibles para los usuarios.

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

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

0

he encontrado que es más fácil de conciliar el trabajo fuera de línea con una escritura del golpe como éste:

#!/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 desde this Perforce Knowledge Base article.

0

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

Lamentablemente, si bien esto parece producir la lista adecuada de los archivos, no puedo conseguir "p4delta --execute" a trabajar ("No se puede modificar una cadena congelado") y el proyecto no ha sido actualizado en el año. Quizás otros tendrán mejor suerte.

21

Esto funciona como de Perforce 2013.1, el nuevo mecanismo P4IGNORE se añadió por primera vez en la liberación, 2012.1, que se describe en el blog Perforce aquí:

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

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

Así que puedes echarle un vistazo para ver cómo te gusta.

+0

Ahora está publicado, mi crítica a continuación http://stackoverflow.com/a/13126496/284795 –

+0

Editar: Aparentemente comenzó a funcionar en 2013.1 –

+1

También puede incluir nombres de directorios, no solo nombres de archivos. – ashes999

6

Perforce Streams hace que ignorar archivos sea mucho más fácil, a partir de la versión 2011.1. De acuerdo con documentation,, 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 @ Raven de respuesta especifica, pero se hace más fácil con las corrientes, ya que se propaga automáticamente a cada espacio de trabajo usando esa corriente. También se aplica a las secuencias que heredan de la secuencia en la que se especifican los tipos de ignorar.

Puede editar la secuencia a través de p4 stream //stream_depot/stream_name o haciendo clic derecho en la corriente en la vista de secuencia de p4v.

Y como @svec ha indicado, la capacidad de especificar ignorar archivos por espacio de trabajo es muy pronto, y es, de hecho, en P4 2012.1 beta.

+0

Sí, esto funciona para que comparta 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 transmisiones. (Si puede propagar la variable de entorno P4IGNORE = .p4ignore en su equipo, esa es probablemente la mejor solución). – yoyo

+1

Tenga en cuenta que el campo Ignorado para una secuencia puede usarse para ignorar una carpeta, archivo o extensión de archivo específica, pero se admite comodín limitado y no hay forma de ignorar una carpeta completa y luego "dejar de hacer caso omiso" de archivos o subcarpetas específicos. (A partir del servidor p4 versión 2013.2) – yoyo

43

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 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 enviar 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 (everyone does this), resolverán la situación para todos. Nadie publicará accidentalmente su clave privada.

Curiosamente, el Perforce docs muestra '.p4ignore' como un 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 mejorar la función. Elija una convención para los nombres de archivo, digamos p4ignore.txt, por lo que la característica funciona en la caja. Eliminar 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, as Git does.

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

+2

Gracias por aclararnos. Intenté usar .p4ignore con P4VS, pero mi solución, que se suponía debía ignorarse, no se ignoró. Primero pensé que estaba haciendo algo mal. Ahora sé mejor. –

+1

@gentlesea, a partir de Perforce 2013.1, la función de ignorar finalmente funciona en la aplicación gráfica. –

+2

Discusión 'Hacer que la función de ignorar funcione en el recuadro' en http://www.p4ideax.com/ideas/17856/make-the-ignore-feature-work-out-the-box –

Cuestiones relacionadas