aboutsummaryrefslogtreecommitdiff
path: root/es_ES.ISO8859-1/articles/p4-primer/article.xml
diff options
context:
space:
mode:
Diffstat (limited to 'es_ES.ISO8859-1/articles/p4-primer/article.xml')
-rw-r--r--es_ES.ISO8859-1/articles/p4-primer/article.xml973
1 files changed, 0 insertions, 973 deletions
diff --git a/es_ES.ISO8859-1/articles/p4-primer/article.xml b/es_ES.ISO8859-1/articles/p4-primer/article.xml
deleted file mode 100644
index 4b96ea40b2..0000000000
--- a/es_ES.ISO8859-1/articles/p4-primer/article.xml
+++ /dev/null
@@ -1,973 +0,0 @@
-<?xml version="1.0" encoding="iso-8859-1"?>
-<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN"
- "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd">
-<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" version="5.0" xml:lang="es">
-
-
- <info><title><application>Perforce</application> en el contexto del desarrollo de &os;</title>
-
- <authorgroup>
- <author><personname><firstname>Scott</firstname><surname>Long</surname></personname><affiliation>
- <address><email>scottl@FreeBSD.org</email>
- </address>
- </affiliation></author>
- </authorgroup>
-
- <legalnotice xml:id="trademarks" role="trademarks">
- &tm-attrib.freebsd;
- &tm-attrib.cvsup;
- &tm-attrib.general;
- </legalnotice>
-
- <pubdate>$FreeBSD$</pubdate>
-
- <releaseinfo>$FreeBSD$</releaseinfo>
- </info>
-
-<sect1 xml:id="intro">
- <title>Introducción</title>
-
- <para>El proyecto &os; utiliza el sistema de control de versiones
- <application>Perforce</application> para gestionar proyectos
- experimentales que todavía no están listos para ser
- incluidos en el repositorio principal de CVS.</para>
-
- <sect2 xml:id="resources">
- <title>Disponibilidad, documentación y recursos</title>
-
- <para>Aunque que el producto <application>Perforce</application>
- es un producto comercial, el software cliente que se encarga de
- interactuar con el servidor se distribuye libremente. Pueden
- descargarse versiones binarias del mismo desde el
- sitio web de <application>Perforce</application>:
- <uri xlink:href="http://www.perforce.com/perforce/loadprog.html">http://www.perforce.com/perforce/loadprog.html</uri>.
- </para>
-
- <para>Existe un cliente gráfico, pero la mayoría de la gente
- utiliza la aplicación de línea de órdenes,
- <command>p4</command>. Este documento trata sobre el uso de
- dicha herramienta para la línea de órdenes.</para>
-
- <para>En
- <uri xlink:href="http://www.perforce.com/perforce/technical.html">http://www.perforce.com/perforce/technical.html</uri>
- encontrará documentación <quote>online</quote>
- detallada.</para>
-
- <para>Se recomienda encarecidamente leer la <quote>guía de
- usuario</quote> y el <quote>manual de Perforce</quote>.
- La aplicación <application>p4</application> dispone de una extensa
- ayuda <quote>online</quote> a la que puede accederse mediante la
- orden <command>p4 help</command>.</para>
-
- <para>El servidor &os; <application>Perforce</application> se
- encuentra en
- <systemitem class="fqdomainname">perforce.freebsd.org</systemitem>,
- puerto <literal>1666</literal>. Puede navegar por el
- repositorio desde
- <uri xlink:href="http://perforce.freebsd.org">http://perforce.freebsd.org</uri>.
- Ciertas partes del repositorio se exportan automáticamente hacia
- diversos servidores <application>CVSup</application>.</para>
- </sect2>
-</sect1>
-
-<sect1 xml:id="start">
- <title>Los comienzos</title>
-
- <para>El primer paso para utilizar
- <application>Perforce</application> consiste en obtener una cuenta
- en el servidor. Si ya dispone de una cuenta en
- <systemitem class="fqdomainname">FreeBSD.org</systemitem>
- entre en
- <systemitem class="fqdomainname">freefall</systemitem>
- y ejecute el siguiente comando utilizando una contraseña distinta
- del acceso de su &os; o de cualquier otro mecanismo de
- autenticación SSH:</para>
-
- <screen>&prompt.user; <userinput>/usr/local/bin/p4newuser</userinput></screen>
-
- <para>Por supuesto si no tiene una cuenta en
- <systemitem class="fqdomainname">FreeBSD.org</systemitem>
- necesitará coordinarse con su mentor.</para>
-
-
- <para>El siguiente paso consiste en establecer las variables de
- entorno que necesita <command>p4</command> y en verificar
- que puede conectarse al servidor. Es necesario especificar la variable
- <envar>P4PORT</envar> para realizar cualquier operación. Dicha
- variable indica el servidor <application>Perforce</application>
- con el que se va a trabajar. En el caso del Proyecto &os;, créela
- con el siguiente valor:</para>
-
- <screen>&prompt.user; <userinput>export P4PORT=perforce.freebsd.org:1666</userinput></screen>
-
- <note>
- <para>Los usuarios con acceso <quote>shell</quote> al
- <quote>cluster</quote>
- <systemitem class="fqdomainname">FreeBSD.org</systemitem>
- pueden querer encapsular el protocolo cliente-servidor de
- <application>Perforce</application> a través de un
- túnel SSH, en cuyo caso la variable de arriba
- debería establecerse al valor
- <literal>localhost</literal>.</para>
- </note>
-
- <para>El servidor &os; también necesita que se establezcan las
- variables <envar>P4PASSWD</envar> y <envar>P4USER</envar>. Utilice
- el nombre de usuario y la contraseña anteriores del siguiente
- modo:</para>
-
- <screen>&prompt.user; <userinput>export P4USER=nombre_de_usuario</userinput>
-&prompt.user; <userinput>export P4PASSWD=contraseña</userinput></screen>
-
- <para>Compruebe que todo funciona mediante la siguiente
- orden:</para>
-
- <screen>&prompt.user; <userinput>p4 info</userinput></screen>
-
- <para>A resultas de esta orden debería ver información
- referente al servidor. Si no es así compruebe que
- la variable <envar>P4PORT</envar> tiene el valor correcto.
- </para>
-</sect1>
-
-<sect1 xml:id="clients">
- <title>Clientes</title>
-
- <para>El sistema <application>Perforce</application> proporciona
- acceso al repositorio y mantiene el estado del cliente de forma
- individualizada. En términos de
- <application>Perforce</application>, un cliente es una
- especificación que asocia
- <footnote><para>
- Este término, que también puede traducirse como
- asociar o asignar, suele aparecer en la jerga de la
- administración de sistemas como
- <quote>mapear</quote>.
- </para></footnote>
- ficheros y directorios desde el
- repositorio hasta la máquina local. Cada usuario puede poseer
- varios clientes, y cada cliente puede acceder a distintas partes
- del repositorio (incluso a varias partes que se solapan entre sí).
- El cliente también especifica el directorio raíz del
- árbol de
- directorios sobre el que se realiza la asociación y la
- máquina
- donde efectivamente está dicho árbol. Es por esto que
- si pretende trabajar en varias máquinas tendrá que
- usar varios clientes.
- </para>
-
- <para>Puede acceder a los clientes mediante
- <command>p4 client</command>. Si se ejecuta esta orden sin
- argumentos aparece una plantilla del cliente dentro de un
- editor, permitiendo de esta forma crear un nuevo cliente. Los
- campos importantes de esta plantilla se explican a
- continuación:</para>
-
- <variablelist>
- <varlistentry>
- <term><literal>Client:</literal></term>
-
- <listitem>
- <para>Este es el nombre de la especificación del cliente.
- Puede ser cualquier cosa, pero debe ser una cadena única
- dentro del servidor <application>Perforce</application>. Suelen
- usarse nombres como
- <literal>nombre_de_usuario_nombre_de_máquina</literal>,
- que permite identificar fácilmente a los clientes cuando se
- navega por ellos.
- Por defecto hay ya un nombre, que se
- corresponde con el nombre de la máquina.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>Description:</literal></term>
-
- <listitem>
- <para>Este campo suele consistir en un breve texto descriptivo
- que ayude a identificar al cliente.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>Root:</literal></term>
-
- <listitem>
- <para>Se trata del directorio local que actuará como
- directorio raíz para todos los ficheros dentro de la
- asociación en el cliente.
- Debe ser una localización única
- dentro del sistema
- de ficheros que no se solape con otros ficheros o clientes
- <application>Perforce</application>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>Options:</literal></term>
-
- <listitem>
- <para>La mayoría de las opciones por defecto son correctas y
- válidas para todo el mundo, aunque suele ser recomendable
- comprobar que estén activadas las opciones
- <option>compress</option> y <option>rmdir</option>
- y que no tienen el prefijo <literal>no</literal>. Los
- detalles de cada una de estas opciones están en la
- documentación de <application>Perforce</application>.
- </para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>LineEnd:</literal></term>
-
- <listitem>
- <para>Este parámetro gestiona las conversiones CR-LF y debe
- dejarse tal cual salvo que sus necesidades específicas
- requieran cambiarlo.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>View:</literal></term>
-
- <listitem>
- <para>Aquí es donde están las asociaciones de ficheros
- servidor-a-local.
- El valor por defecto es:</para>
-
- <programlisting>//depot/... //<replaceable>cliente</replaceable>/...</programlisting>
-
- <para>Esto asociará por completo el repositorio
- <application>Perforce</application> al directorio
- <filename>Root</filename>
- del cliente. <emphasis>NO USE ESTE VALOR POR DEFECTO</emphasis>.
- El repositorio de &os; es enorme e intentar asociarlo y
- sincronizarse con dicho repositorio tardará muchísimo y
- consumirá enormes recursos. Asocie
- sólamente la sección del repositorio en la que va a
- trabajar. Por ejemplo, hay un árbol para el proyecto
- smpng en <filename>//depot/projects/smpng</filename>. Una
- asociación en ese caso sería algo así:</para>
-
- <programlisting>//depot/projects/smpng/... //<replaceable>cliente</replaceable>/...</programlisting>
-
- <para>Los <literal>...</literal> deben tomarse literalmente
- tal cual están. Es un dialecto de
- <application>Perforce</application> para decir <quote>este
- directorio y todos los ficheros y directorios por debajo de
- él.</quote>.</para>
-
- <para>Una <quote>vista</quote> (View) puede contener múltiples
- asociaciones. Vamos a suponer que quiere asociar los
- árboles de SMPng
- y de NFS. Su <quote>View</quote> sería algo
- así:</para>
-
- <programlisting>//depot/projects/smpng/... //<replaceable>cliente</replaceable>/smpng/...
- //depot/projects/nfs/... //<replaceable>cliente</replaceable>/nfs/...</programlisting>
-
- <para>Recuerde que <replaceable>cliente</replaceable> es el
- nombre del cliente que se especificó en la sección
- <literal>Client</literal>, pero en la sección
- <literal>View</literal> además se utiliza para resolver al
- directorio especificado en la sección
- <literal>Root</literal>.</para>
-
- <para>También tenga en cuenta que el mismo fichero o
- directorio no puede asociarse más de una vez dentro de una
- única vista. La orden del siguiente ejemplo no es correcta
- y producirá resultados imprevistos:
- </para>
-
- <programlisting>//depot/projects/smpng/... //<replaceable>cliente</replaceable>/smpng-esto/...
- //depot/projects/smpng/... //<replaceable>cliente</replaceable>/smpng-lo_otro/...</programlisting>
-
- <para>Las <quote>vistas</quote> son la parte compleja del proceso de
- aprendizaje de <application>Perforce</application>, así que
- no tenga miedo de hacer tantas preguntas como estime
- oportunas.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>Puede listar los clientes existentes mediante
- <command>p4 clients</command>. Puede listarlos sin que sufran
- modificaciones mediante <command>p4 client -o
- nombre_cliente</command>.</para>
-
- <para>Siempre que se interactue con ficheros en
- <application>Perforce</application> la variable de entorno
- <envar>P4CLIENT</envar> debe contener al nombre del cliente que
- se está utilizando, es decir:</para>
-
- <screen>&prompt.user; <userinput>export P4CLIENT=nombredemicliente</userinput></screen>
-
- <para>Fíjese en que las asociaciones del cliente en el repositorio
- no son exclusivos; varios clientes pueden estar asociados en la
- misma zona del respositorio.
- Esto permite el trabajo en equipo sobre el mismo
- código, permitiendo que distintas personas accedan y
- modifiquen la misma parte del respositorio.
- </para>
-</sect1>
-
-<sect1 xml:id="syncing">
- <title>Sincronizaciones</title>
-
- <para>Una vez definida la especificación del cliente y una vez
- establecida la variable de entorno <envar>P4CLIENT</envar>, el
- siguiente paso consiste en recuperar los ficheros para el cliente en
- cuestión desde el servidor hasta la máquina local.
- Esto se realiza
- con <command>p4 sync</command>, el cual indica a
- <application>Perforce</application> que sincronice los ficheros
- locales con los del repositorio. La primera vez que se ejecuta
- descargará todos los ficheros. Las siguientes ejecuciones
- sólo descargarán aquellos ficheros que hayan cambiado
- desde la última ejecución de la orden.
- Gracias a esto es posible sincronizar sus fuentes con
- las de otras personas con las que esté trabajando.</para>
-
- <para>Las operaciones de sincronización sólo
- atañen a aquellos ficheros cuyas modificaciones han
- sido transmitidas a <application>Perforce</application>.
- Si se modifica o borra un fichero en local sin informar de ello
- al servidor la ejecución de un
- <quote>sync</quote> no reflejará dichos cambios. No obstante, la
- ejecución de <command>p4 sync -f</command> sincrozará
- incondicionalmente todos los ficheros, sin que importe su estado.
- Esto resulta útil para solucionar problemas cuando se cree que el
- árbol pueda haber sufrido algún tipo de
- corrupción.</para>
-
- <para>Puede sincronizarse parte del árbol o del cliente
- especificando una ruta relativa a la orden <quote>sync</quote>.
- Por ejemplo, para sincronizar sólo el directorio
- <filename>ufs</filename>
- del proyecto <literal>smpng</literal> ejecute lo
- siguiente:</para>
-
- <screen>&prompt.user; <userinput>cd raizdelproyecto/smpng</userinput>
-&prompt.user; <userinput>p4 sync src/sys/ufs/...</userinput></screen>
-
- <para>El uso de rutas locales relativas funciona en muchas otras
- órdenes <command>p4</command>.</para>
-</sect1>
-
-<sect1 xml:id="branches">
- <title>Ramas</title>
-
- <para>Una de las características más interesantes de
- <application>Perforce</application> es la posibilidad de crear
- ramas. Las ramas son muy sencillas de crear y también resulta muy
- fácil mover cambios entre distintas ramas (como se verá
- más
- adelante). Las ramas también nos permiten realizar trabajos muy
- experimentales dentro de un entorno de <quote>sandbox</quote>, sin
- necesidad de tener que preocuparnos por las colisiones con otros
- usuarios o por desestabilizar el árbol principal. Además,
- las ramas
- proporcionan el aislamiento necesario frente a los errores que se
- cometen cuando se aprende a manejar el sistema
- <application>Perforce</application>. Vistas estas ventajas es
- lógico que cada proyecto disponga de su propia rama y
- en &os; recomendamos encarecidamente este esquema.
- También se recomienda la aplicación frecuente de los cambios
- realizados.</para>
-
- <para>El repositorio <application>Perforce</application> (conocido
- como el <quote>depósito</quote>, o <quote>depot</quote> en
- la jerga de <application>Perforce</application>)
- es un único árbol plano. Se accede a cada fichero a
- través de una
- sencilla ruta bajo el directorio <filename>//depot</filename>, tanto si se trata de un
- fichero de nueva creación como si proviene de una
- ramificación.
- Esto supone una gran diferencia con respecto a sistemas como CVS,
- donde cada rama se encuentra en la misma ruta que su rama padre.
- En <application>Perforce</application> el servidor mantiene las
- relaciones entre los ficheros padre e hijo, pero los
- ficheros en sí están bajo sus propias rutas.</para>
-
-
- <para>El primer para para crear una rama consiste en crear una
- especificación de rama. Es similar a la especificación
- de un cliente,
- pero se crea mediante la orden <command>p4 branch
- nombre_de_rama</command>.</para>
-
- <para>Veamos los campos más importantes:</para>
-
- <variablelist>
- <varlistentry>
- <term><literal>Branch</literal></term>
-
- <listitem>
- <para>El nombre de la rama. Puede ser cualquier nombre, pero
- debe ser único en el repositorio. La convención
- que se usa en &os; es
- <replaceable>nombre_de_usuario</replaceable>_<replaceable>nombre_del_proyecto</replaceable>.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>Description</literal></term>
-
- <listitem>
- <para>Puede poner aquí un texto simple que describa la
- rama.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><literal>View</literal></term>
-
- <listitem>
- <para>Esto es la asociación de la rama. En lugar de asociar
- desde el <quote>depósito</quote> hacia la máquina local
- como una asociación de cliente, se crea una asociación
- entre la rama padre y la rama hija
- dentro del <quote>depósito</quote>. Por ejemplo, puede
- querer crear una rama del proyecto smpng. La asociación
- resultaría en algo parecido a esto:</para>
-
- <programlisting>//depot/projects/smpng/... //depot/projects/mi-super-smpng/...</programlisting>
-
- <para>O puede crear una rama totalmente nueva a
- partir de las fuentes de &os;:</para>
-
- <programlisting>//depot/vendor/freebsd/... //depot/projects/mi-nuevo-proyecto/...</programlisting>
-
- <para>Esto asociará el HEAD del árbol de &os; a su
- nueva rama.</para>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>La creación de la especificación de rama
- únicamente graba la
- especificación en sí misma dentro del servidor. No
- modifica el <quote>depósito</quote> ni cambia
- ningún fichero. El directorio que se declara en la rama
- permanece vacío en el servidor hasta que se comience a
- llenar.
- </para>
-
- <para>Para rellenar la rama primero debemos editar el cliente con
- la orden <command>p4 client</command> y asegurarnos de que el
- directorio de rama está asociado en el cliente. Puede ser
- necesario añadir una línea <literal>View</literal>
- como esta:</para>
-
- <programlisting>//depot/projects/mi-nuevo-proyecto/... //<replaceable>micliente</replaceable>/mi-nuevo-proyecto/...</programlisting>
-
- <para>El siguiente paso consiste en ejecutar <command>p4
- integrate</command>, como se describe en la siguiente
- sección.</para>
-</sect1>
-
-<sect1 xml:id="Integrations">
- <title>Integraciones</title>
-
- <para><quote>Integración</quote> es el término que se utiliza
- en <application>Perforce</application> para describir la acción de
- mover cambios desde una parte del <quote>depósito</quote> a otra.
- Se suele realizar junto con las órdenes creación y
- mantenimiento de ramas. Una integración es necesaria cuando se
- quiere rellenar inicialmente una rama y cuando se quieren mover cambios
- realizados en la rama padre hacia la rama hija, o de la la rama hija
- a la padre. Un caso muy común es la integración
- periódica desde el árbol original de &os; hacia la rama
- hija propia del usuario.
- El servidor <application>Perforce</application>
- mantiene el estado de los cambios en cada rama y sabe cuándo
- hay cambios que pueden integrarse de una rama a otra.</para>
-
- <para>La forma más común de hacer una integración
- se muestra en la siguiente orden:
- </para>
-
- <screen>&prompt.user; <userinput>p4 integrate -b nombrederama</userinput></screen>
-
- <para><replaceable>nombrederama</replaceable> es el nombre que se
- ha dado a la
- especificación de rama, tal y como se explicó en la
- sección anterior.
- Esta orden indica a <application>Perforce</application> que
- busque cambios en la rama padre que todavía no se hayan
- aplicado a la rama hija. En base a los cambios encontrados se
- prepara un listado de diferencias a aplicar. Si la integración
- se realiza por primera vez sobre una rama (por ejemplo cuando se
- realiza una operación de rellenado inicial) los ficheros
- de la rama padre simplemente se copiarán en la ubicación
- en la rama hija de la máquina local.</para>
-
- <para>Una vez que la operación de integración ha finalizado
- se debe ejecutar <command>p4 resolve</command>, que aplicará
- los cambios y resolverá posibles conflictos.
- Los conflictos puede surgir debido a
- cambios que se solapan al encontrarse tanto en fichero de la rama
- padre como en la copia del fichero de la rama hija. Normalmente no
- suelen aparecer conflictos y <application>Perforce</application>
- puede calcular rápidamente cómo unir los cambios.
- Para ejecutar una operación de resolución
- (<quote>resolve</quote>) utilice las siguientes órdenes:</para>
-
- <screen>&prompt.user; <userinput>p4 resolve -as</userinput>
-&prompt.user; <userinput>p4 resolve</userinput></screen>
-
- <para>La primera invocación indica a
- <application>Perforce</application> que una automáticamente los
- cambios y que acepte aquellos ficheros que no den conflictos. La
- segunda invocación permite inspeccionar cada fichero con conflictos
- y resolver de forma manual dichas incompatiblidades.</para>
-
- <para>Una vez hecha la integración de los ficheros llega el
- momento de aplicar los cambios al repositorio. Para ello se
- emplearemos la orden
- <command>p4 submit</command>, cuyo uso se explica en la
- siguiente sección.</para>
-</sect1>
-
-<sect1 xml:id="submit">
- <title>Aplicación de cambios en el repositorio</title>
-
- <para>Los cambios que se han realizado en local se deben
- aplicar en el contenido del servidor <application>Perforce</application>
- para mayor seguridad frente a pérdidas y para que otras
- personas puedan acceder a dichos cambios; esto se hace con la
- orden <command>p4 submit</command>. Cuando se ejecuta esta
- orden se abre una plantilla (<quote>submit template</quote>)
- en el editor. &os; dispone de una platilla personalizada, de la
- que a continuación se explican los campos más
- importantes:</para>
-
- <programlisting>Description:
- &lt;enter description here&gt;
- PR:
- Submitted by:
- Reviewed by:
- Approved by:
- Obtained from:
- MFP4 after:</programlisting>
-
- <para>es decir</para>
-
- <programlisting>Descripción:
- &lt;Introduzca una descripción&gt;
- PR:
- Enviado por:
- Revisado por:
- Aprobado por:
- Obtenido de:
- MFP4 tras:</programlisting>
-
-
- <para>Se considera una buena práctica proporcionar al menos dos o
- tres frases que describan los cambios entregados. Debería
- declarar aquí qué hacen dichos cambios, por qué
- se han hecho de esa forma o qué problemas intenta resolver
- con ellos. También
- conviene explicar qué APIs cambian y qué otros efectos
- secundarios pueden tener.
- Este texto debe sustituir a la línea <literal>&lt;enter
- description here&gt;</literal> que aparece en la plantilla. Debe
- recubrir las líneas y comenzar cada línea con una
- tabulación. Las etiquetas de más abajo son
- específicas de &os; y puede eliminarlas si no resultan
- útiles o apropiadas en su contexto.</para>
-
- <programlisting>Files:</programlisting>
-
- <para>Este campo se rellena automáticamente con todos los ficheros
- que el cliente etiquetó en el servidor con estados de
- adición, borrado, integración o edición.
- Le aconsejamos que revise esta lista y elimine de ella los ficheros
- que todavía no esten listos.</para>
-
- <para>Una vez guardada la sesión de su editor tiene lugar la entrega
- de los datos al servidor. Esto significa que las copias locales de
- los ficheros entregados se enviarán al servidor. Si algo va
- mal durante este proceso se cancelará la entrega y se
- avisará al usuario de que la entrega se ha convertido en
- una lista de cambios que deben corregirse y reenviarse. Las
- entregas son atómicas, es decir, si un fichero falla
- la entrega se cancela en su totalidad.</para>
-
- <para>Los cambios efectuados en el servidor no pueden cancelarse
- una vez hechos, pero sí que pueden cancelarse si, dentro
- aún del editor, se sale de él sin cambiar el
- texto del campo
- <literal>Description</literal>. <application>Perforce</application>
- se quejará la primera vez que intente salir y le
- devolverá al editor. Si sale por segunda vez el editor
- cancelará la operación. Devolver el repositorio
- al estado anterior a un cambio ya efectuado es un proceso
- muy complicado y no hay un procedimiento estándar, por lo
- que depende del caso concreto.</para>
-</sect1>
-
-<sect1 xml:id="editing">
- <title>Edición</title>
-
- <para>En el servidor se almacena y mantiene el estado de cada
- fichero del cliente. Para evitar colisiones entre distintas
- personas trabajando al mismo tiempo en el mismo fichero
- <application>Perforce</application> presta atención a qué
- ficheros están abiertos en modo de edición, y utiliza
- esa información para poder gestionar posteriormente las
- operaciones de entrega, las sincronizaciones y las
- integraciones.</para>
-
- <para>Para abrir un fichero para editarlo utilice <command>p4
- edit</command> de la siguiente forma:</para>
-
- <screen>&prompt.user; <userinput>p4 edit nombredefichero</userinput></screen>
-
- <para>Esto marca el fichero en el servidor con el estado de
- edición, lo que permite entregar el fichero posteriormente
- una vez realizados los cambios oportunos, o lo etiqueta como de
- tratamiento especial cuando se está efectuando una
- operación de integración o sincronización.
- Tenga en cuenta que la edición no es exclusiva en
- <application>Perforce</application>. Varias personas pueden tener
- el mismo fichero en estado de edición (será
- informado de ello si es necesario cuando ejecute
- <command>edit</command>), pero podrá entregar sus cambios
- incluso cuando haya otras personas que tengan ese fichero en estado
- de edición.</para>
-
- <para>Cuando alguien entregue un cambio de un fichero que usted
- esté editando necesitará cotejar sus modificaciones
- con las de la otra u otras personas para poder aplicar
- correctamente sus modifaciones al repositorio. La forma más
- sencilla de hacerlo es ejecutar
- <command>p4 sync</command> o <command>p4 submit</command> y dejar
- que el programa encuentre algún conflicto, y a
- continuación
- ejecutar <command>p4 resolve</command> para <quote>resolver</quote>
- manualmente los conflictos y aceptar los cambios de la otra persona
- en su copia del fichero. Hecho esto, utilice <command>p4
- submit</command> para aplicar sus cambios en el
- repositorio.</para>
-
- <para>Si posee un fichero abierto para su edición y
- quiere descartar los cambios y devolverlo a su estado
- original ejecute
- <command>p4 revert</command> de la siguiente forma:</para>
-
- <screen>&prompt.user; <userinput>p4 revert nombredefichero</userinput></screen>
-
- <para>Esto resincroniza el fichero con el contenido del servidor y
- elimina en el servidor el atributo de edición para ese fichero.
- Se perderá cualquier cambio que haya hecho en local.
- Esto resulta muy útil cuando se han efectuado una serie de
- cambios en un determinado fichero y se decide posteriormente que
- no se desean aplicar dichos cambios en el servidor.</para>
-
- <para>Cuando se sincroniza un fichero se marca como sólo lectura en
- el sistema de ficheros. Aunque se pueden sobreescribir fácilmente
- dichos permisos se aplican para recordar al usuario de una forma
- educada que para ello se debe utilizar <command>p4 edit</command>.
- Los ficheros modificados en local pero que no están en
- estado de edición pueden sobreescribirse al ejecutar
- <command>p4 sync</command>.</para>
-</sect1>
-
-<sect1 xml:id="changes">
- <title>Cambios, descripciones e historial</title>
-
- <para>Puede ver el historial de cambios realizados al
- <quote>depósito</quote> de
- <application>Perforce</application> puede consultarse mediante
- <command>p4 changes</command>. Esta orden proporciona una breve
- descripción de cada cambio, quién la realizó
- y cúal es el número de
- modificación. Si lo que se quiere son los detalles
- de un cambio en concreto utilice
- <command>p4 describe
- numero_de_cambio</command>. Esta orden
- proporciona el <quote>log</quote> y los
- <quote>diffs</quote> de dicho cambio.
- Normalmente se utilizan las opciones <option>-du</option> o
- <option>-dc</option> para generar <quote>diffs</quote> unificados o
- contextuales, respectivamente, en lugar del formato
- del <quote>diff</quote> nativo.</para>
-
- <para><command>p4 filelog nombre_de_fichero</command>
- muestra el historial de un fichero, incluyendo todas sus modificaciones,
- integraciones y ramas que contenga.</para>
-</sect1>
-
-<sect1 xml:id="diffs">
- <title><quote>diffs</quote></title>
-
- <para>Existen dos formas de generar <quote>diffs</quote> de ficheros en
- <application>Perforce</application>, bien entre cambios locales
- que todavía no se han entregado o bien entre dos
- árboles (o dentro de una misma rama) del
- <quote>depósito</quote>. Estos <quote>diffs</quote>
- se generan mediante órdenes distintas,
- <option>diff</option> y <option>diff2</option>:</para>
-
- <variablelist>
- <varlistentry>
- <term><command>p4 diff</command></term>
-
- <listitem>
- <para>Ese comando genera un <quote>diff</quote> entre los cambios
- locales y los cambios de ficheros en estado de edición. Los
- parámetros <option>-du</option> y <option>-dc</option>
- permiten crear <quote>diffs</quote> unificados o contextuales,
- respectivamente. También se puede establecer la variable
- <envar>P4DIFF</envar> para que apunte a un
- <quote>diff</quote> local. Le recomendamos encarecidamente
- usar esta orden para revisar sus cambios antes de
- aplicarlos en el servidor.</para>
- </listitem>
- </varlistentry>
-
- <varlistentry>
- <term><command>p4 diff2</command></term>
-
- <listitem>
- <para>Esta orden crea un <quote>diffs</quote> entre ficheros
- dados en el <quote>depósito</quote>, o entre
- ficheros especificados en una especificación de rama. La
- operación tiene lugar en el servidor, así que
- la variable <envar>P4DIFF</envar> no surte ningún efecto,
- aunque las opciones <option>-du</option> y
- <option>-dc</option> sí pueden usarse. Las dos formas de
- esta orden son:</para>
-
- <screen>&prompt.user; <userinput>p4 diff2 -b nombrederama</userinput></screen>
-
- <para>y</para>
-
- <screen>&prompt.user; <userinput>p4 diff2 //depot/ruta1 //depot/ruta2</userinput></screen>
- </listitem>
- </varlistentry>
- </variablelist>
-
- <para>En todos los casos los <quote>diffs</quote> se muestran en la salida
- estándar. Por desgracia <application>Perforce</application>
- usa un formato de <quote>diffs</quote> que resulta ser ligeramente
- incompatible con las herramientas Unix estándar
- <command>diff</command> y <command>patch</command>. La utilización
- de la variable <envar>P4DIFF</envar> para que apunte al verdadero
- &man.diff.1; puede paliar este problema, o al menos en ciertos casos,
- puesto sólo funciona con la orden
- <command>p4 diff</command>. La salida de
- <option>diff2</option> debe procesarse para que sea de alguna
- utilidad (la opción <option>-u</option> de
- <option>diff2</option> producirá <quote>diffs</quote>
- unificados que serán <emphasis>más o menos
- compatibles</emphasis>, pero no esto no incluye ficheros
- nuevos o borrados. Este <quote>script</quote> puede serle
- de utilidad para este <quote>proceso necesario</quote>:
- <uri xlink:href="http://people.freebsd.org/~scottl/awkdiff">http://people.freebsd.org/~scottl/awkdiff</uri>.</para>
-</sect1>
-
-<sect1 xml:id="add-rm-files">
- <title>Añadir o eliminar ficheros</title>
-
- <para>La integración de una rama hará que
- se añadan ficheros existentes en el servidor en su
- árbol, pero quizás sea necesario añadir
- nuevos ficheros o eliminar alguno de los ya existentes.
- Para añadir ficheros no tiene más que
- crear el fichero y ejecutar
- <command>p4 add</command> de la siguiente forma:</para>
-
- <screen>&prompt.user; <userinput>p4 add nombredefichero</userinput></screen>
-
- <para>Si quiere añadir un árbol completo de ficheros
- ejecute:</para>
-
- <screen>&prompt.user; <userinput>find . -type f |xargs p4 add</userinput></screen>
-
- <para>Al ejecutar <command>p4 submit</command> se copiarán los
- ficheros al <quote>depósito</quote> del servidor.
- Es muy importante añadir
- sólo ficheros y no directorios. Si se añade
- explícitamente un
- directorio, <application>Perforce</application> lo tratará como
- fichero, lo cual seguramente no es lo que usted tenía
- previsto.</para>
-
- <para>Borrar un fichero es igualmente sencillo mediante
- <command>p4 delete</command>:</para>
-
- <screen>&prompt.user; <userinput>p4 delete nombredefichero</userinput></screen>
-
- <para>Esta orden marcará el fichero para que sea borrado del
- <quote>depósito</quote> la siguiente vez que se ejecute una
- entrega.
- También borrará la copia local del fichero, así que
- sea cauteloso cuando la use.</para>
-
- <para>Por supuesto que borrar un fichero no significa que se borre
- realmente del repositorio.</para>
-
- <para>Los ficheros borrados se pueden <quote>resucitar</quote>
- mediante la sincronización con una versión
- previa. La única forma de borrar de forma permanente un
- fichero es mediante la orden <command>p4 obliterat</command>.
- Dicha orden es irreversible y costosa, así que sólo
- está al alcance del personal que administra
- el repositorio.</para>
-</sect1>
-
-<sect1 xml:id="working-with-diffs">
- <title>El trabajo con <quote>diffs</quote></title>
-
- <para>Algunas veces puede ser necesario aplicar un <quote>diff</quote>
- al árbol
- de <application>Perfoce</application> que provenga de otra
- aplicación. Si se trata de un <quote>diff</quote>
- de gran tamaño y que afecta a muchos ficheros, puede resultar
- tedioso ejecutar manualmente <command>p4 edit</command> sobre cada
- fichero. Hay un truco para hacerlo de una forma más sencilla.
- En primer lugar, asegúrese de que no hay ficheros abiertos en su
- cliente y de que su árbol está sincronizado y actualizado a la
- última versión. A continuación aplique
- sus cambios mediante las herramientas habituales, y forzando los
- permisos de los ficheros en caso de ser necesario. Después
- ejecute lo siguiente:</para>
-
- <screen>&prompt.user; <userinput>p4 diff -se ... |xargs p4 edit</userinput>
-&prompt.user; <userinput>p4 diff -sd ... |xargs p4 delete</userinput>
-&prompt.user; <userinput>find . -type f |xargs p4 add</userinput></screen>
-
- <para>La primera orden le dice a
- <application>Perforce</application> que busque los ficheros que
- han cambiado, incluso si no están abiertos. La segunda
- orden le dice a <application>Perforce</application> que busque
- los ficheros que no existen en la máquina local pero que
- sí están en el servidor. La tercera orden intenta
- añadir todos los ficheros que están en local. Es
- un método de fuerza bruta, pero funciona bien porque
- <application>Perforce</application> sólo añadirá
- los ficheros que le resulten desconocidos. El resultado de estas
- órdenes es un conjunto de ficheros abiertos para edición,
- borrado o para ser añadidos, según el caso. Hecho
- esto solo nos queda ejecutar
- <command>p4 submit</command> para entregar los cambios.</para>
-</sect1>
-
-<sect1 xml:id="renaming-files">
- <title>Cambiar nombres de ficheros</title>
-
- <para><application>Perforce</application> no dispone de una forma
- predefinida de cambiar nombres a ficheros o de moverlos a otra parte
- del árbol. Si se copia el fichero en
- cuestión a una nueva ubicación mediante <command>p4
- add</command>, y posteriormente <command>p4
- delete</command> en la versión anterior, se obtiene
- algo muy parecido a lo que se quería, pero tiene el
- inconveniente de que no se preserva el historial de cambios
- de ese fichero. Esto puede perjudicar futuras integraciones entre
- padres e hijos. Hay otro método más recomendable,
- que consiste en efectuar una integración dentro del
- mismo árbol y de una sola vez. Veamos un ejemplo:</para>
-
- <screen>&prompt.user; <userinput>p4 integrate -i ficheroprevio ficheronuevo</userinput>
-&prompt.user; <userinput>p4 resolve</userinput>
-&prompt.user; <userinput>p4 delete ficheroprevio</userinput>
-&prompt.user; <userinput>p4 submit</userinput></screen>
-
- <para>La integración fuerza a <application>Perforce</application> a
- mantener un registro de las relaciones entre los nombres antiguos y
- los nuevos, lo cual será muy útil en futuras
- integraciones. La opción
- <option>-i</option> indica que se trata de una integración
- <quote>sin base</quote>, es decir, que no existe un historial de
- ramas al que recurrir en la integración. Este
- parámetro tiene sentido en el presente ejemplo, pero
- no debería utilizarse en integraciones basadas en ramas.</para>
-</sect1>
-
-<sect1 xml:id="freebsd-cvs-and-p4">
- <title>Interacciones entre el CVS de &os; y Perforce</title>
-
- <para>Los repositorios de
- <application>Perforce</application> y de CVS de &os; están
- completamente separados. No obstante, los cambios que se producen
- en CVS se reflejan casi en tiempo real en
- <application>Perforce</application>. Cada 2 minutos se pregunta al
- servidor de CVS sobre cambios realizados en la rama HEAD, y dichos
- cambios se entregan a <application>Perforce</application> dentro del
- árbol <filename>//depot/vendor/freebsd/...</filename>.
- De este modo este árbol permite la ramificación y
- la integración de proyectos derivados. Cualquier proyecto
- que implique la modificación del código fuente de
- &os; debería tener este árbol como su rama padre
- (o rama <quote>abuela</quote>, dependiendo
- de las necesidades concretas de cada proyecto), y deberían tener
- lugar integraciones periódicas y sincronizaciones para que el
- árbol esté en consonancia con el desarrollo de &os; y
- evitar conflictos en la medida de lo posible.</para>
-
- <para>El puente entre CVS y <application>Perforce</application> es
- de un sólo sentido; los cambios del CVS se reflejarán en
- <application>Perforce</application>, pero los cambios en
- <application>Perforce</application> no se reflejarán en el CVS.
- Si es necesario, se pueden exportar partes del repositorio de
- <application>Perforce</application> al
- <application>CVSup</application> y que así se puedan distribuir.
- Por favor, contacte con los
- administradores de <application>Perforce</application> de &os; si
- ese es su caso.</para>
-</sect1>
-
-<sect1 xml:id="offline-ops">
- <title>Funcionamiento sin conexión de red</title>
-
- <para>Uno de los inconvenientes de <application>Perforce</application> es
- que supone que siempre es posible acceder al servidor a través
- de la red. La mayoría de los estados, el historial y los
- metadatos se almacenan en el servidor y no existe mecanismo alguno
- para replicar el servidor como los hay en
- CVS/<application>CVSup</application>. Es posible
- ejecutar un servidor proxy, pero solamente ayuda un poco si se quiere
- trabajar sin conexión al servidor.</para>
-
- <para>La mejor forma de trabajar sin conexión de red es
- comprobando que el cliente no tiene ningún fichero abierto y
- que está totalmente sincronizado antes de dejar de estar
- conectado.
- Cuando se edite un fichero se deberán cambiar manualmente
- los permisos a lectura-escritura. Cuando vuelva a estar
- conectado ejecute la orden que se mostraba
- en la <xref linkend="working-with-diffs"/> para
- identificar automáticamente los ficheros que se han editado,
- añadido o eliminado.
- Es bastante común encontrarse con la sorpresa de que
- <application>Perforce</application> ha sobreescrito un fichero
- modificado en local que no se abrió en modo edición,
- así que tenga especial cuidado con esto.</para>
-</sect1>
-
-<sect1 xml:id="soc">
- <title>Consideraciones finales para el <quote>Google Summer of Code</quote></title>
-
- <para>La mayoría de los proyectos de &os; dentro del programa
- <quote>Google Summer of Code</quote> están en
- <filename>//depot/projects/soc2005/nombre_del_proyecto/...</filename>
- en el servidor &os; de <application>Perforce</application>.</para>
-
- <para>Entre las responsabilidades del mentor del proyecto
- está seleccionar un nombre adecuado para dicho proyecto y
- hacer que el estudiante sea capaz de trabajar con
- <application>Perforce</application>.</para>
-
- <para>El acceso al servidor &os; de
- <application>Perforce</application> no implica pasar a ser miembro
- de la comunidad de committers del CVS de &os;, aunque animamos
- de todo corazón a todos los estudiantes que consideren la
- posibilidad de unirse al proyecto cuando estén listos
- para ello.</para>
-</sect1>
-</article>