svn commit: r52295 - in head/pt_BR.ISO8859-1/articles: . committers-guide

Edson Brandi ebrandi at FreeBSD.org
Sun Sep 23 18:41:55 UTC 2018


Author: ebrandi
Date: Sun Sep 23 18:41:53 2018
New Revision: 52295
URL: https://svnweb.freebsd.org/changeset/doc/52295

Log:
  pt_BR.ISO8859-1/articles/committers-guide: New pt_BR translation into .po format
  
  * content synchronized with en_US document (rev 52061)
  * article.xml converted to .po
  * .po file was translated to pt_BR
  * .po and .xml file has been set to UTF-8 encoding
  * information about volunteers who translated and/or revised the document was added to the header of the .po file
  
  Approved by: gabor (mentor, implicit)
  Obtained from: The FreeBSD Brazilian Portuguese Documentation Project

Added:
  head/pt_BR.ISO8859-1/articles/committers-guide/
  head/pt_BR.ISO8859-1/articles/committers-guide/Makefile   (contents, props changed)
  head/pt_BR.ISO8859-1/articles/committers-guide/article.xml   (contents, props changed)
  head/pt_BR.ISO8859-1/articles/committers-guide/pt_BR.po   (contents, props changed)
Modified:
  head/pt_BR.ISO8859-1/articles/Makefile

Modified: head/pt_BR.ISO8859-1/articles/Makefile
==============================================================================
--- head/pt_BR.ISO8859-1/articles/Makefile	Sun Sep 23 18:19:12 2018	(r52294)
+++ head/pt_BR.ISO8859-1/articles/Makefile	Sun Sep 23 18:41:53 2018	(r52295)
@@ -7,6 +7,7 @@
 SUBDIR =
 SUBDIR+= bsdl-gpl
 SUBDIR+= building-products
+SUBDIR+= committers-guide
 SUBDIR+= contributing
 SUBDIR+= contributors
 SUBDIR+= cups

Added: head/pt_BR.ISO8859-1/articles/committers-guide/Makefile
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/pt_BR.ISO8859-1/articles/committers-guide/Makefile	Sun Sep 23 18:41:53 2018	(r52295)
@@ -0,0 +1,24 @@
+#
+# The FreeBSD Documentation Project
+# The FreeBSD Brazilian Portuguese Documentation Project
+#
+# $FreeBSD$
+#
+# Article: Commiters Guide
+
+MAINTAINER=ebrandi at FreeBSD.org
+
+DOC?= article
+
+FORMATS?= html html-split
+WITH_ARTICLE_TOC?= YES
+
+INSTALL_COMPRESSED?= gz
+INSTALL_ONLY_COMPRESSED?=
+
+SRCS=	article.xml
+
+URL_RELPREFIX?=	../../../..
+DOC_PREFIX?=	${.CURDIR}/../../..
+
+.include "${DOC_PREFIX}/share/mk/doc.project.mk"

