Acrescenta um índice com outras páginas.
[cursogit.git] / Colaborando_com_Git.mdwn
index 65910d8..373ff00 100644 (file)
@@ -128,7 +128,7 @@ utilizado git remote update.
        ~/project$ git remote update
        Fetching origin
        Fetching alice
        ~/project$ git remote update
        Fetching origin
        Fetching alice
-       From /home/cascardo/git/ff/project
+       From git://alice.example.com/project.git/
         * [new branch]      devel      -> alice/devel
        ~/project$ 
 
         * [new branch]      devel      -> alice/devel
        ~/project$ 
 
@@ -220,6 +220,32 @@ de comando. A opção current atualiza no remoto especificado ou ímplicito
 o branch com o mesmo nome que o branch local corrente. E a opção
 upstream atualiza o branch remoto rastreado pelo branch corrente.
 
 o branch com o mesmo nome que o branch local corrente. E a opção
 upstream atualiza o branch remoto rastreado pelo branch corrente.
 
+## Repositórios bare
+
+É importante mencionar que ao realizar push em um repositório com um
+diretório de trabalho, o diretório de trabalho e o índice não são
+atualizados, mesmo que o branch corrente seja o branch atualizado. Isto
+pode causar problemas, caso o diretório de trabalho seja atualizado.
+Portanto, o padrão em versões desde 1.7.0 é impedir que tal branch seja
+atualizado, a não ser que a opção de configuração
+receive.denyCurrentBranch utilize os valores warn, false ou ignore.
+
+Anteriormente à versão 1.7.0, o diretório de trabalho era atualizado
+quando um push era feito. Isso poderia ser perigoso, pois o diretório de
+trabalho poderia conter alterações que não foram gravadas, causando a
+perda de dados.
+
+Mas existe um tipo de repositório que não possui diretório de trabalho,
+e pode evitar problemas como esses. Este tipo de repositório é conhecido
+como repositório bare. Ele pode ser criado com a opção --bare de git
+init ou de git clone. Geralmente, por convenção, tais repositórios têm a
+URL terminada em .git.
+
+       $ git clone --bare project/ project.git/
+       Cloning into bare repository 'project.git'...
+       done.
+       $
+
 ## Publicando um repositório
 
 Vimos como trabalhar com um repositório remoto, obtendo seus commits
 ## Publicando um repositório
 
 Vimos como trabalhar com um repositório remoto, obtendo seus commits
@@ -231,6 +257,8 @@ Há várias formas de fazê-lo. Veremos aqui algumas delas, utilizando um
 host próprio, que seja acessível ao público alvo, através de SSH, HTTP
 ou git daemon.
 
 host próprio, que seja acessível ao público alvo, através de SSH, HTTP
 ou git daemon.
 
+### SSH
+
 Publicar através de SSH é simples de ser feito, mas tem algumas
 implicações. Entre elas é o acesso exigido a um shell no host para os
 usuários, dificultando acesso anônimo e criando um novo problema de
 Publicar através de SSH é simples de ser feito, mas tem algumas
 implicações. Entre elas é o acesso exigido a um shell no host para os
 usuários, dificultando acesso anônimo e criando um novo problema de
@@ -246,3 +274,31 @@ Uma excelente forma de utilizar a publicação via SSH é disponibilizá-la
 de forma somente leitura através de outros métodos, e ter um único
 usuário que possa atualizá-lo, o que resolve vários dos problemas já
 mencionados.
 de forma somente leitura através de outros métodos, e ter um único
 usuário que possa atualizá-lo, o que resolve vários dos problemas já
 mencionados.
+
+Há duas formas simples para publicar um repositório via SSH. Uma delas é
+criar um bare clone do repositório e fazer a cópia para o host remoto,
+através do método de preferência. Uma opção é scp.
+
+       $ git clone --bare project/
+       Cloning into bare repository 'project.git'...
+       done.
+       $ scp -rq project.git/ git.example.com:/srv/git/alice/
+       $ 
+
+A outra opção é criar um repositório bare no host remoto, e fazer o
+primeiro push.
+
+       alice@git.example.com $ mkdir project.git
+       alice@git.example.com $ cd project.git
+       alice@git.example.com project.git$ git init --bare
+       Initialized empty Git repository in /srv/git/alice/project.git/
+       alice@git.example.com project.git$ 
+       
+       ~/project$ git remote add origin git.example.com:/srv/git/alice/project.git/
+       ~/project$ git push origin master:master
+       Counting objects: 3, done.
+       Writing objects: 100% (3/3), 229 bytes, done.
+       Total 3 (delta 0), reused 0 (delta 0)
+       To git.example.com:/srv/git/alice/project.git/
+        * [new branch]      master -> master
+       ~/project$