\section{Uso do repositório de documentos}\label{page:Manual_-_Uso_do_repositório_de_documentos}

\subsection{Conceito}

\begin{figure}[htb]
  \centering
  \includegraphics[width=\textwidth]{120719035117_repositorio.jpg}
  \label{120719035117_repositorio.jpg}
\end{figure}
Repositório é um lugar no servidor onde os arquivos ficam guardados. Ninguém acessa esses arquivos diretamente. Para acessar esses arquivos você deve criar uma cópia local na sua máquina. Se você quiser gravar alguma coisa NOVA no servidor, deve primeiro gravar esse arquivo na sua cópia local, e depois ENVIAR esse arquivo para o servidor. As alterações nos arquivos que já estão no servidor (e obviamente na sua cópia local) também são feitas dessa forma. Primeiro você altera o arquivo na sua cópia local e depois envia a alteração para o servidor.
O processo de criar e obter a cópia local chama-se `Checkout'. O processo de enviar os arquivos novos e as alterações da sua cópia local para o servidor chama-se `Commit'. Cada vez que você faz um `Commit' o servidor também cria, automaticamente, uma cópia da versão anterior, para que você nunca `apronte' uma de copiar um arquivo bixado sobre um arquivo bom. Se você excluir um arquivo da sua cópia local, no ato do `Commit' o arquivo também vai ser excluído no servidor. Mas, como o servidor é `à prova de kakas', com certeza ele tem uma cópia do arquivo apagado.

A Priori dispõem de um repositório de documentos. Ele é controlado pelo subversion, e todos os colaboradores pode (e devem) usar ele.
Cada máquina deve ter uma cópia local dos documentos do repositório. Esta cópia deve estar em `c:\textbackslash{}publico'.

A cópia local é administrada pela ferramenta TortoiseSVN (lê-se tortóise ésse-vê-êne mesmo). Todos devem se familiarizar com ela.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719060111_tortoise.jpg}
  \label{120719060111_tortoise.jpg}
\end{figure}

O endereço do repositório é svn://priori.sytes.net/publico
Cada pasta do repositório tem um arquivo chamado `regras.txt'. LEIA esse arquivo ANTES de criar/alterar/excluir algum arquivo ou pasta. Se você quiser, quebrar alguma regra, converse antes com o responsável pela pasta em questão. O responsável está indicado bem no início do arquivo `regras.txt'.
Se, apesar de todos os avisos e de toda a ajuda oferecida, você quebrar as regras, você está se sujeitando aos mais diversos e variados castigos, e nenhum `Ah, mas é que\ldots{}', ou `Eu não sabia' vai te livrar dessa. Tá bom, talvez um `vou consertar a kaka e prometo não aprontar de novo' sirva como atenuante.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719041344_castigo.png}
  \label{120719041344_castigo.png}
\end{figure}
Não queremos uma estrutura rígida, na qual tudo seja proibido. Queremos algo organizado, e que todos saibam onde encontrar o que procuram. É o segundo S do 5S: Organização, que prega ``uma lugar para cada coisa e cada coisa em seu lugar''.
No início nós vamos ter dificuldades, mas vamos aprender com nossos erros até chegarmos à perfeição total, plena e absoluta!
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719055701_perfeito.png}
  \label{120719055701_perfeito.png}
\end{figure}

\subsection{Organização}

O repositório está organizado por departamentos. Cada departamento é representado por uma pasta. E a pasta de cada departamento tem subpastas para organizar seus assuntos.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719042721_estrutura.png}
  \label{120719042721_estrutura.png}
\end{figure}

\subsection{Instalar/Atualizar o TortoiseSVN}

