<chapter id="cvs">
<title
>Usar o &CVS;</title>
<indexterm zone="cvs"
><primary
>CVS</primary
></indexterm>
<indexterm zone="cvs"
><primary
>controlo de revisões (versões)</primary
></indexterm>

<sect1 id="cvs-basics">
<title
>Bases do &CVS;</title>

<para
>O &CVS; é o sistema de controlo de versões que muitos dos projectos 'open-source' - incluindo o &kde; &mdash; usam. Ele grava todo o código num sítio local, chamado de <emphasis
>repositório</emphasis
>. A partir do repositório, os programadores poderão obter uma versão actualizada do projecto (ou partes dele) em qualquer altura. Em contraste com outros sistemas de controlo de versões, não é necessário <emphasis
>bloquear</emphasis
> os ficheiros em que uma pessoa deseja trabalhar. Como tal, o desenvolvimento poderá ser altamente paralelizado. </para>

<para
>Sempre que um programador terminar uma tarefa, ele <emphasis
>envia</emphasis
> o seu código (acompanhado de uma mensagem de registo). O &CVS; tem a seu cargo a junção das alterações feitas pelos vários programadores. Poderá acontecer, obviamente, que os programadores trabalhem no mesmo pedaço de código, o que irá resultar num conjunto de alterações em conflito (na prática, isto ocorre raramente, e normalmente é sintoma de falta de comunicação). Nesse caso, o &CVS; rejeita um envio; só após todos os conflitos terem sido resolvidos é que um ficheiro poderá ser enviado. </para>

<para
>Até agora, isto foi uma descrição das funcionalidades básicas do &CVS; com que uma pessoa tem de lidar normalmente. Mas o &CVS; oferece bastante mais: poder-se-ão manter várias ramificações de um projecto (&eg; o &kde; 1.1.2 e o &kde; 2 eram ramificações da árvore de desenvolvimento do &kde;), reunir as modificações de uma ramificação noutra, pedir as diferenças entre versões, o histórico de versões de ficheiros &etc; </para>

<para
>O &CVS; está implementado como um sistema cliente-servidor. Como utilizador, toda a comunicação com o repositório é feita através do programa da linha de comandos &cvs;. Está disponível uma interface de nível mais elevado através das interfaces existentes, como o &cervisia; (<ulink url="http://cervisia.sf.net"
></ulink
>) ou o <application
>TkCVS</application
> (<ulink url="http://tkcvs.sf.net"
></ulink
>). No &kdevelop;, só uma pequena parte da funcionalidade do &cvs; é relevante para o seu trabalho diário e que poderá ser usada directamente. </para>

<para
>Assume-se um conhecimento básico da utilização do &CVS;. Em particular, deverá saber como obter um dado projecto do seu repositório. Recomenda-se o livro <quote
>Open Source Development With &CVS;</quote
> de Karl Fogel, o qual está disponível de forma livre (excepto os capítulos não-técnicos). Veja em <ulink url="http://cvsbook.red-bean.com/cvsbook.html"
></ulink
>. </para>

</sect1
> <!-- cvs-basics -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="cvs-commands">
<title
>Comandos do &CVS; no &kdevelop;</title>

<para
>Na árvore de ficheiros, estão disponíveis os seguintes itens do menu de contexto: </para>

<variablelist>
<varlistentry>
<term
>Adicionar ao Repositório</term>
<listitem>
<para
>Prepara o ficheiro marcado para ser adicionado ao repositório. O ficheiro é transferido para o mesmo quando o enviar (ou a pasta que o contém) da próxima vez. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Remover do Repositório</term>
<listitem>
<para
>Prepara um ficheiro para ser removido do repositório. Isto remove também o ficheiro do sistema de ficheiros local, como tal use esta funcionalidade com cuidado! </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Actualizar</term>
<listitem>
<para
>Execute o <command
>cvs update</command
> para reunir as modificações dos outros utilizadores na sua pasta de trabalho. Quando usar este item do menu sobre uma pasta, a actualização irá acontecer normalmente de forma recursiva, excepto se tiver desactivado essa possibilidade no ficheiro de configuração <filename
>.cvsrc</filename
>. </para>
</listitem>
</varlistentry>

<varlistentry>
<term
>Enviar</term>
<listitem>
<para
>Executa o <command
>cvs commit</command
> para enviar as modificações locais para o repositório. Lembre-se que deverá fazer uma actualização local antes de fazer isto. Caso contrário, quando outro utilizador tiver enviado as suas modificações antes, o &CVS; poder-lhe-á mostrar uma mensagem de erro. </para>
</listitem>
</varlistentry>
</variablelist>

<para
>Todos estes comandos são invocados como sub-processos pelo &kdevelop; sem quaisquer outras opções da linha de comandos ou variáveis de ambiente. Isto poderá ser um problema quando a ligação ao servidor de &CVS; for através de uma ligação de &ssh; e você tiver de indicar a sua senha, sempre que envia ou recebe as actualizações. Isto é, por exemplo, necessário quando o seu projecto está alojado no <filename
>sourceforge.net</filename
>. As soluções alternativas para este problema estão descritas na FAQ do &CVS;/SSH, que poderá encontrar na documentação do SourceForge. </para>

</sect1
> <!-- cvs-basics -->

<!-- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -->

<sect1 id="cvs-behind">
<title
>Nos Bastidores</title>

<sect2 id="cvs-behind-workdir">
<title
>O Que o &CVS; Grava na Pasta de Trabalho</title>

<para
>(... ainda não escrito ...) </para>
</sect2
> <!-- cvs-behind-workdir -->

</sect1
> <!-- cvs-behind -->

</chapter
> <!-- cvs -->
