hgbook
diff es/collab.tex @ 417:7e838acf7350
translated more paragraphs of collab to spanish
author | Igor TAmara <igor@tamarapatino.org> |
---|---|
date | Thu Nov 13 23:09:45 2008 -0500 (2008-11-13) |
parents | c7234c5d01b2 |
children | 7f5d542be96b |
line diff
1.1 --- a/es/collab.tex Tue Nov 11 23:14:03 2008 -0500 1.2 +++ b/es/collab.tex Thu Nov 13 23:09:45 2008 -0500 1.3 @@ -116,192 +116,199 @@ 1.4 estable y contendrá además todos los arreglos de fallos de la rama 1.5 estable. La rama estable permanece incólume a tales cambios. 1.6 1.7 -\subsection{Feature branches} 1.8 - 1.9 -For larger projects, an effective way to manage change is to break up 1.10 -a team into smaller groups. Each group has a shared branch of its 1.11 -own, cloned from a single ``master'' branch used by the entire 1.12 -project. People working on an individual branch are typically quite 1.13 -isolated from developments on other branches. 1.14 +\subsection{Ramas de Características} 1.15 + 1.16 +En proyectos grandes, una forma efectiva de administrar los cambios es 1.17 +dividir el equipo en grupos más pequeños. Cada grupo tiene una rama 1.18 +compartida, clonada de una rama ``principal'' que conforma el proyecto 1.19 +completo. Aquellos que trabajan en ramas individuales típicamente 1.20 +están aislados de los desarrollos de otras ramas. 1.21 1.22 \begin{figure}[ht] 1.23 \centering 1.24 \grafix{feature-branches} 1.25 - \caption{Feature branches} 1.26 + \caption{Ramas de Características} 1.27 \label{fig:collab:feature-branches} 1.28 \end{figure} 1.29 1.30 -When a particular feature is deemed to be in suitable shape, someone 1.31 -on that feature team pulls and merges from the master branch into the 1.32 -feature branch, then pushes back up to the master branch. 1.33 - 1.34 -\subsection{The release train} 1.35 - 1.36 -Some projects are organised on a ``train'' basis: a release is 1.37 -scheduled to happen every few months, and whatever features are ready 1.38 -when the ``train'' is ready to leave are allowed in. 1.39 - 1.40 -This model resembles working with feature branches. The difference is 1.41 -that when a feature branch misses a train, someone on the feature team 1.42 -pulls and merges the changes that went out on that train release into 1.43 -the feature branch, and the team continues its work on top of that 1.44 -release so that their feature can make the next release. 1.45 - 1.46 -\subsection{The Linux kernel model} 1.47 - 1.48 -The development of the Linux kernel has a shallow hierarchical 1.49 -structure, surrounded by a cloud of apparent chaos. Because most 1.50 -Linux developers use \command{git}, a distributed revision control 1.51 -tool with capabilities similar to Mercurial, it's useful to describe 1.52 -the way work flows in that environment; if you like the ideas, the 1.53 -approach translates well across tools. 1.54 - 1.55 -At the center of the community sits Linus Torvalds, the creator of 1.56 -Linux. He publishes a single source repository that is considered the 1.57 -``authoritative'' current tree by the entire developer community. 1.58 -Anyone can clone Linus's tree, but he is very choosy about whose trees 1.59 -he pulls from. 1.60 - 1.61 -Linus has a number of ``trusted lieutenants''. As a general rule, he 1.62 -pulls whatever changes they publish, in most cases without even 1.63 -reviewing those changes. Some of those lieutenants are generally 1.64 -agreed to be ``maintainers'', responsible for specific subsystems 1.65 -within the kernel. If a random kernel hacker wants to make a change 1.66 -to a subsystem that they want to end up in Linus's tree, they must 1.67 -find out who the subsystem's maintainer is, and ask that maintainer to 1.68 -take their change. If the maintainer reviews their changes and agrees 1.69 -to take them, they'll pass them along to Linus in due course. 1.70 - 1.71 -Individual lieutenants have their own approaches to reviewing, 1.72 -accepting, and publishing changes; and for deciding when to feed them 1.73 -to Linus. In addition, there are several well known branches that 1.74 -people use for different purposes. For example, a few people maintain 1.75 -``stable'' repositories of older versions of the kernel, to which they 1.76 -apply critical fixes as needed. Some maintainers publish multiple 1.77 -trees: one for experimental changes; one for changes that they are 1.78 -about to feed upstream; and so on. Others just publish a single 1.79 -tree. 1.80 - 1.81 -This model has two notable features. The first is that it's ``pull 1.82 -only''. You have to ask, convince, or beg another developer to take a 1.83 -change from you, because there are almost no trees to which more than 1.84 -one person can push, and there's no way to push changes into a tree 1.85 -that someone else controls. 1.86 - 1.87 -The second is that it's based on reputation and acclaim. If you're an 1.88 -unknown, Linus will probably ignore changes from you without even 1.89 -responding. But a subsystem maintainer will probably review them, and 1.90 -will likely take them if they pass their criteria for suitability. 1.91 -The more ``good'' changes you contribute to a maintainer, the more 1.92 -likely they are to trust your judgment and accept your changes. If 1.93 -you're well-known and maintain a long-lived branch for something Linus 1.94 -hasn't yet accepted, people with similar interests may pull your 1.95 -changes regularly to keep up with your work. 1.96 - 1.97 -Reputation and acclaim don't necessarily cross subsystem or ``people'' 1.98 -boundaries. If you're a respected but specialised storage hacker, and 1.99 -you try to fix a networking bug, that change will receive a level of 1.100 -scrutiny from a network maintainer comparable to a change from a 1.101 -complete stranger. 1.102 - 1.103 -To people who come from more orderly project backgrounds, the 1.104 -comparatively chaotic Linux kernel development process often seems 1.105 -completely insane. It's subject to the whims of individuals; people 1.106 -make sweeping changes whenever they deem it appropriate; and the pace 1.107 -of development is astounding. And yet Linux is a highly successful, 1.108 -well-regarded piece of software. 1.109 - 1.110 -\subsection{Pull-only versus shared-push collaboration} 1.111 - 1.112 -A perpetual source of heat in the open source community is whether a 1.113 -development model in which people only ever pull changes from others 1.114 -is ``better than'' one in which multiple people can push changes to a 1.115 -shared repository. 1.116 - 1.117 -Typically, the backers of the shared-push model use tools that 1.118 -actively enforce this approach. If you're using a centralised 1.119 -revision control tool such as Subversion, there's no way to make a 1.120 -choice over which model you'll use: the tool gives you shared-push, 1.121 -and if you want to do anything else, you'll have to roll your own 1.122 -approach on top (such as applying a patch by hand). 1.123 - 1.124 -A good distributed revision control tool, such as Mercurial, will 1.125 -support both models. You and your collaborators can then structure 1.126 -how you work together based on your own needs and preferences, not on 1.127 -what contortions your tools force you into. 1.128 - 1.129 -\subsection{Where collaboration meets branch management} 1.130 - 1.131 -Once you and your team set up some shared repositories and start 1.132 -propagating changes back and forth between local and shared repos, you 1.133 -begin to face a related, but slightly different challenge: that of 1.134 -managing the multiple directions in which your team may be moving at 1.135 -once. Even though this subject is intimately related to how your team 1.136 -collaborates, it's dense enough to merit treatment of its own, in 1.137 -chapter~\ref{chap:branch}. 1.138 - 1.139 -\section{The technical side of sharing} 1.140 - 1.141 -The remainder of this chapter is devoted to the question of serving 1.142 -data to your collaborators. 1.143 - 1.144 -\section{Informal sharing with \hgcmd{serve}} 1.145 +Cuando una rama particular alcanza un estado deseado, alguien del 1.146 +equipo de características jala y fusiona de la rama principal hacia 1.147 +la rama de características y publica posteriormente a la rama principal. 1.148 + 1.149 +\subsection{El tren de publicación} 1.150 + 1.151 +Algunos proyectos se organizan al estilo``tren'': Una versión se 1.152 +planifica para ser liberada cada cierto tiempo, y las características 1.153 +que estén listas cuando ha llegado el momento ``tren'', se incorporan. 1.154 + 1.155 +Este modelo tiene cierta similitud a las ramas de características. La 1.156 +diferencia es que cuando una característica pierde el tren, alguien en 1.157 +el equipo de características jala y fusiona los cambios que se fueron 1.158 +en la versión liberada hacia la rama de característica, y el trabajo 1.159 +continúa sobre lo fusionado para que la característica logre estar en 1.160 +la próxima versión. 1.161 + 1.162 +\subsection{El modelo del kernel linux} 1.163 + 1.164 +El desarrollo del Kernel Linux tiene una estructura jerárquica 1.165 +bastante horizontal, rodeada de una nube de caos aparente. Dado que la 1.166 +mayoría de desarrolladores usan \command{git}, una herramienta distribuida 1.167 +de control de versiones con capacidades similares a Mercurial, resulta 1.168 +de utilidad describir la forma en que el trabajo fluye en tal 1.169 +ambiente; si le gustan las ideas, la aproximación se traduce bien 1.170 +entre Git y Mercurial. 1.171 + 1.172 +En el centro de la comunidad está Linus Torvalds, el creador de Linux. 1.173 +Él publica un único repositorio que es considerado el árbol 1.174 +``oficial'' actual por la comunidad completa de 1.175 +desarrolladores. Cualquiera puede clonar el árbol de Linus, pero él es 1.176 +muy selectivo acerca de los árboles de los cuales jala. 1.177 + 1.178 +Linux tiene varios ``lugartenientes confiables''. Como regla, él jala 1.179 +todos los cambios que ellos publican, en la mayoría de los casos sin 1.180 +siquiera revisarlos. Algunos de sus lugartenientes generalmente 1.181 +aceptan ser los ``mantenedores'', responsables de subsistemas 1.182 +específicos dentro del kernel. Si un hacker cualquiera desea hacer un 1.183 +cambio a un subsistema y busca que termine en el árbol de Linus, debe 1.184 +encontrar quien es el mantenedor del subsistema y solicitarle que 1.185 +tenga en cuenta su cambio. Si el mantenedor revisa los cambios y está 1.186 +de acuerdo en tomarlos, estos pasarán al árbol de Linus de acuerdo a 1.187 +lo expuesto. 1.188 + 1.189 +Cada lugarteniente tiene su forma particular de revisar, aceptar y 1.190 +publicar los cambios; y para decidir cuando hacerlos presentes a 1.191 +Linus. Adicionalmente existen varias ramas conocidas que mucha gente 1.192 +usa para propósitos distintos. Por ejemplo, pocas personas mantienen 1.193 +repositorios ``estables'' de versiones anteriores del kernel, a los 1.194 +cuales aplican arreglos de fallos críticos necesarios. Algunos 1.195 +mantenedores publican varios árboles: uno para cambios 1.196 +experimentales; uno para cambios que van a ofrecer al mantenedor 1.197 +principal; y así sucesivamente. Otros publican un solo árbol. 1.198 + 1.199 +Este modelo tiene dos características notables. La primera es que son 1.200 +de ``jalar exclusivamente''. Usted debe solicitar, convencer o 1.201 +incluso rogar a otro desarrollador para que tome sus cabmios, porque 1.202 +casi no hay árboles en los cuales más de una persona pueda publicar, y 1.203 +no hay forma de publicar cambios en un árbol que otra persona controla. 1.204 + 1.205 +El segundo está basado en reputación y meritocracia. Si usted es un 1.206 +desconocido, Linus probablemente ignorará sus cambios, sin siquiera 1.207 +responderle. Pero un mantenedor de un subsistema probablemente los 1.208 +revisara, y los acogerá en caso de que aprueben su criterio de 1.209 +aplicabilidad. A medida que usted ofrezca ``mejores'' cambios a un 1.210 +mantenedor, habrá más posibilidad de que se confie en su juicio y se 1.211 +acepten los cambios. Si usted es reconocido y matiene una rama 1.212 +durante bastante tiempo para algo que Linus no ha aceptado, personas 1.213 +con intereses similares pueden jalar sus cambios regularmente para 1.214 +estar al día con su trabajo. 1.215 + 1.216 +La reputación y meritocracia no necesariamente es transversal entre 1.217 +``personas'' de diferentes subsistemas. Si usted es respetado pero es 1.218 +un hacker en almacenamiento y trata de arreglar un fallo de redes, 1.219 +tal cambio puede recibir un nivel de escrutinio de un mantenedor de 1.220 +redes comparable con el que se le haría a un completo extraño. 1.221 + 1.222 +Personas que vienen de proyectos con un ordenamiento distinto, sienten 1.223 +que el proceso comparativamente caótico del Kernel Linux es 1.224 +completamente lunático. Es objeto de los caprichos individuales; la 1.225 +gente desecha cambios cuando lo desean; y la fase de desarrollo es 1.226 +alucinante. A pesar de eso Linux es una pieza de software exitosa y 1.227 +bien reconocida. 1.228 + 1.229 +\subsection{Solamente jalar frente a colaboración pública} 1.230 + 1.231 +Una fuente perpetua de discusiones en la comunidad de código abierto 1.232 +yace en el modelo de desarrollo en el cual la gente solamente jala 1.233 +cambios de otros ``es mejor que'' uno en el cual muchas personas 1.234 +pueden publicar cambios a un repositorio compartido. 1.235 + 1.236 +Tícamente los partidarios del modelo de publicar usan las herramientas 1.237 +que se apegan a este modelo. Si usted usa una herramienta 1.238 +centralizada de control de versiones como Subversion, no hay forma de 1.239 +elegir qué modelo va a usar: La herramienta le ofrece publicación 1.240 +compartida, y si desea hacer cualquier otra cosa, va a tener que 1.241 +aplicar una aproximación artificial (tal como aplicar parches a mano). 1.242 + 1.243 +Una buena herramienta distribuida de control de versiones, tal como 1.244 +Mercurial soportará los dos modelos. Usted y sus colaboradores 1.245 +pueden estructurar cómo trabajarán juntos basados en sus propias 1.246 +necesidades y preferencias, sin depender de las peripecias que la 1.247 +herramienta les obligue a hacer. 1.248 + 1.249 +\subsection{Cuando la colaboración encuentra la administración ramificada} 1.250 + 1.251 +Una vez que usted y su equipo configurar algunos repositorios 1.252 +compartidos y comienzan a propagar cambios entre sus repositorios 1.253 +locales y compartidos, comenzará a encarar un reto relacionado, pero 1.254 +un poco distinto: Administrar las direcciones en las cuales su equipo 1.255 +puede moverse. A pesar de que está intimamente ligado acerca de cómo 1.256 +interactúa su equipo, es lo suficientemente denso para ameritar un 1.257 +tratamiento en el capítulo~\ref{chap:branch}. 1.258 + 1.259 +\section{Aspectos técnicos de la colaboración} 1.260 + 1.261 +Lo que resta del capítulo lo dedicamos a las cuestiones de servir 1.262 +datos a sus colaboradores. 1.263 + 1.264 +\section{Compartir informalmente con \hgcmd{serve}} 1.265 \label{sec:collab:serve} 1.266 1.267 -Mercurial's \hgcmd{serve} command is wonderfully suited to small, 1.268 -tight-knit, and fast-paced group environments. It also provides a 1.269 -great way to get a feel for using Mercurial commands over a network. 1.270 - 1.271 -Run \hgcmd{serve} inside a repository, and in under a second it will 1.272 -bring up a specialised HTTP server; this will accept connections from 1.273 -any client, and serve up data for that repository until you terminate 1.274 -it. Anyone who knows the URL of the server you just started, and can 1.275 -talk to your computer over the network, can then use a web browser or 1.276 -Mercurial to read data from that repository. A URL for a 1.277 -\hgcmd{serve} instance running on a laptop is likely to look something 1.278 -like \Verb|http://my-laptop.local:8000/|. 1.279 - 1.280 -The \hgcmd{serve} command is \emph{not} a general-purpose web server. 1.281 -It can do only two things: 1.282 +La orden \hgcmd{serve} de Mercurial satisface de forma espectacular 1.283 +las necesidades de un grupo pequeño, acoplado y de corto 1.284 +tiempo. Se constituye en una demostración de cómo se siente usar los 1.285 +comandos usando la red. 1.286 + 1.287 +Ejecute \hgcmd{serve} dentro de un repositorio, y en pocos segundos 1.288 +iniciará un servidor HTTP especializado; aceptará conexiones desde 1.289 +cualquier cliente y servirá datos de este repositorio mientrs lo 1.290 +mantenga funcionando. Todo el que sepa el URL del servidor que ha 1.291 +iniciado, y que puede comunicarse con su computador por la red, puede 1.292 +usar un navegador web o Mercurial para leer datos del repositorio. Un 1.293 +URL para una instancia de \hgcmd{serve} ejecutándose en un portátil 1.294 +debería lucir algo \Verb|http://my-laptop.local:8000/|. 1.295 + 1.296 +La orden \hgcmd{serve} \emph{no} es un servidor web de propósito 1.297 +general. Solamente puede hacer dos cosas: 1.298 \begin{itemize} 1.299 -\item Allow people to browse the history of the repository it's 1.300 - serving, from their normal web browsers. 1.301 -\item Speak Mercurial's wire protocol, so that people can 1.302 - \hgcmd{clone} or \hgcmd{pull} changes from that repository. 1.303 +\item Permitir que se pueda visualizar la historia del repositorio que 1.304 + está sirviendo desde navegadores web. 1.305 +\item Hablar el protocolo de conexión de Mercurial para que puedan hacer 1.306 + \hgcmd{clone} o \hgcmd{pull} (jalar) cambios de tal repositorio. 1.307 \end{itemize} 1.308 -In particular, \hgcmd{serve} won't allow remote users to \emph{modify} 1.309 -your repository. It's intended for read-only use. 1.310 - 1.311 -If you're getting started with Mercurial, there's nothing to prevent 1.312 -you from using \hgcmd{serve} to serve up a repository on your own 1.313 -computer, then use commands like \hgcmd{clone}, \hgcmd{incoming}, and 1.314 -so on to talk to that server as if the repository was hosted remotely. 1.315 -This can help you to quickly get acquainted with using commands on 1.316 -network-hosted repositories. 1.317 - 1.318 -\subsection{A few things to keep in mind} 1.319 - 1.320 -Because it provides unauthenticated read access to all clients, you 1.321 -should only use \hgcmd{serve} in an environment where you either don't 1.322 -care, or have complete control over, who can access your network and 1.323 -pull data from your repository. 1.324 - 1.325 -The \hgcmd{serve} command knows nothing about any firewall software 1.326 -you might have installed on your system or network. It cannot detect 1.327 -or control your firewall software. If other people are unable to talk 1.328 -to a running \hgcmd{serve} instance, the second thing you should do 1.329 -(\emph{after} you make sure that they're using the correct URL) is 1.330 -check your firewall configuration. 1.331 - 1.332 -By default, \hgcmd{serve} listens for incoming connections on 1.333 -port~8000. If another process is already listening on the port you 1.334 -want to use, you can specify a different port to listen on using the 1.335 -\hgopt{serve}{-p} option. 1.336 - 1.337 -Normally, when \hgcmd{serve} starts, it prints no output, which can be 1.338 -a bit unnerving. If you'd like to confirm that it is indeed running 1.339 -correctly, and find out what URL you should send to your 1.340 -collaborators, start it with the \hggopt{-v} option. 1.341 +En particular, \hgcmd{serve} no permitirá que los usuarios remotos 1.342 +puedan \emph{modificar} su repositorio. Es de tipo solo lectura. 1.343 + 1.344 +Si está comenzando con Mercurial, no hay nada que le impida usar 1.345 +\hgcmd{serve} para servir un repositorio en su propio computador, y 1.346 +usar posteriormente órdenes como \hgcmd{clone}, \hgcmd{incoming}, para 1.347 +comunicarse con el servidor como si el repositorio estuviera alojado 1.348 +remotamente. Lo que además puede ayudarle a adecuarse rápidamente para 1.349 +usar comandos en repositorios alojados en la red. 1.350 + 1.351 +\subsection{Cuestiones adicionales para tener en cuenta} 1.352 + 1.353 +Dado que permite lectura sin autenticación a todos sus clientes, 1.354 +debería usar \hgcmd{serve} exclusivamente en ambientes en los cuáles 1.355 +no tenga problema en que otros vean, o en los cuales tenga control 1.356 +completo acerca de quien puede acceder a su red y jalar cambios de su 1.357 +repositorio. 1.358 + 1.359 +La orden \hgcmd{serve} no tiene conocimiento acerca de programas 1.360 +cortafuegos que puedan estar instalados en su sistema o en su red. No 1.361 +puede detectar o controlar sus cortafuegos. Si otras personas no 1.362 +pueden acceder a su instancia \hgcmd{serve}, lo siguiente que debería hacer 1.363 +(\emph{después} de asegurarse que tienen el URL correcto) es verificar 1.364 +su configuración de cortafuegos. 1.365 + 1.366 +De forma predeterminada, \hgcmd{serve} escucha conexiones entrantes en 1.367 +el puerto~8000. Si otro proceso está escuchando en tal puerto, usted 1.368 +podrá especificar un puerto distinto para escuchar con la opción 1.369 +\hgopt{serve}{-p} . 1.370 + 1.371 +Normalmente, cuando se inicia \hgcmd{serve}, no imprime nada, lo cual 1.372 +puede ser desconcertante. Si desea confirmar que en efecto está 1.373 +ejecutándose correctamente, y darse cuenta qué URL debería enviar a 1.374 +sus colaboradores, inícielo con la opción \hggopt{-v}. 1.375 1.376 \section{Using the Secure Shell (ssh) protocol} 1.377 \label{sec:collab:ssh}