====== Usando o GitLab da TerraLib ======
**Resumo:** Este documento explica como os desenvolvedores devem criar //forks// do repositório original da TerraLib no ambiente do GitLab, bem como configurar seus repositórios locais para mantê-los em sincronia com o original. Também é apresentado como submeter pedidos para incorporação de modificações no repositório original.
===== Introdução =====
O repositório oficial da TerraLib no GitLab encontra-se disponível no seguinte endereço:\\ https://gitlab.dpi.inpe.br/terralib/terralib
Este repositório deverá ser utilizado apenas para download do código fonte oficial.
Os desenvolvedores que queiram realizar alterações no código fonte e depois submeter essas alterações para integração ao repositório oficial, deverão criar //forks// a partir do repositório principal, submetendo as modificações como solicitações de //merge request//.
Se você quer apenas fazer o download do código fonte oficial, consulte o documento [[:wiki:documentation:devguide:cloning|Cloning TerraLib/TerraView Repository]].
===== Criando um fork do Repositório Oficial da TerraLib =====
No seu navegador, vá para o endereço: https://gitlab.dpi.inpe.br.
Na interface gráfica do GitLab, navegue até o projeto TerraLib:\\ https://gitlab.dpi.inpe.br/terralib/terralib
O botão de //Fork// se encontra no centro da página.
Basta clicar no botão de //Fork// e selecionar o seu usuário no formulário que será exibido.
Ao final deste processo você terá o seu //fork// disponível em um link como:\\ https://gitlab.dpi.inpe.br/gribeiro/terralib
===== Criando uma Cópia Local do seu Fork =====
**1.** Para criar uma cópia local do seu //fork// para trabalhar, basta apontar o Git para o endereço do seu //fork//, como por exemplo:
$ GIT_SSL_NO_VERIFY=true git clone https://gitlab.dpi.inpe.br/gribeiro/terralib.git .
**Atenção:** No comando acima, desabilitamos o uso de certificados SSL. Se você preferir, pode desabilitar de forma local ou global essa verificação. Para deabilitar de forma global faça:
$ git config --global http.sslVerify false
Se você preferir desabilitar a verificação de certificados SSL apenas para o repositório que você já clonou, faça:
$ git config http.sslVerify false
**2.** Após ter clonado o repositório, não se esqueça de configurar suas credenciais para que os commits sejam anotados com o seu usuário:
$ git config user.name your-login
$ git config user.email your-e-mail
**3.** Se quiser, já alterne para o //branch// correto:
$ git checkout -b develop origin/develop
===== Configurando sua Cópia Local do Fork para Sincronizá-lo com o Repositório Original =====
**1.** Após ter clonado e configurado o seu repositório local a partir do seu //fork//, será necessário associar seu repositório local com o repositório oficial. Para isso, utilize o seguinte comando:
$ git remote add upstream https://gitlab.dpi.inpe.br/terralib/terralib.git
Pelo TortoiseGit:
{{:wiki:documentation:devguide:addremotetortoisegit.jpg?600|}}
**2.** Verifique se o //upstream// do seu repositório local foi associado corretamente ao endereço do repositório oficial (https://gitlab.dpi.inpe.br/terralib/terralib.git). Para isso, utilize o comando abaixo:
$ git remote -v
A saída deverá ser semelhante à seguinte:
origin https://gitlab.dpi.inpe.br/seu-nome-usuario/terralib.git (fetch)
origin https://gitlab.dpi.inpe.br/seu-nome-usuario/terralib.git (push)
upstream https://gitlab.dpi.inpe.br/terralib/terralib.git (fetch)
upstream https://gitlab.dpi.inpe.br/terralib/terralib.git (push)
===== Sincronizando Sua Cópia Local e Seu Fork com o Repositório Original =====
**1.** Faça o //fetch// dos //branches// e seus respectivos //commits// do repositório //upstream//:
$ git fetch upstream
**2.** Faça o //merge// do repositório oficial (//upstream/develop// ou outro ramo desejado) com a sua cópia local (que ocorrerá com o //branch// corrente):
$ git merge upstream/develop
**3.** Envie suas modificações para o repositório do seu //fork//:
$ git push
===== Fazendo um Pedido de Merge (Merge Requests) =====
Para enviar as modificações presentes no repositório do seu //fork// para o repositório original será necessário fazer um pedido de //merge// através da interface gráfica do GitLab.
No seu navegador, vá para o endereço do seu //fork//, como por exemplo:\\ https://gitlab.dpi.inpe.br/gribeiro/terralib.
No painel à esquerda selecione a opção //Merge Requests// e crie um novo pedido (//New Merge Request//).
Você será redirecionado para uma página com dois mecanismos na tela. O objeto apresentado em //Source branch// representa o seu fork e //Target Branch// o repositório oficial da TerraLib.
Em //Source Branch//, selecione o branch que estão as modificações do seu fork. Em //Target Branch//, selecione para qual branch do repositório oficial que deve incorporar as novas mudanças. Em seguida, selecione "Compare branches and continue".
**Atenção** Se não houver mudanças comparando os branches, você não poderá prosseguir com a criação do pedido de //Merge Request//.
Você será redirecionado para a página de criação e detalhes adicionais do //Merge Request//. Preencha um título do pedido, adicione uma descrição do que esta foi feito e em seguida confirme.
===== Dicas para o Git =====
=== Alterando o endereço de um remote ===
Caso você queira alterar o endereço de um remote, use o comando a seguir em seu repositório local:
$ git remote set-url
=== Desfazendo um commit no seu repositório local ===
Desfazendo o último commit e mantendo as alterações:
$ git reset HEAD^
Desfazendo o último commit e as alterações **permanentemente**:
$ git reset HEAD^ --hard
Desfazendo múltiplos commits:
$ git reset HEAD~