Já existe um TortoiseSVN instalado na sua máquina. Não tem? (!) Ops\ldots{} um técnico altamente especializado vai instalar.
De vez em quando o povinho que faz o TortoiseSVN cria uma versão nova, e, como nós somos bem moderninhos, queremos sempre a versão que acaba de sair do forno. O próprio TortoiseSVN avisa quando tem uma versão mais nova para ser instalada. Recomendamos atualizar sempre para a versão mais atual. Se você tiver alguma dificuldade para atualizar, peça ajuda ao `técnico altamente especializado'.

\subsection{Criar a sua cópia local}

Para criar uma cópia local do repositório na sua máquina, abra o TortoiseSVN e use a opção `Checkout'. Crie a cópia local na pasta `c:\textbackslash{}publico' ou em `d:\textbackslash{}publico'.

\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719114317_checkout.png}
  \label{120719114317_checkout.png}
\end{figure}

\subsection{Atualizar a cópia local de sua máquina, obtendo a versão mais atual do repositório}

Com frequência você deve atualizar a sua cópia local. Só assim você vai ter certeza de que está trabalhando com a versão mais atual. Como `frequência' é um termo muuuuuito vago, acostume-se a atualizar sua cópia local ANTES de fazer qualquer alteração em um arquivo, e ANTES de confiar sua vida às informações que você vai ver. Como regra básica, atualize sempre antes de trabalhar com sua cópia local. A atualização não demora quase nada.

Para atualizar sua cópia local, abra o TortoiseSVN e use a opção `Update'. E, antes que você consiga solterar TortoiseSVN de trás pra frente, sua cópia local estará atualizada :) .

Perfeito? Não! De vez em quando pode acontecer o tal do `conflito'.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719034641_conflito.jpeg}
  \label{120719034641_conflito.jpeg}
\end{figure}
Isso acontece porque você alterou algum arquivo, e um colega seu TAMBÉM alterou o mesmo arquivo. E agora, quem poderá nos ajudar? Você tem 3 opções:

\begin{enumerate}
  \item Manter a sua versão, ignorando completamente o que seu colega fez (parece sacanagem com ele).
  \item Manter a versão de seu colega, ignorando as alterações que você fez (maior sacanagem ainda, porque agora é contigo).
  \item Conversar com o colega que fez a alteração, e resolverem o conflito amigavelmente. Normalmente a resolução desses conflitos é mais complicada e você deve pedir ajuda para uma entidade superior, que saiba o que significa `merge', `conflict', `version', `ovni/ufo'. Grite HEEEEEELP para o Milton, Marciano, Luciano, Giovano\ldots{} Alguém vai te ajudar a resolver o conflito.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719033848_briga.jpg}
  \label{120719033848_briga.jpg}
\end{figure}
\end{enumerate}

\subsection{Enviar suas alterações ao repositório}

Para enviar suas alterações para o repositório de servidor, abra o TortoiseSVN e use a opção `Commit'. Os arquivos que você alterou já vão estar automaticamente marcados para serem enviados. Confira se os arquivos REALMENTE devem ser enviados. Os arquivos novos que você criou nas pastas não vão estar marcados para serem enviados. Cheque os arquivos NÃO MARCADOS e, se achar que devem ser enviados, marque-os. Mas lembre-se de seguir as regras. O nome de arquivo é importante. O conteúdo também. Não queremos `lixo' ou coisas que não pertencem a esta pasta. Se você apagou algum arquivo de sua cópia local, o `Commit' vai apagar ele do servidor também.

Ao enviar as alterações para o servidor (Commit), você DEVE informar o motivo desse commit no quadro `Message:'. Descreva nesse quadro quais são as alterações que você fez, de forma sucinta, mas clara. Quando alguém (auditor -- pois é, temos auditoria (!) ) quiser saber o que anda acontecendo com o repositório é mais fácil ler esses motivos do que ficar olhando um por um dos arquivos alterados.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719035455_auditor.jpg}
  \label{120719035455_auditor.jpg}
\end{figure}
Mas não pense que você consegue enganar o auditor, que é beeeeeeeem espertinho. Ele ainda vai confrontar o texto que você escreveu com as alterações efetivamente feitas.

