X-Git-Url: http://git.cascardo.eti.br/?a=blobdiff_plain;f=Colaborando_com_Git.mdwn;h=373ff00385af2f62374779cc216503deb4b7b097;hb=refs%2Fheads%2Ftodo;hp=bcba446223cf3ca520e87a856a55bbea6d5aab82;hpb=23fe1c21e61fb38ad6d942ad59ac67b1c5a2c711;p=cursogit.git diff --git a/Colaborando_com_Git.mdwn b/Colaborando_com_Git.mdwn index bcba446..373ff00 100644 --- a/Colaborando_com_Git.mdwn +++ b/Colaborando_com_Git.mdwn @@ -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. +## 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 @@ -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. +### 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 @@ -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. + +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$