3 Git funciona localmente. Commits, branches, logs estão gravados no
4 repositório local. Para colaborar com outros projetos, precisamos
5 publicar e ter acesso a repositórios públicos.
7 É possível publicar através de vários protocolos. Além de um diretório
8 local, uma das formas mais simples é utilizar SSH, já que independe de
9 outra configuração e permite escrita. HTTP é uma boa opção somente
10 leitura para repositórios públicos, já que não exige credenciais para
11 acesso. A outra opção é o protocolo próprio do Git, através do git
14 ## Clonando Repositórios
16 Para criar um novo repositório a partir de um repositório publicado,
17 usamos o comando git clone.
19 ~/$ git clone /home/user2/project
20 Cloning into 'project'...
27 Quando um repositório é clonado, temos uma cópia local das referências
28 deste repositório. O repositório é registrado com um nome, sendo origin
29 o nome padrão, e as referências a seus branches são prefixadas com este
30 nome e uma barra. Para visualizar estes branches remotos, utilizamos a
31 opção -r do comando git branch.
33 ~/project$ git branch -r
34 origin/HEAD -> origin/master
38 Note que o HEAD do repositório remoto aponta para o branch remoto
39 chamado master. O HEAD remoto é utilizado para criar um novo branch
40 local quando o repositório é clonado.
48 Com Git, é possível colaborar com mais de um repositório remoto. A lista
49 de repositórios rastreados, com seus nomes e URLs fica no arquivo de
50 configuração do repositório, ou seja, $REPODIR/.git/config.
52 Para manipular esta lista, o comando git remote pode ser útil. É
53 possível listar, adicionar, remover, renomear repositórios remotos.
55 Ao clonar um repositório, o remoto origin já é criado. Este é o nome
56 padrão para comandos que aceitam um remoto como parâmetro, mas permitem
57 que seja omitido, assumindo o remoto origin.
63 Para adicionar um novo remoto, usamos o subcomando add, passando um nome
64 e uma URL como parâmetros.
66 ~/project$ git remote add git://alice.example.com/project.git/
67 ~/project$ git remote show
70 ~/project$ git remote show -n alice
72 Fetch URL: git://alice.example.com/project.git/
73 Push URL: git://alice.example.com/project.git/
74 HEAD branch: (not queried)
75 Local ref configured for 'git push' (status not queried):
76 (matching) pushes to (matching)
79 Ao adicionar um novo repositório remoto, apenas acrescentamos este
80 repositório ao nosso arquivo de configuração. Não fazemos nenhum
81 download dos seus branches e commits remotos. A opção -n do subcomando
82 show evita buscar dados remotamente, que utilizaria a rede.
84 Note que temos duas URLs, uma para fetch e outra para push, que veremos
85 logo a seguir o que significam. Também temos o branch para qual o HEAD
86 do remoto aponta. Neste caso, como o repositório não foi acessado, não
87 temos esta informação. E a configuração para o push, que veremos logo a
88 seguir, fará atualização de branches que se casem.
90 Para remover um repositório remoto, utilizamos o subcomando rm, e pare
91 renomear, o subcomando rename.
93 ~/project$ git remote rename alice aliceS
94 ~/project$ git remote show
97 ~/project$ git remote rm aliceS
100 ## Fazendo atualizações
102 Após adicionar um remoto, queremos fazer o download dos branches e
103 commits remotos. Um dos comandos que pode ser utilizado é git fetch.
105 ~/project$ git fetch alice
106 From git://alice.example.com/project.git/
107 * [new branch] master -> alice/master
108 * [new branch] shell -> alice/shell
109 ~/project$ git branch -r
112 origin/HEAD -> origin/master
117 Note que ao realizar o fetch, diferente do clone, não é criada uma
118 referência ao HEAD do repositório remoto. Tampouco, é criado um branch
119 local, ou feito um checkout. As referências, no entanto, são escritas
120 localmente, de tal forma que é possível investigar os commits dos
121 branches remotos sem novo acesso à rede.
123 Como o acesso à rede não é feito a cada comando, novas atualizações
124 precisam ser feitas quando o repositório remoto é atualizado e deseja-se
125 investigar novos branches ou novos commits. Além de git fetch, pode ser
126 utilizado git remote update.
128 ~/project$ git remote update
131 From /home/cascardo/git/ff/project
132 * [new branch] devel -> alice/devel
135 Veja que um novo branch foi atualizado.
137 ## Publicando um repositório