Veja só uma tela de `Commit'. Nela temos um arquivo alterado, que está na cor azul (e dá-lhe grêmio!), um arquivo que sumiu, em vermelho (algum colorado aprontou), e um arquivo novo, em black power. O arquivo alterado já está marcado para ser enviado ao servidor, enquanto os outros dois não. Se você quiser excluir o arquivo local do servidor TAMBÉM, marque ele. E se você quiser incluir o arquivo novo no servidor, marque ele. Mas lembre-se de conferir as regras para arquivos novos. Veja que no exemplo o nome do arquivo está totalmente fora das regras, e deveria ser 1-renomeado ou 2-não enviado ao servidor.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719114031_commit-inicial.png}
  \label{120719114031_commit-inicial.png}
\end{figure}

Como eu quero de fato enviar todas essas alterações para o servidor, marquei o arquivo novo e o excluído. Também justifiquei cada uma das alterações. Veja só como ficou bacana:
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719114031_commit-pronto.png}
  \label{120719114031_commit-pronto.png}
\end{figure}

Clicando no Ok o servidor vai ser atualizado. Good job! \begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719033335_tudo-certo.jpg}
  \label{120719033335_tudo-certo.jpg}
\end{figure}

Quando os colegas fizerem a atualização de sua cópia local, o servidor vai enviar a alteração do primeiro arquivo, vai excluir o arquivo que eu excluí, e criar um arquivo novo, automagicamente.

Apesar de este exemplo estar mostrando um `commit' contendo três arquivos, é conveniente atualizar somente uma informação por `commit', e descrevê-la na mensagem. Isso é mais uma recomendação do que uma regra. O problema de ter vááááários arquivos em uma atualização é a dificuldade em localizar essa alteração no futuro. Se na alteração deste exemplo eu quisesse manter a recomendação, poderia fazer três commits independentes, cada um com um arquivo:

\begin{enumerate}
  \item O orçamento alterado, e usar primeira linha da mensagem
  \item O commit da exclusão do arquivo, também devidamente comentado
  \item O commit do arquivo novo
Parece que isso dá muuuuito trabalho. Não Dá! O caso do exemplo, tanto fazendo um commit só como fazendo três commits individuais, não dá mais de 1 minuto de trabalho. Então, tal qual um bom chopp, use com moderação.
\end{enumerate}

\subsection{Cancelar as alterações da cópia local}

De vez em quando você faz alguma alteração (ou cria um arquivo, ou apagam algum) na sua cópia local e depois se arrepende. Nesses casos o repositório é condescendente e te oferece o perdão.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719045449_arrependimento.jpeg}
  \label{120719045449_arrependimento.jpeg}
\end{figure}
A qualquer momento você pode cancelar suas alterações, revertendo para a versão que está no servidor. Você pode reverter um arquivo específico, ou mesmo uma pasta toda (inclusive a cópia local inteirinha). Para reverter, abra o TortoiseSVN sobre o arquivo ou pasta, e use a opção `Revert'. Claro que ele vai te pedir confirmação, porque depois de reverter, as suas alterações locais nesse arquivo ou pasta serão irremediavelmente (!) perdidas.

\subsection{Usar uma versão mais antiga de um arquivo ou pasta}

Você pode obter uma versão mais antiga de um arquivo ou pasta, ou até do repositório todo. É como se você pudesse voltar no tempo!
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719045449_passado-presente-futuro.jpg}
  \label{120719045449_passado-presente-futuro.jpg}
\end{figure}
Você pode ver todo o histórico de alterações de um arquivo ou de uma pasta. Para isso, sobre o arquivo ou pasta, abra o TortoiseSVN e use a opção `Show Log'. Você verá todas as versões disponíves, com informações sobre a data da alteraçao e do autor. Também verá a mensagem deixada pelo autor da alteração (lembra da mensagem a cada commit? Eis a utilidade dela).
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719045449_log.png}
  \label{120719045449_log.png}
\end{figure}

Para usar a versão desejada, clique sobre ela (botão direito) e selecione a opção `Revert to this revision'. A versão selecionada estará na sua cópia local, como se você tivesse feito as `desalterações' dela.
\begin{figure}[H]
  \centering
  \includegraphics[width=\textwidth]{120719045449_log-menu.png}
  \label{120719045449_log-menu.png}
\end{figure}
Cuidado porque o sistema considera que agora esse arquivo foi alterado, portanto um commit vai envar essa alteração para o servidor como sendo uma NOVA alteraçao. Se é isso que você quer, sem problema. Mas se você trouxe uma versão anterior só para olhar e comparar, mas não quer enviar ela para o servidor como uma versão NOVA, você pode se `arrepender' e reverter as alterações, como visto no item `Cancelar as alterações da cópia local'.