Added: head/pt_BR.ISO8859-1/articles/committers-guide/article.xml
==============================================================================
--- /dev/null	00:00:00 1970	(empty, because file is newly added)
+++ head/pt_BR.ISO8859-1/articles/committers-guide/article.xml	Sun Sep 23 18:41:53 2018	(r52295)
@@ -0,0 +1,3056 @@
+<?xml version="1.0" encoding="utf-8"?>
+<!DOCTYPE article PUBLIC "-//FreeBSD//DTD DocBook XML V5.0-Based Extension//EN" "http://www.FreeBSD.org/XML/share/xml/freebsd50.dtd" [
+<!ENTITY ga "Google Analytics">
+]>
+<article xmlns="http://docbook.org/ns/docbook" xmlns:xlink="http://www.w3.org/1999/xlink" xmlns:its="http://www.w3.org/2005/11/its" version="5.0" xml:lang="pt_BR">
+
+  <info>
+    <title>Guia dos Committers</title>
+
+    <author><orgname>Projeto de Documentação do FreeBSD</orgname></author>
+
+    <copyright><year>1999</year> <year>2000</year> <year>2001</year> <year>2002</year> <year>2003</year> <year>2004</year> <year>2005</year> <year>2006</year> <year>2007</year> <year>2008</year> <year>2009</year> <year>2010</year> <year>2011</year> <year>2012</year> <year>2013</year> <year>2014</year> <year>2015</year> <year>2016</year> <year>2017</year> <year>2018</year> <holder>Projeto de Documentação do FreeBSD</holder></copyright>
+
+    <legalnotice xml:id="trademarks" role="trademarks">
+      <para>FreeBSD is a registered trademark of the FreeBSD Foundation.</para>
+      <para>Coverity is a registered trademark; Coverity Extend, Coverity Prevent and Coverity Prevent SQS are trademarks of Coverity, Inc.</para>
+      <para>IBM, AIX, OS/2, PowerPC, PS/2, S/390, and ThinkPad are trademarks of International Business Machines Corporation in the United States, other countries, or both.</para>
+      <para>Intel, Celeron, Centrino, Core, EtherExpress, i386, i486, Itanium, Pentium, and Xeon are trademarks or registered trademarks of Intel Corporation or its subsidiaries in the United States and other countries.</para>
+      <para>SPARC, SPARC64, and UltraSPARC are trademarks of SPARC International, Inc in the United States and other countries. SPARC International, Inc owns all of the SPARC trademarks and under licensing agreements allows the proper use of these trademarks by its members.</para>
+      <para>Many of the designations used by manufacturers and sellers to distinguish their products are claimed as trademarks. Where those designations appear in this document, and the FreeBSD Project was aware of the trademark claim, the designations have been followed by the <quote>™</quote> or the <quote>®</quote> symbol.</para>
+    </legalnotice>
+
+    <pubdate>$FreeBSD$</pubdate>
+
+    <releaseinfo>$FreeBSD$</releaseinfo>
+
+    <abstract>
+      <para>Este documento fornece informações para a comunidade de committers do FreeBSD. Todos os novos committers devem ler este documento antes de começar, e os committers existentes são fortemente encorajados a revisá-lo de tempos em tempos.</para>
+
+      <para>Quase todos os desenvolvedores do FreeBSD possuem direitos de commit para um ou mais repositórios. No entanto, alguns desenvolvedores não tem, e algumas das informações aqui se aplicam a eles também. (Por exemplo, algumas pessoas só têm direitos para trabalhar com o banco de dados do Relatório de Problemas). Por favor, veja <xref linkend="non-committers"/> para mais informações.</para>
+
+      <para>Este documento também pode ser de interesse para os membros da comunidade FreeBSD que querem aprender mais sobre como o projeto funciona.</para>
+    </abstract>
+  </info>
+
+  <sect1 xml:id="admin">
+    <title>Detalhes Administrativos</title>
+
+    <informaltable frame="none" orient="port" pgwide="1">
+      <tgroup cols="2">
+	<colspec colwidth="20*"/>
+	<colspec colwidth="80*"/>
+	<tbody>
+	  <row>
+	    <entry><emphasis>Métodos de login</emphasis></entry>
+	    <entry><citerefentry><refentrytitle>ssh</refentrytitle><manvolnum>1</manvolnum> </citerefentry>,_apenas no protocolo 2</entry>
+	  </row>
+
+	  <row>
+	    <entry><emphasis>Servidor Principal de Shell</emphasis></entry>
+	    <entry><systemitem class="fqdomainname">freefall.FreeBSD.org</systemitem></entry>
+	  </row>
+
+	  <row>
+	    <entry><emphasis>Raiz do Subversion para o <literal>src/</literal></emphasis></entry>
+	    <entry><literal>svn+ssh://</literal><systemitem class="fqdomainname">repo.FreeBSD.org</systemitem><filename>/base</filename> (veja também <xref linkend="svn-getting-started-base-layout"/>).</entry>
+	  </row>
+
+	  <row>
+	    <entry><emphasis>Raiz do Subversion para o <literal>doc/</literal></emphasis></entry>
+	    <entry><literal>svn+ssh://</literal><systemitem class="fqdomainname">repo.FreeBSD.org</systemitem><filename>/doc</filename> (veja também <xref linkend="svn-getting-started-doc-layout"/>).</entry>
+	  </row>
+
+	  <row>
+	    <entry><emphasis>Raiz do Subversion para o <literal>ports/</literal></emphasis></entry>
+
+	    <entry><literal>svn+ssh://</literal><systemitem class="fqdomainname">repo.FreeBSD.org</systemitem><filename>/ports</filename> (veja também <xref linkend="svn-getting-started-ports-layout"/>).</entry>
+	  </row>
+
+	  <row>
+	    <entry><emphasis>Listas de Discussão Internas</emphasis></entry>
+	    <entry>developers (tecnicamente chamada de all-developers), doc-developers, doc-committers, ports-developers, ports-committers, src-developers, src-committers. (cada repositório do projeto tem as suas próprias listas de discussão -developers e -committers. Os arquivos destas listas podem ser encontrados nos arquivos <filename>/local/mail/<replaceable>repository-name</replaceable>-developers-archive</filename> e <filename>/local/mail/<replaceable>repository-name</replaceable>-committers-archive</filename> no cluster <systemitem class="fqdomainname">FreeBSD.org</systemitem>.)</entry>
+	  </row>
+
+
+	  <row>
+	    <entry><emphasis>Relatórios mensais do Core Team</emphasis></entry>
+	    <entry>Disponíveis no diretório <filename>/home/core/public/monthly-reports</filename> do cluster <systemitem class="fqdomainname">FreeBSD.org</systemitem>.</entry>
+	  </row>
+
+	  <row>
+	    <entry><emphasis>Relatórios mensais da Equipe de Gestão do Ports</emphasis></entry>
+	    <entry>Disponíveis no diretório <filename>/home/portmgr/public/monthly-reports</filename> do cluster <systemitem class="fqdomainname">FreeBSD.org</systemitem>.</entry>
+	  </row>
+
+	  <row>
+	    <entry><emphasis>Branchs SVN do <literal>src/</literal> dignas de atenção</emphasis></entry>
+	    <entry><literal>stable/</literal><replaceable>n</replaceable> (<replaceable>n</replaceable>-STABLE), <literal>head</literal> (-CURRENT)</entry>
+	  </row>
+	</tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>O <citerefentry><refentrytitle>ssh</refentrytitle><manvolnum>1</manvolnum></citerefentry> é necessário para se conectar aos servidores do projeto. Para mais informações, veja <xref linkend="ssh.guide"/>.</para>
+
+    <para>Links Úteis:</para>
+
+    <itemizedlist>
+      <listitem>
+	<para><link xlink:href="@@URL_RELPREFIX@@/internal/">Páginas Internas do Projeto FreeBSD</link></para>
+      </listitem>
+
+      <listitem>
+	<para><link xlink:href="@@URL_RELPREFIX@@/internal/machines.html">Servidores do Projeto FreeBSD</link></para>
+      </listitem>
+
+      <listitem>
+	<para><link xlink:href="@@URL_RELPREFIX@@/administration.html">Grupos Administrativos do Projeto FreeBSD</link></para>
+      </listitem>
+    </itemizedlist>
+  </sect1>
+
+  <sect1 xml:id="pgpkeys">
+    <title>Chaves Open<acronym>PGP</acronym> para o FreeBSD</title>
+
+    <para>O projeto FreeBSD utiliza chaves criptográficas em conformidade com o padrão Open<acronym>PGP</acronym> (<emphasis>Pretty Good Privacy</emphasis>) para autenticar os committers. Mensagens contendo informações importantes como chaves públicas <acronym>SSH</acronym> podem ser assinadas com uma chave Open<acronym>PGP</acronym> para provar que elas vieram realmente do committer. Veja <link xlink:href="http://www.nostarch.com/pgp_ml.htm">PGP & GPG: Email for the Practical Paranoid by Michael Lucas</link> e <link xlink:href="http://en.wikipedia.org/wiki/Pretty_Good_Privacy"/> para maiores informações.</para>
+
+    <sect2 xml:id="pgpkeys-creating">
+      <title>Criando uma chave</title>
+
+      <para>As chaves existentes podem ser usadas, mas elas devem ser obtidas com o <filename>doc/head/share/pgpkeys/checkkey.sh</filename> primeiro.</para>
+
+      <para>Para quem ainda não tem uma chave Open<acronym>PGP</acronym>, ou precisa de uma nova chave para atender aos requisitos de segurança do FreeBSD, nesta seção iremos mostrar como gerar uma.</para>
+
+      <procedure xml:id="pgpkeys-create-steps">
+
+	<step>
+	  <para>Instale o  <filename role="package">security/gnupg</filename>. Digite estas linhas no <filename>~/.gnupg/gpg.conf</filename> para definir padrões mínimos aceitáveis:</para>
+
+	  <programlisting>fixed-list-mode
+keyid-format 0xlong
+personal-digest-preferences SHA512 SHA384 SHA256 SHA224
+default-preference-list SHA512 SHA384 SHA256 SHA224 AES256 AES192 AES CAST5 BZIP2 ZLIB ZIP Uncompressed
+use-agent
+verify-options show-uid-validity
+list-options show-uid-validity
+sig-notation issuer-fpr at notations.openpgp.fifthhorseman.net=%g
+cert-digest-algo SHA512</programlisting>
+	</step>
+
+	<step>
+	  <para>Gere uma chave:</para>
+
+	  <screen><prompt>%</prompt> <userinput>gpg --full-gen-key</userinput>
+gpg (GnuPG) 2.1.8; Copyright (C) 2015 Free Software Foundation, Inc.
+This is free software: you are free to change and redistribute it.
+There is NO WARRANTY, to the extent permitted by law.
+
+Warning: using insecure memory!
+Please select what kind of key you want:
+   (1) RSA and RSA (default)
+   (2) DSA and Elgamal
+   (3) DSA (sign only)
+   (4) RSA (sign only)
+Your selection? <userinput>1</userinput>
+RSA keys may be between 1024 and 4096 bits long.
+What keysize do you want? (2048) <userinput>2048</userinput>  <co xml:id="co-pgp-bits"/>
+Requested keysize is 2048 bits
+Please specify how long the key should be valid.
+         0 = key does not expire
+      <n>  = key expires in n days
+      <n>w = key expires in n weeks
+      <n>m = key expires in n months
+      <n>y = key expires in n years
+Key is valid for? (0) <userinput>3y</userinput>  <co xml:id="co-pgp-expire"/>
+Key expires at Wed Nov  4 17:20:20 2015 MST
+Is this correct? (y/N) <userinput>y</userinput>
+
+GnuPG needs to construct a user ID to identify your key.
+
+Real name: <userinput><replaceable>Chucky Daemon</replaceable></userinput> <co xml:id="co-pgp-realname"/>
+Email address: <userinput><replaceable>notreal at example.com</replaceable></userinput>
+Comment:
+You selected this USER-ID:
+    "<replaceable>Chucky Daemon <notreal at example.com></replaceable>"
+
+Change (N)ame, (C)omment, (E)mail or (O)kay/(Q)uit? <userinput>o</userinput>
+You need a Passphrase to protect your secret key.</screen>
+
+	  <calloutlist>
+	    <callout arearefs="co-pgp-bits">
+	      <para>Chaves de 2048-bit com uma expiração de 3 anos proveem uma proteção adequada nos dias de hoje (2013-12). O artigo <link xlink:href="http://danielpocock.com/rsa-key-sizes-2048-or-4096-bits"/> descreve a situação em mais detalhes.</para>
+	    </callout>
+
+	    <callout arearefs="co-pgp-expire">
+	      <para>Três anos é um tempo de vida para a chave que é curto o suficiente para tornar obsoletas as chaves enfraquecidas pelo avanço do poder computacional, mas é tempo suficiente para reduzir os principais problemas de gerenciamento.</para>
+	    </callout>
+
+	    <callout arearefs="co-pgp-realname">
+	      <para>Use o seu nome real, preferencialmente o mesmo que consta do seu documento de identificação (<acronym>ID</acronym>) emitido pelo seu governo para tornar mais fácil para as outras pessoas confirmarem sua identidade. Você pode inserir um texto adicional para ajudar outras pessoas a identificar você na seção <literal>Comment</literal>.</para>
+	    </callout>
+	  </calloutlist>
+
+	  <para>Depois que o endereço de e-mail é inserido, uma senha é solicitada. Os métodos de criação de uma frase secreta segura são controversos. Em vez de sugerir um único caminho, aqui estão alguns links para sites que descrevem vários métodos:<link xlink:href="http://world.std.com/~reinhold/diceware.html"/>, <link xlink:href="http://www.iusmentis.com/security/passphrasefaq/"/>, <link xlink:href="http://xkcd.com/936/"/> e <link xlink:href="http://en.wikipedia.org/wiki/Passphrase"/>.</para>
+	</step>
+      </procedure>
+
+      <para>Proteja a chave privada e a frase secreta. Se a chave privada ou a frase secreta pode ter sido comprometida ou exposta, notifique imediatamente 
+ <email>accounts at FreeBSD.org</email> e revogue a chave.</para>
+
+      <para>O processo para commit da nova chave é mostrado em <xref linkend="commit-steps"/>.</para>
+    </sect2>
+  </sect1>
+
+  <sect1 xml:id="kerberos-ldap">
+    <title>Kerberos e LDAP Web Password para o cluster do FreeBSD</title>
+
+    <para>O cluster do FreeBSD requer uma senha do Kerberos para acessar certos serviços. A senha do Kerberos também serve como a senha LDAP para a web, já que o LDAP faz um proxy para o Kerberos no cluster. Alguns dos serviços que exigem isso incluem:</para>
+
+    <itemizedlist>
+      <listitem>
+	<para><link xlink:href="https://bugs.freebsd.org/bugzilla">Bugzilla</link></para>
+      </listitem>
+      <listitem>
+	<para><link xlink:href="https://ci.freebsd.org">Jenkins</link></para>
+      </listitem>
+    </itemizedlist>
+
+    <para>Para criar uma nova conta do Kerberos no cluster do FreeBSD, ou para redefinir uma senha do Kerberos para uma conta existente usando um gerador de senha aleatória:</para>
+
+    <screen><prompt>%</prompt> <userinput>ssh kpasswd.freebsd.org</userinput></screen>
+
+    <note>
+      <para>Isto deve ser feito a partir de uma máquina fora do cluster do FreeBSD.org.</para>
+    </note>
+
+    <para>Uma senha do Kerberos também pode ser definida manualmente, para isto logue no servidor <systemitem class="fqdomainname">freefall.FreeBSD.org</systemitem> e execute:</para>
+
+    <screen><prompt>%</prompt> <userinput>kpasswd</userinput></screen>
+
+    <note>
+      <para>A menos que os serviços autenticados por Kerberos do cluster do FreeBSD.org tenham sido usados anteriormente, o erro <errorname>Client unknown</errorname>será exibido. Este erro significa que o método <command>ssh kpasswd.freebsd.org</command> mostrado acima deve ser usado primeiro para inicializar a conta Kerberos.</para>
+    </note>
+
+  </sect1>
+
+  <sect1 xml:id="committer.types">
+    <title>Tipos de Commit Bits</title>
+
+    <para>O repositório do FreeBSD possui um número de componentes que, quando combinados, suportam os fontes básicos do sistema operacional, a documentação, a infraestrutura de ports de aplicativos de terceiros e vários utilitários mantidos. Quando os commit bits do FreeBSD são alocados, as áreas da árvore onde o bit pode ser usado são especificadas. Geralmente, as áreas associadas a um bit refletem quem autorizou a alocação do bit de commit. Áreas adicionais de autoridade podem ser adicionadas em uma data posterior: quando isso ocorre, o committer deve seguir procedimentos normais de atribuição de bits de confirmação para essa área da árvore, buscando a aprovação da entidade apropriada e possivelmente obtendo um mentor para essa área por algum período de tempo.</para>
+
+    <informaltable frame="none" pgwide="1">
+      <tgroup cols="3">
+	<tbody>
+	  <row>
+	    <entry><emphasis>Tipo de Committer</emphasis></entry>
+	    <entry><emphasis>Responsável</emphasis></entry>
+	    <entry><emphasis>Componentes da Árvore</emphasis></entry>
+	  </row>
+
+	  <row>
+	    <entry>src</entry>
+	    <entry>core@</entry>
+	    <entry>src/, doc/ sujeito a revisão apropriada</entry>
+	  </row>
+
+	  <row>
+	    <entry>doc</entry>
+	    <entry>doceng@</entry>
+	    <entry>doc/, ports/, src/ documentação</entry>
+	  </row>
+
+	  <row>
+	    <entry>ports</entry>
+	    <entry>portmgr@</entry>
+	    <entry>ports/</entry>
+	  </row>
+	</tbody>
+      </tgroup>
+    </informaltable>
+
+    <para>Os commit bits alocados antes do desenvolvimento da noção de áreas de autoridade podem ser apropriados para uso em muitas partes da árvore. No entanto, o senso comum determina que um committer que não tenha trabalhado anteriormente em uma área da árvore busque alguém para realizar uma revisão antes de realizar o commit, busque a aprovação da parte responsável apropriada e/ou trabalhe com um mentor. Uma vez que as regras relativas à manutenção de código diferem por área da árvore, isso é tanto para o benefício do committer trabalhando em uma área de menos familiar quanto para as outras pessoas trabalhando na árvore.</para>
+
+    <para>Committers são encorajados a buscar revisão do seu trabalho como parte do processo normal de desenvolvimento, independentemente da área da árvore onde o trabalho está ocorrendo.</para>
+
+    <sect2>
+      <title>Política para atividade de Committers em outras árvores</title>
+
+      <itemizedlist>
+	<listitem>
+	  <para>Todos os committers podem modificar <filename>base/head/share/misc/committers-*.dot</filename>, <filename>base/head/usr.bin/calendar/calendars/calendar.freebsd</filename>, e <filename>ports/head/astro/xearth/files</filename>.</para>
+	</listitem>
+
+	<listitem>
+	  <para>os doc committers podem efetuar commits de alterações na documentação sob  <filename>src</filename>, tal como man pages, READMEs, banco de dados do fortune, arquivos de calendários, e comentar correções sem aprovação de um src committer, sujeito aos cuidados normais necessários para um commit seguro.</para>
+	</listitem>
+
+	<listitem>
+	  <para>Qualquer committer pode fazer alterações em qualquer outra árvore com um "Approved by" de um committer que não esteja sob mentoria e que tenha o bit apropriado.</para>
+	</listitem>
+
+	<listitem>
+	  <para>Os committers podem adquirir um bit adicional pelo processo usual de encontrar um mentor que os proporá ao core, doceng ou portmgr, conforme apropriado. Quando aprovados, eles serão adicionados ao 'access' e o período normal de mentoria irá ocorrer, o que envolverá a continuidade do uso do <quote>Approved by</quote> por um período.</para>
+	</listitem>
+
+	<listitem>
+	  <para>O "Approved by" só é aceitável vindo de src committers que não estejam sob mentoria  - os committers mentorados podem fornecer um "Reviewed by" mas não um "Approved by".</para>
+	</listitem>
+      </itemizedlist>
+    </sect2>
+  </sect1>
+
+  <sect1 xml:id="subversion-primer">
+    <title>Subversion Primer</title>
+
+    <para>Supõe-se que novos committers já estejam familiarizados com a operação básica do Subversion. Se não, comece lendo o <link xlink:href="http://svnbook.red-bean.com/">Subversion Book</link>.</para>
+
+    <sect2 xml:id="svn-intro">
+      <title>Introdução</title>
+
+      <para>O repositório de código fonte do FreeBSD mudou do <acronym>CVS</acronym> para o Subversion em 31 de maio de 2008. O primeiro commit real no <acronym>SVN</acronym> é o <emphasis>r179447</emphasis>.</para>
+
+      <para>O repositório do FreeBSD <literal>doc/www</literal> foi migrado do  <acronym>CVS</acronym> para o Subversion em 19 de Maio de 2012. O primeiro commit real no <acronym>SVN</acronym> foi o <emphasis>r38821</emphasis>.</para>
+
+      <para>O repositório da coleção de <literal>ports</literal> do FreeBSD  foi migrado do   <acronym>CVS</acronym> para o Subversion em 14 de Julho 2012. O primeiro commit real no <acronym>SVN</acronym> foi o <emphasis>r300894</emphasis>.</para>
+
+      <para>O Subversion pode ser instalado a partir da Coleção de Ports do FreeBSD, executando o comando:</para>
+
+      <screen><prompt>#</prompt> <userinput>pkg install subversion</userinput></screen>
+
+    </sect2>
+
+    <sect2 xml:id="svn-getting-started">
+      <title>Primeiros Passos</title>
+
+      <para>Existem algumas maneiras de obter uma cópia de trabalho da árvore do Subversion. Esta seção irá explicá-las.</para>
+
+      <sect3 xml:id="svn-getting-started-direct-checkout">
+	<title>Checkout direto</title>
+
+	<para>O primeiro é fazer check-out diretamente do repositório principal. Para a árvore <literal>src</literal>, use:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn checkout svn+ssh://repo.freebsd.org/base/head /usr/src</userinput></screen>
+
+	<para>Para a árvore <literal>doc</literal>, use:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn checkout svn+ssh://repo.freebsd.org/doc/head /usr/doc</userinput></screen>
+
+	<para>Para a árvore da coleção de <literal>ports</literal>, use:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn checkout svn+ssh://repo.freebsd.org/ports/head /usr/ports</userinput></screen>
+
+	<note>
+	  <para>Embora os exemplos restantes neste documento tenham sido escritos tendo o workflow de trabalho com a árvore <literal>src</literal> em mente, os conceitos básicos são os mesmos para se trabalhar com o <literal>doc</literal> e com a árvore dos <literal>ports</literal>. Os ports relacionados às operações do Subversion estão listados em <xref linkend="ports"/>.</para>
+	</note>
+
+	<para>O comando acima irá fazer o checkout da árvore de código-fonte <literal>CURRENT</literal>  como <filename><replaceable>/usr/src/</replaceable></filename>, o qual pode ser qualquer diretório de destino no sistema de arquivos local. Omitir o argumento final desse comando faz com que a cópia de trabalho, neste caso, seja nominada como <quote>head</quote>, mas ela poderá ser renomeada com segurança.</para>
+
+	<para>O <literal>svn+ssh</literal> significa que o protocolo <acronym>SVN</acronym> será tunelado sobre o <acronym>SSH</acronym>.  O nome do servidor é <literal>repo.freebsd.org</literal>, e <literal>base</literal> é o caminho para o repositório, e <literal>head</literal> é o subdiretório dentro do repositório.</para>
+
+	<para>Se seu nome de login no projeto FreeBSD for diferente do nome de login usado na sua  máquina local, inclua-o na <acronym>URL</acronym> (por exemplo <literal>svn+ssh://jarjar@repo.freebsd.org/base/head</literal>) ou adicione uma entrada no arquivo <filename>~/.ssh/config</filename> no formato:</para>
+
+	<programlisting>Host repo.freebsd.org
+	User jarjar</programlisting>
+
+	<para>Este é o método mais simples, mas é difícil dizer quanta carga ele irá colocar no repositório.</para>
+
+	<note>
+	  <para>O <command>svn diff</command> não requer acesso ao servidor pois o <acronym>SVN</acronym> armazena uma cópia de referência de todos os arquivos na cópia de trabalho. Isto, no entanto, significa que as cópias de trabalho do Subversion são muito grandes em tamanho.</para>
+	</note>
+      </sect3>
+
+      <sect3 xml:id="svn-getting-started-base-layout">
+	<title>Branches <literal>RELENG_*</literal> e Layout Geral</title>
+
+	<para>No <literal>svn+ssh://repo.freebsd.org/base</literal>, <emphasis>base</emphasis> refere-se à árvore de código fonte. Similarmente, <emphasis>ports</emphasis> refere-se à árvore de ports e assim por diante. Estes são repositórios separados com suas próprias seqüências de números de mudança, controles de acesso e email de commit.</para>
+
+	<para>Para o repositório base, HEAD refere-se a árvore -CURRENT. Por exemplo, <filename>head/bin/ls</filename> é o que entraria como <filename>/usr/src/bin/ls</filename> em uma release. Alguns locais importantes são:</para>
+
+	<itemizedlist>
+	  <listitem>
+	    <para><emphasis>/head/</emphasis> que corresponde a <literal>HEAD</literal>, também conhecido como <literal>-CURRENT</literal>.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><emphasis>/stable/<replaceable>n</replaceable></emphasis> que corresponde a <literal>RELENG_<replaceable>n</replaceable></literal>.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><emphasis>/releng/<replaceable>n.n</replaceable></emphasis> que corresponde a <literal>RELENG_<replaceable>n_n</replaceable></literal>.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><emphasis>/release/<replaceable>n.n.n</replaceable></emphasis> que corresponde a <literal>RELENG_<replaceable>n_n_n</replaceable>_RELEASE</literal>.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><emphasis>/vendor*</emphasis> é uma área de trabalho para importar branches de vendors. Este diretório em si não contém branches, no entanto, os seus subdiretórios contém. Isso contrasta com os diretórios <emphasis>stable</emphasis>, <emphasis>releng</emphasis> e <emphasis>release</emphasis>.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><emphasis>/projects</emphasis> e <emphasis>/user</emphasis> são áreas de trabalho de branch. Como acima, o diretório <emphasis>/user</emphasis> não contém branches em si.</para>
+	  </listitem>
+	</itemizedlist>
+      </sect3>
+
+      <sect3 xml:id="svn-getting-started-doc-layout">
+	<title>Branches e Layout do Projeto de Documentação do FreeBSD</title>
+
+	<para>no <literal>svn+ssh://repo.freebsd.org/doc</literal>, <emphasis>doc</emphasis> refere-se à raiz do repositório da árvore de código fonte.</para>
+
+	<para>Em geral, a maior parte do trabalho do Projeto de Documentação do FreeBSD será feito dentro do branch <filename>head/</filename> da árvore com os arquivos fontes da documentação.</para>
+
+	<para>A documentação do FreeBSD é escrita e/ou traduzida para vários idiomas, cada um em um diretório separado no branch <filename>head/</filename>.</para>
+
+	<para>Cada conjunto de tradução contém vários subdiretórios para as várias partes do Projeto de Documentação do FreeBSD. Alguns diretórios notáveis são:</para>
+
+	<itemizedlist>
+	  <listitem>
+	    <para><emphasis>/articles/</emphasis> contém o código fonte para artigos escritos por vários colaboradores do FreeBSD.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><emphasis>/books/</emphasis> contém o código fonte para os diferentes livros, como o Handbook do FreeBSD.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><emphasis>/htdocs/</emphasis> contém o código-fonte do website do FreeBSD.</para>
+	  </listitem>
+	</itemizedlist>
+      </sect3>
+
+      <sect3 xml:id="svn-getting-started-ports-layout">
+	<title>Branches e Layout da Árvore de Ports do FreeBSD</title>
+
+	<para>No <literal>svn+ssh: //repo.freebsd.org/ports</literal>, <emphasis>ports</emphasis> refere-se à raiz do repositório da árvore de ports.</para>
+
+	<para>Em geral, a maior parte do trabalho na coleção de ports do FreeBSD será feito dentro da branch <filename>head/</filename> da árvore de ports, que é a árvore de ports real usada para instalar software. Alguns outros locais importantes são:</para>
+
+	<itemizedlist>
+	  <listitem>
+	    <para><emphasis>/branches/RELENG_<replaceable>n_n_n</replaceable></emphasis> que corresponde a <literal>RELENG_<replaceable>n_n_n</replaceable></literal> e é usado para mesclar atualizações de segurança em preparação para uma release.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><emphasis>/tags/RELEASE_<replaceable>n_n_n</replaceable></emphasis> que corresponde a <literal>RELEASE_<replaceable>n_n_n</replaceable></literal> e representa uma tag de release da árvore de ports.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><emphasis>/tags/RELEASE_<replaceable>n</replaceable>_EOL</emphasis> representa o tag de end of life de um branch específico do FreeBSD.</para>
+	  </listitem>
+	</itemizedlist>
+      </sect3>
+    </sect2>
+
+    <sect2 xml:id="svn-daily-use">
+      <title>Uso diário</title>
+
+      <para>Esta seção explicará como realizar operações comuns do dia-a-dia com o Subversion.</para>
+
+      <sect3 xml:id="svn-daily-use-help">
+	<title>Ajuda</title>
+
+	<para>O <acronym>SVN</acronym> traz em si uma documentação interna de ajuda. Ela pode ser acessada digitando:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn help</userinput></screen>
+
+	<para>Informações adicionais podem ser encontradas no <link xlink:href="http://svnbook.red-bean.com/">Subversion Book</link>.</para>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-checkout">
+	<title>Checkout</title>
+
+	<para>Como visto anteriormente, para fazer o checkout da branch principal (head) do FreeBSD:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn checkout svn+ssh://repo.freebsd.org/base/head /usr/src</userinput></screen>
+
+	<para>Em algum momento, provavelmente será útil ter uma copia de trabalho mais do que apenas do <literal>HEAD</literal>, por exemplo, ao mesclar as alterações para stable/7. Portanto, pode ser útil ter uma verificação parcial da árvore completa (um check-out completo seria muito doloroso).</para>
+
+	<para>Para fazer isso, primeiro confira a raiz do repositório:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn checkout --depth=immediates svn+ssh://repo.freebsd.org/base</userinput></screen>
+
+	<para>Isso vai obter o <literal>base</literal> com todos os arquivos que ele contém (no momento da escrita, apenas o <filename>ROADMAP.txt</filename>) e subdiretórios vazios para <literal>head</literal>, <literal>stable</literal>, <literal>vendor</literal> e assim por diante.</para>
+
+	<para>É possível expandir a cópia de trabalho. Basta alterar a profundidade dos vários subdiretórios:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn up --set-depth=infinity base/head</userinput>
+<prompt>%</prompt> <userinput>svn up --set-depth=immediates base/release base/releng base/stable</userinput></screen>
+
+	<para>O comando acima irá baixar uma cópia completa do <literal>head</literal>, além de cópias vazias de cada tag de <literal>release</literal>, de cada branch de <literal>releng</literal>, e de cada branch <literal>stable</literal>.</para>
+
+	<para>Se numa data posterior você tiver necessidade de mesclar algo, por exemplo, com a <literal>7-STABLE</literal>, expanda a cópia de trabalho:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn up --set-depth=infinity base/stable/7</userinput></screen>
+
+	<para>As subárvores não precisam ser expandidas completamente. Por exemplo, para expandir apenas o <literal>stable/7/sys</literal> e depois expandir o resto do <literal>stable/7</literal>:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn up --set-depth=infinity base/stable/7/sys</userinput>
+<prompt>%</prompt> <userinput>svn up --set-depth=infinity base/stable/7</userinput></screen>
+
+	<para>Atualizar a árvore com <command>svn update</command> irá apenas atualizar o que foi pedido anteriormente (neste caso, <literal>head</literal> e <literal>stable/7</literal>), ele não irá puxar a árvore inteira.</para>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-anonymous-checkout">
+	<title>Checkout Anonimo</title>
+
+	<para>É possível efetuar o checkout anonimo o repositório Subversion do FreeBSD. Isso dará acesso a uma árvore somente leitura que pode ser atualizada, mas que não poderá ser enviada de volta para o repositório principal por meio de um commit. Para fazer isso, use:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn co https://svn.FreeBSD.org/base/head /usr/src</userinput></screen>
+
+	<para>Mais detalhes sobre o uso do Subversion podem ser encontrados em<link xlink:href="@@URL_RELPREFIX@@/doc/en_US.ISO8859-1/books/handbook/svn.html">Usando o Subversion</link>.</para>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-updating-the-tree">
+	<title>Atualizando a Árvore</title>
+
+	<para>Para atualizar uma cópia de trabalho para a revisão mais recente ou uma revisão específica:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn update</userinput>
+<prompt>%</prompt> <userinput>svn update -<replaceable>r12345</replaceable></userinput></screen>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-status">
+	<title>Status</title>
+
+	<para>Para ver as alterações locais que foram feitas na cópia de trabalho:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn status</userinput></screen>
+
+	<para>Para mostrar alterações locais e arquivos que estão desatualizados, execute:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn status --show-updates</userinput></screen>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-editing-and-committing">
+	<title>Editando e efetuando o commit</title>
+
+	<para>O <acronym>SVN</acronym> não precisa ser avisado com antecedência sobre a edição de arquivos.</para>
+
+	<para>Para efetuar o commit de todas as alterações no diretório atual e em todos os seus  subdiretórios:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn commit</userinput></screen>
+
+	<para>Para efetuar o commit de todas as alterações, por exemplo, nos arquivos <filename><replaceable>lib/libfetch/</replaceable></filename> e <filename><replaceable>usr/bin/fetch/</replaceable></filename> em uma única operação, execute:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn commit <replaceable>lib/libfetch</replaceable> <replaceable>usr/bin/fetch</replaceable></userinput></screen>
+
+	<para>Também existe um wrapper de commit para a árvore de ports para manipular as propriedades e para verificar a sanidade das mudanças:</para>
+
+	<screen><prompt>%</prompt> <userinput>/usr/ports/Tools/scripts/psvn commit</userinput></screen>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-adding-and-removing">
+	<title>Adicionando e Removendo Arquivos</title>
+
+	<note>
+	  <para>Antes de adicionar arquivos, obtenha uma cópia do <link xlink:href="https://people.FreeBSD.org/~peter/auto-props.txt">auto-props.txt</link> (há também um <link xlink:href="https://people.FreeBSD.org/~beat/cvs2svn/auto-props.txt"> versão específica da árvore de ports</link>) e adicione-o ao <filename>~/.subversion/config</filename> seguindo as instruções contidas no arquivo. Se você adicionou algo antes de ler isto, use o comando <command>svn rm --keep-local</command> para apenas os arquivos adicionados, corrija seu arquivo de configuração e adicione-os novamente. O arquivo de configuração inicial é criado quando você executa um comando svn pela primeira vez, até mesmo algo tão simples quanto <command>svn help</command>.</para>
+	</note>
+
+	<para>Os arquivos são adicionados a um <acronym>SVN</acronym> repositório com <command>svn add</command>. Para adicionar um arquivo chamado <emphasis>foo</emphasis>, edite-o e depois execute:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn add <replaceable>foo</replaceable></userinput></screen>
+
+	<note>
+	  <para>A maioria dos novos arquivos fonte deve incluir uma string <literal>$FreeBSD$</literal> próxima ao início do arquivo. Ao efetuar o commit, o <command>svn</command> expandirá a string <literal>$FreeBSD$</literal>, adicionando o caminho do arquivo, o número da revisão, a data e a hora da confirmação e o nome de usuário do committer. Arquivos que não podem ser modificados podem ser enviados sem a string <literal>$FreeBSD$</literal>.</para>
+	</note>
+
+	<para>Os arquivos podem ser removidos com <command>svn remove</command>:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn remove <replaceable>foo</replaceable></userinput></screen>
+
+	<para>O subversion não requer a exclusão do arquivo antes de usaramos o comando  <command>svn rm</command> e, de fato, ele reclama se isso acontecer.</para>
+
+	<para>É possível adicionar diretórios com <command>svn add</command>:</para>
+
+	<screen><prompt>%</prompt> <userinput>mkdir <replaceable>bar</replaceable></userinput>
+<prompt>%</prompt> <userinput>svn add <replaceable>bar</replaceable></userinput></screen>
+
+	<para>Apesar que o <command>svn mkdir</command> torna isso mais fácil, combinando a criação do diretório e a adição dele:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn mkdir <replaceable>bar</replaceable></userinput></screen>
+
+	<para>Como arquivos, os diretórios são removidos com <command>svn rm</command>. Não existe um comando separado especificamente para remover diretórios.</para>
+
+	<screen><prompt>%</prompt> <userinput>svn rm <replaceable>bar</replaceable></userinput></screen>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-copying-and-moving">
+	<title>Copiando e Movendo Arquivos</title>
+
+	<para>Este comando cria uma cópia do arquivo <filename>foo.c</filename> nomeado <filename>bar.c</filename>, com o novo arquivo também sob controle de versão e com o histórico completo de <filename>foo.c</filename>:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn copy <replaceable>foo.c</replaceable> <replaceable>bar.c</replaceable></userinput></screen>
+
+	<para>Geralmente é preferível copiar desta forma ao invés de copiar o arquivo com comando <command>cp</command> e adicionando-o ao repositório com <command>svn add</command> porque desta forma o novo arquivo não herda a história do original.</para>
+
+	<para>Para mover e renomear um arquivo:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn move <replaceable>foo.c</replaceable> <replaceable>bar.c</replaceable></userinput></screen>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-log-and-annotate">
+	<title>Logs e Anotações</title>
+
+	<para>O <command>svn log</command> mostra revisões e mensagens de commit, as mais recentes são exibidas primeiro, para arquivos ou diretórios. Quando usado em um diretório, todas as revisões que afetaram o diretório e os arquivos nesse diretório são mostradas.</para>
+
+	<para>O <command>svn annotate</command> , ou igualmente o <command>svn praise</command> ou <command>svn blame</command>, mostra o número de revisão mais recente e quem fez o commit dessa revisão para cada linha de um arquivo.</para>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-diffs">
+	<title>Diffs</title>
+
+	<para>O <command>svn diff</command> exibe alterações na cópia de trabalho. Diffs gerado por <acronym>SVN</acronym> são unificados e incluem novos arquivos por padrão na saída do diff.</para>
+
+	<para>O <command>svn diff</command> pode mostrar as mudanças entre duas revisões do mesmo arquivo:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn diff -r179453:179454 ROADMAP.txt</userinput></screen>
+
+	<para>Ele também pode mostrar todas as alterações para um changeset específico. Este comando mostra quais alterações foram feitas no diretório atual e em todos os subdiretórios do changeset 179454:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn diff -c179454 .</userinput></screen>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-reverting">
+	<title>Revertendo</title>
+
+	<para>Mudanças locais (incluindo adições e deleções) podem ser revertidas  usando <command>svn revert</command>. Ele não atualiza arquivos desatualizados, apenas os substitui por cópias originais da versão original.</para>
+      </sect3>
+
+      <sect3 xml:id="svn-daily-use-conflicts">
+	<title>Conflitos</title>
+
+	<para>Se um <command>svn update</command> resultou em um conflito de mesclagem, o Subversion irá lembrar quais arquivos têm conflitos e se recusará a fazer o commit de quaisquer alterações nesses arquivos até que seja explicitamente informado que os conflitos foram resolvidos. O procedimento simples, ainda não obsoleto, é:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn resolved <replaceable>foo</replaceable></userinput></screen>
+
+	<para>No entanto, o procedimento preferido é:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn resolve --accept=working <replaceable>foo</replaceable></userinput></screen>
+
+	<para>Os dois exemplos são equivalentes. Os valores possíveis para <literal>--accept</literal> são:</para>
+
+	<itemizedlist>
+	  <listitem>
+	    <para><literal>working</literal>: use a versão em seu diretório de trabalho (a qual se presume que foi editada para resolver os conflitos).</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>base</literal>: usar uma cópia original da versão que você tinha antes do <command>svn update</command>, descartando suas próprias alterações, as mudanças conflitantes e possivelmente outras mudanças intervenientes também.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>mine-full</literal>: use o que você tinha antes do <command>svn update</command>, incluindo suas próprias mudanças, mas descartando as mudanças conflitantes, e possivelmente outras mudanças intervenientes também.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>theirs-full</literal>: use a versão que foi recuperada quando você fez o <command>svn update</command>, descartando as suas próprias mudanças.</para>
+	  </listitem>
+	</itemizedlist>
+      </sect3>
+    </sect2>
+
+    <sect2>
+      <title>Uso Avançado</title>
+
+      <sect3 xml:id="svn-advanced-use-sparse-checkouts">
+	<title>Checkouts dispersos</title>
+
+	<para>O <acronym>SVN</acronym> permite <emphasis>sparse</emphasis>, ou checkouts parciais de um diretório adicionando <option>--depth</option> a um <command>svn checkout</command>.</para>
+
+	<para>Os argumentos válidos para <option>--depth</option> são:</para>
+
+	<itemizedlist>
+	  <listitem>
+	    <para><literal>empty</literal>: o próprio diretório sem qualquer conteúdo.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>files</literal>: o diretório e quaisquer arquivos nele contidos.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>immediates</literal>: o diretório e quaisquer arquivos e diretórios contidos nele, mas nenhum dos conteúdos dos subdiretórios.</para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>infinity</literal>: qualquer coisa.</para>
+	  </listitem>
+	</itemizedlist>
+
+	<para>A opção <literal>--depth</literal> se aplica a muitos outros comandos, incluindo <command>svn commit</command>, <command>svn revert</command> e o <command>svn diff</command>.</para>
+
+	<para>Como o parâmetro <literal>--depth </literal> utilizado é persistente, existe uma opção <literal>--set-depth</literal> para o <command>svn update</command> que irá mudar a profundidade selecionada. Assim, dada a cópia de trabalho produzida pelo exemplo anterior:</para>
+
+	<screen><prompt>%</prompt> <userinput>cd <replaceable>~/freebsd</replaceable></userinput>
+<prompt>%</prompt> <userinput>svn update --set-depth=immediates .</userinput></screen>
+
+	<para>O comando acima irá popular a cópia de trabalho em <replaceable>~/freebsd</replaceable> com <filename>ROADMAP.txt</filename> e subdiretórios vazios, e nada acontecerá quando <command>svn update</command> for executado nos subdiretórios. No entanto, esse comando definirá a profundidade para <replaceable>head</replaceable> (nesse caso) como infinito e o populará totalmente:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn update --set-depth=infinity <replaceable>head</replaceable></userinput></screen>
+      </sect3>
+
+      <sect3 xml:id="svn-advanced-use-direct-operation">
+	<title>Operação Direta</title>
+
+	<para>Certas operações podem ser realizadas diretamente no repositório sem tocar na cópia de trabalho. Especificamente, isso se aplica a qualquer operação que não exija a edição de um arquivo, incluindo:</para>
+
+	<itemizedlist>
+	  <listitem>
+	    <para><literal>log</literal>, <literal>diff</literal></para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>mkdir</literal></para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>remove</literal>, <literal>copy</literal>, <literal>rename</literal></para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>propset</literal>, <literal>propedit</literal>, <literal>propdel</literal></para>
+	  </listitem>
+
+	  <listitem>
+	    <para><literal>merge</literal></para>
+	  </listitem>
+	</itemizedlist>
+
+	<para>A criação de uma branch é muito rápida. Este comando seria usado para criar a branch <literal>RELENG_8</literal>:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn copy svn+ssh://repo.freebsd.org/base/head svn+ssh://repo.freebsd.org/base/stable/8</userinput></screen>
+
+	<para>Isso equivale a esses comandos, que levam minutos e horas, em vez de segundos, dependendo da sua conexão de rede:</para>
+
+	<screen><prompt>%</prompt> <userinput>svn checkout --depth=immediates svn+ssh://repo.freebsd.org/base</userinput>
+<prompt>%</prompt> <userinput>cd base</userinput>
+<prompt>%</prompt> <userinput>svn update --set-depth=infinity head</userinput>
+<prompt>%</prompt> <userinput>svn copy head stable/8</userinput>
+<prompt>%</prompt> <userinput>svn commit stable/8</userinput></screen>
+      </sect3>
+
+      <sect3 xml:id="svn-advanced-use-merging">
+	<title>Mesclando com <acronym>SVN</acronym></title>
+
+	<para>Esta seção lida com o merge de código de um branch para outro (normalmente, do head para um brach stable).</para>
+
+	<note>
+	  <para>Em todos os exemplos abaixo, <literal>$FSVN</literal> refere-se à localização do repositório Subversion do FreeBSD, <literal>svn+ssh://repo.freebsd.org/base </literal>.</para>
+	</note>
+
+	<sect4>
+	  <title>Sobre o acompanhamento de mesclagem</title>
+
+	  <para>Do ponto de vista do usuário, informações de acompanhamento de mesclagem (ou mergeinfo) são armazenadas em uma propriedade chamada <literal>svn:mergeinfo</literal>, que é uma lista separada por vírgulas de revisões e intervalos de revisões que foram mescladas. Quando definido em um arquivo, ele se aplica somente a esse arquivo. Quando definido em um diretório, ele se aplica a esse diretório e seus descendentes (arquivos e diretórios), exceto aqueles que possuem o seu próprio <literal>svn:mergeinfo</literal>.</para>
+
+	  <para>Ele <emphasis>não</emphasis> é herdado. Por exemplo, <filename>stable/6/contrib/openpam/</filename> não herda implicitamente o mergeinfo de <filename>stable/6/</filename>, ou do <filename>stable/6/contrib/</filename>. Isso faria com que os checkouts parciais fossem difíceis de gerenciar. Em vez disso, o mergeinfo é explicitamente propagado pela árvore. Para mesclar algo em <filename>branch/foo/bar/</filename>, estas regras se aplicam:</para>
+
+	  <orderedlist>
+	    <listitem>
+	      <para>Se <filename>branch/foo/bar/</filename> ainda não tiver um registro mergeinfo, mas um ancestral direto (por exemplo, <filename>branch/foo/</filename>) tem, então esse registro será propagado para abaixo até <filename>branch/foo/bar/</filename> antes que as informações sobre a mesclagem atual sejam registradas.</para>
+	    </listitem>
+
+	    <listitem>
+	      <para>As informações sobre a mesclagem atual <emphasis>não</emphasis> serão propagadas para o ancestral.</para>
+	    </listitem>
+
+	    <listitem>
+	      <para>Se um descendente direto de <filename>branch/foo/bar/</filename> (por exemplo, <filename>branch/foo/bar/baz/</filename>) já tiver um registro mergeinfo, as informações sobre a mesclagem atual serão propagadas para ele.</para>
+	    </listitem>
+	  </orderedlist>
+
+	  <para>Se você considerar o caso em que uma revisão altera várias partes separadas da árvore (por exemplo, <filename>branch/foo/bar/</filename> e <filename>branch/foo/quux/</filename>), mas você só deseja mesclar alguns deles (por exemplo, <filename>branch/foo/bar/</filename>), você verá que essas regras fazem sentido. Se mergeinfo fosse propagado, pareceria que a revisão também foi mesclada com <filename>branch/foo/quux/</filename>, quando na verdade não foi.</para>
+	</sect4>
+
+	<sect4 xml:id="merge-source">
+	  <title>Selecionando a branch de origem e de destino ao mesclar</title>
+
+	  <para>Mesclagens para as branches <literal>stable/</literal> devem originar-se da <literal>head/</literal>. Por exemplo:</para>
+
+	  <screen><prompt>%</prompt> svn merge -c <replaceable>r123456</replaceable> ^/head/ stable/<replaceable>11</replaceable>
+<prompt>%</prompt> svn commit stable/<replaceable>11</replaceable></screen>
+
+	  <para>Mesclagens para as branches <literal>releng/</literal> devem sempre se originar da branch <literal>stable/</literal> correspondente. Por exemplo:</para>
+
+	  <screen><prompt>%</prompt> svn merge -c <replaceable>r123456</replaceable> ^/stable/<replaceable>11</replaceable>  releng/<replaceable>11.0</replaceable>
+<prompt>%</prompt> svn commit releng/<replaceable>11.0</replaceable></screen>
+
+	  <note>
+	    <para>Os committers só podem se efetuar um commit para as branches <literal>releng/</literal> durante um ciclo de release após receber aprovação da Equipe de Engenharia de Release, após o qual somente o Security Officer pode efetuar commits para o branch <literal>releng/</literal> para um Aviso de Segurança ou Aviso de Errata.</para>
+	  </note>
+
+	  <para>Todas as mesclagens são mescladas e enviadas por commit a partir da raiz da branch. Todas as mesclagens se parecem com:</para>
+
+	  <screen><prompt>%</prompt> svn merge -c <replaceable>r123456</replaceable> ^/head/ <replaceable>checkout</replaceable>
+<prompt>%</prompt> svn commit <replaceable>checkout</replaceable></screen>
+
+	  <para>Observe que <replaceable>checkout</replaceable> deve ser uma verificação completa da branch na qual a mesclagem ocorre.</para>
+
+	  <screen><prompt>%</prompt> svn merge -c <replaceable>r123456</replaceable> ^/stable/<replaceable>10</replaceable> releng/<replaceable>10.0</replaceable></screen>
+	</sect4>
+
+	<sect4>
+	  <title>Preparando o Alvo de Mesclagem (Merge Target)</title>
+
+	  <para>Devido aos problemas de propagação do mergeinfo descritos anteriormente, é muito importante nunca mesclar as alterações em uma cópia de trabalho esparsa. Sempre use um checkout completo do branch que está sendo mesclado. Por exemplo, ao mesclar de HEAD para 7, use um checkout completo de stable/7:</para>
+
+	  <screen><prompt>%</prompt> <userinput>cd stable/7</userinput>
+<prompt>%</prompt> <userinput>svn up --set-depth=infinity</userinput></screen>
+
+	  <para>O diretório de destino também deve estar atualizado e não deve conter alterações que ainda não foram enviadas por commit ou arquivos perdidos.</para>
+	</sect4>
+
+	<sect4>
+	  <title>Identificando Revisões</title>
+
+	  <para>Identificar revisões a serem mescladas é uma obrigação. Se o alvo já tiver mergeinfo completo, solicite uma lista para o <acronym>SVN</acronym>:</para>
+
+	  <screen><prompt>%</prompt> <userinput>cd stable/6/contrib/openpam</userinput>
+<prompt>%</prompt> <userinput>svn mergeinfo --show-revs=eligible $FSVN/head/contrib/openpam</userinput></screen>
+
+	  <para>Se o destino não tiver mergeinfo completo, verifique o log da origem de mesclagem.</para>
+	</sect4>
+
+	<sect4>
+	  <title>Mesclando</title>
+
+	  <para>Agora vamos começar a mesclar!</para>
+
+	  <sect5>
+	    <title>Os princípios</title>
+
+	    <para>Por exemplo, para mesclar:</para>
+
+	    <itemizedlist>
+	      <listitem>
+		<para>revisão <literal>$R</literal></para>
+	      </listitem>
+
+	      <listitem>
+		<para>no diretório $target na branch stable $B</para>
+	      </listitem>
+
+	      <listitem>
+		<para>a partir do diretório $source no head</para>
+	      </listitem>
+
+	      <listitem>
+		<para>$FSVN é o <literal>svn+ssh://repo.freebsd.org/base</literal></para>
+	      </listitem>
+	    </itemizedlist>
+
+	    <para>Supondo que as revisões $P e $Q já tenham sido mescladas e que o diretório atual seja uma cópia de trabalho atualizada de stable/$B, a mergeinfo existente será semelhante a:</para>
+
+	    <screen><prompt>%</prompt> <userinput>svn propget svn:mergeinfo -R $target</userinput>
+$target - /head/$source:$P,$Q</screen>
+
+	    <para>A mesclagem é feita assim:</para>
+
+	    <screen><prompt>%</prompt> <userinput>svn merge -c$R $FSVN/head/$source $target</userinput></screen>
+
+	    <para>É possível verificar os resultados disso com um <command>svn diff</command>.</para>
+
+	    <para>O svn:mergeinfo agora se parece com:</para>
+
+	    <screen><prompt>%</prompt> <userinput>svn propget svn:mergeinfo -R $target</userinput>
+$target - head/$source:$P,$Q,$R</screen>
+
+	    <para>Se os resultados não forem exatamente como os mostrados, você pode precisar de assistência antes de efetuar o commit pois erros podem ter sido cometidos, ou pode haver algo errado com o mergeinfo existente, ou pode haver um bug no Subversion.</para>
+	  </sect5>
+
+	  <sect5>
+	    <title>Exemplo Prático</title>
+
+	    <para>Como um exemplo prático, considere este cenário. As alterações no <filename>netmap.4</filename> no r238987 devem ser mescladas do CURRENT para o 9-STABLE. O arquivo reside em <filename>head/share/man/man4</filename>. De acordo com o <xref linkend="svn-advanced-use-merging"/>, também é onde devemos fazer a mesclagem. Note que neste exemplo todos os caminhos são relativos ao topo do repositório svn. Para obter mais informações sobre o layout do diretório, consulte <xref linkend="svn-getting-started-base-layout"/>.</para>
+
+	    <para>O primeiro passo é inspecionar o mergeinfo existente.</para>
+
+	    <screen><prompt>%</prompt> <userinput>svn propget svn:mergeinfo -R stable/9/share/man/man4</userinput></screen>
+
+	    <para>Tome uma nota rápida de como ele se parece antes de avançar para o próximo passo; fazendo a mesclagem real:</para>
+
+	    <screen><prompt>%</prompt> <userinput>svn merge -c r238987 svn+ssh://repo.freebsd.org/base/head/share/man/man4 stable/9/share/man/man4</userinput>
+--- Merging r238987 into 'stable/9/share/man/man4':
+U    stable/9/share/man/man4/netmap.4
+--- Recording mergeinfo for merge of r238987 into
+'stable/9/share/man/man4':
+ U   stable/9/share/man/man4</screen>
+
+	    <para>Verifique se o número de revisão da revisão mesclada foi adicionado. Quando isso for verificado, a única coisa que resta é o commit em si.</para>
+
+	    <screen><prompt>%</prompt> <userinput>svn commit stable/9/share/man/man4</userinput></screen>
+	  </sect5>
+	</sect4>
+
+	<sect4>
+	  <title>Precauções antes de efetuar o commit</title>
+
+	  <para>Como sempre, faça um build world (ou as partes apropriadas dele).</para>
+
+	  <para>Verifique as mudanças com o <command>svn diff</command> e <command>svn stat</command>. Certifique-se de que todos os arquivos que deveriam ter sido adicionados ou excluídos foram de fato adicionados ou excluídos.</para>
+
+	  <para>Dê uma olhada mais de perto em qualquer mudança de propriedade (marcada por um <literal>M</literal> na segunda coluna do <command>svn stat</command>). Normalmente, nenhuma propriedade svn:mergeinfo deve estar em qualquer lugar, exceto o diretório (ou diretórios) de destino.</para>
+
+	  <para>Se algo parecer suspeito, peça ajuda.</para>
+	</sect4>
+
+	<sect4>
+	  <title>Fazendo o commit</title>
+
+	  <para>Certifique-se de efetuar o commit de um diretório de nível superior para incluir também o mergeinfo. Não especifique arquivos individuais na linha de comando. Para mais informações sobre como submeter arquivos em geral, veja a seção relevante deste manual.</para>
+	</sect4>
+      </sect3>
+
+      <sect3 xml:id="svn-advanced-use-vendor-imports">
+	<title>Importações de fornecedores com <acronym>SVN</acronym></title>
+
+	<important>
+	  <para>Por favor, leia toda esta seção antes de iniciar uma importação de fornecedores.</para>
+	</important>
+
+	<note>
+	  <para>Os patches para o código do fornecedor se enquadram em duas categorias:</para>
+
+	  <itemizedlist>
+	    <listitem>
+	      <para>Patches do fornecedor: são patches que foram emitidos pelo fornecedor ou que foram extraídos do sistema de controle de versão do fornecedor, que abordam problemas que não podem esperar até a próxima versão do fornecedor.</para>
+	    </listitem>
+
+	    <listitem>
+	      <para>Patches do FreeBSD: são patches que modificam o código do fornecedor para resolver problemas específicos do FreeBSD.</para>
+	    </listitem>
+	  </itemizedlist>
+
+	  <para>A natureza de um patch determina para onde ele deve ser enviado por commit:</para>
+
+	  <itemizedlist>
+	    <listitem>
+	      <para>Os patches do fornecedor devem ser enviados por commit para o branch do fornecedor e mesclados a partir dele. Se o patch resolver um problema em uma nova versão que está sendo importada atualmente, ele <emphasis>não deve</emphasis> ser enviado por commit junto com a nova versão: a versão deve ser importada e marcada primeiro, então a correção pode ser aplicada e o commit efetuado. Não há necessidade de marcar novamente as fontes do fornecedor depois de confirmar o patch.</para>
+	    </listitem>
+
+	    <listitem>
+	      <para>Patches do FreeBSD são enviados diretamente para o head.</para>
+	    </listitem>
+	  </itemizedlist>
+	</note>
+
+	<sect4>
+	  <title>Preparando a Árvore</title>
+
+	  <para>Se estiver importando pela primeira vez após a mudança para o Subversion, é necessário achatar e limpar a árvore do fornecedor, bem como inicializar o histórico de mesclagem na árvore principal.</para>
+
+	  <sect5>
+	    <title>Achatamento</title>
+
+	    <para>Durante a conversão do <acronym>CVS</acronym> para o Subversion, as branches do fornecedor foram importadas com o mesmo layout da árvore principal. Isso significa que as fontes do fornecedor <literal>pf</literal> foram armazenadas originalmente em <filename>vendor/pf/dist/contrib/pf</filename>. O código fonte do fornecedor fica melhor se armazenado diretamente em <filename>vendor/pf/dist</filename>.</para>
+
+	    <para>Para achatar a árvore do <literal>pf</literal>:</para>
+
+	    <screen><prompt>%</prompt> <userinput>cd <replaceable>vendor/pf/dist/contrib/pf</replaceable></userinput>
+<prompt>%</prompt> <userinput>svn mv $(svn list) ../..</userinput>
+<prompt>%</prompt> <userinput>cd ../..</userinput>
+<prompt>%</prompt> <userinput>svn rm contrib</userinput>
+<prompt>%</prompt> <userinput>svn propdel -R svn:mergeinfo .</userinput>
+<prompt>%</prompt> <userinput>svn commit</userinput></screen>
+
+	    <para>O bit <literal>propdel</literal> é necessário porque, começando com 1.5, o Subversion adicionará <literal>svn:mergeinfo</literal> em qualquer diretório que seja copiado ou movido. Nesse caso, como nada está sendo mesclado da árvore excluída, eles apenas atrapalham.</para>
+
+	    <para>As tags também podem ser achatadas (3, 4, 3.5 etc.); o procedimento é exatamente o mesmo, mudando apenas <literal>dist</literal> para <literal>3.5</literal> ou similar, e aguardando para executar o <command>svn commit </command> apenas no final do processo.</para>

*** DIFF OUTPUT TRUNCATED AT 1000 LINES ***


More information about the svn-doc-all mailing list