O SVN usa um único repositório centralizado para servir como hub de comunicação para desenvolvedores e a colaboração ocorre passando os conjuntos de alterações entre as cópias ativas dos desenvolvedores e o repositório central. Isso é diferente do modelo de colaboração distribuída do Git, que dá a cada desenvolvedor sua própria cópia do repositório, completa com seu próprio histórico local e estrutura de ramificação. Geralmente, os usuários precisam compartilhar uma série de confirmações em vez de um único conjunto de alterações. Em vez de confirmar um conjunto de alterações de uma cópia ativa para o repositório central, o Git permite compartilhar ramificações inteiras entre os repositórios.

O comando git remote é uma parte do sistema mais amplo que é responsável pela sincronização de alterações. Os registros feitos através do comando git remote são usados juntamente com os comandos git fetch, git push e git pull . Todos esses comandos têm suas próprias responsabilidades de sincronização, que podem ser exploradas nos links correspondentes.

Git remote

O comando git remote permite criar, ver e excluir conexões com outros repositórios. As conexões remotas são mais parecidas com marcadores em vez de links diretos para outros repositórios. Em vez de fornecer acesso em tempo real a outro repositório, eles funcionam como nomes convenientes que podem ser usados para fazer referência a uma URL não tão conveniente.

Por exemplo, o diagrama a seguir mostra duas conexões remotas do seu repositório com o repositório central e o repositório de outro desenvolvedor. Em vez de fazer referência a eles pelas suas URLs completas, você pode passar a origem e os atalhos de John para outros comandos do Git.

Using git remote to connect other repositories

Visão geral de uso remoto do Git

O comando git remote é essencialmente uma interface para gerenciar uma lista de entradas remotas que são armazenadas no arquivo ./.git/config do repositório. Os comandos a seguir são usados para ver o estado atual da lista remota.

Como ver configurações remotas do git

git remote

Listar as conexões remotas que você tem com outros repositórios.

git remote -v

Igual ao comando acima, mas inclui a URL de cada conexão.

Como criar e modificar configurações remotas do git

O comando git remote é também uma conveniência ou método 'auxiliar' para modificar o arquivo ./.git/config de um repositório. Os comandos apresentados abaixo permitem gerenciar conexões com outros repositórios. Os comandos a seguir vão modificar o arquivo /.git/config do repositório. O resultado dos comandos a seguir também pode ser alcançado editando diretamente o arquivo ./.git/config com um editor de texto.

git remote add <name> <url>

Crie uma nova conexão com um repositório remoto. Depois de adicionar um remoto, você poderá usar <name> como um atalho conveniente para <url> em outros comandos do Git.

git remote rm <name>

Remova a conexão com o repositório remoto chamado <name>.

git remote rename <old-name> <new-name>

Renomeie uma conexão remota de <old-name> para <new-name>.

Discussão remota do Git

O Git foi projetado para dar a cada desenvolvedor um ambiente de desenvolvimento totalmente isolado. Isso significa que as informações não são automaticamente passadas entre os repositórios. Em vez disso, os desenvolvedores precisam puxar manualmente as confirmações de upstream para seu repositório local ou enviar manualmente suas confirmações locais de volta para o repositório central. O comando git remote é realmente apenas uma forma mais fácil de passar URLs para esses comandos de "compartilhamento".

A origem Remota

Quando você clona um repositório com git clone, ele automaticamente cria uma conexão remota chamada origem, que aponta de volta para o repositório clonado. Isso é útil para os desenvolvedores criarem uma cópia local de um repositório central, pois oferece uma maneira fácil de puxar alterações de upstream ou publicar confirmações locais. Esse comportamento é também o motivo pelo qual a maioria dos projetos baseados em Git chama de origem o seu repositório central.

URLs do repositório

O Git suporta muitas formas de fazer referência a um repositório remoto. Duas das maneiras mais fáceis de acessar um repositório remoto são por meio dos protocolos HTTP e SSH. HTTP é uma maneira fácil de permitir acesso anônimo, somente leitura a um repositório. Por exemplo:

http://host/path/to/repo.git

Mas geralmente não é possível enviar confirmações para um endereço HTTP (você não quer permitir envios anônimos de forma nenhuma). Para acesso de leitura-gravação, é necessário usar SSH:

ssh://user@host/path/to/repo.git

Você vai precisar de uma conta SSH válida na máquina host, mas diferente disso, o Git suporta o acesso autenticado via SSH pronto para uso. Soluções de hospedagem de terceiros modernas e seguras, como Bitbucket.com, vão fornecer essas URLs para você.

Comandos remotos do Git

O comando git remote é um dos muitos comandos Git que têm 'subcomandos' adicionais anexados. Abaixo, há uma verificação dos subcomandos git remote comumente usados.

ADD <NAME> <URL>

Adiciona um registro a ./.git/config para o remoto chamado <name> na URL do repositório <url>.

Aceita uma opção -f, que vai git fetch <name> imediatamente depois do registro remoto ser criado.

Aceita uma opção --tags, que vai git fetch <name> imediatamente e importar cada tag do repositório remoto.

RENAME <OLD> <NEW>

Atualiza ./.git/config para renomear o registro <OLD> para <NEW>. Todas as ramificações de rastreamento remoto e definições de configuração para o remoto são atualizadas.

REMOVE or RM <NAME>

Modifica ./.git/config e remove o remoto chamado <NAME>. Todas as ramificações de rastreamento remoto e definições de configuração para o remoto são removidas.

GET-URL <NAME>

Envia as URLs para um registro remoto.

Aceita --push, as URLs de envio são consultadas e não as URLs de busca.

Com --all, todas as URLs para o remoto serão listadas.

SHOW <NAME>

Envia informações de alto nível sobre o remoto <NAME>.

PRUNE <NAME>

Exclui todas as ramificações locais para <NAME> que não estão presentes no repositório remoto.

Aceita uma opção --dry-run que vai listar quais ramificações são definidas como reduzidas, mas não vai realmente reduzi-las.

Exemplos remotos do Git

Além da origem, frequentemente é conveniente ter uma conexão com os repositórios de seus colegas de equipe. Por exemplo, se seu colega de trabalho, John, mantém um repositório publicamente acessível em dev.example.com/john.git, você pode adicionar uma conexão da seguinte maneira:

git remote add john http://dev.example.com/john.git

Ter esse tipo de acesso a repositórios de desenvolvedores individuais permite colaborar fora do repositório central. Isso pode ser muito útil para equipes pequenas que estão trabalhando em um projeto grande.

Como mostrar seus remotos

Por padrão, o comando git remote vai listar as conexões remotas armazenadas anteriormente para outros repositórios. Isso vai produzir uma saída de linha única que lista os nomes de "marcador" de repositórios remotos.

$ git remote
origin
upstream
other_users_repo

Chamar git remote com a opção -v vai imprimir a lista de nomes de repositórios marcados e também a URL do repositório correspondente. A opção -v significa "detalhado". Abaixo, há uma saída de exemplo da saída git remote detalhada.

git remote -v
origin  git@bitbucket.com:origin_user/reponame.git (fetch)
origin  git@bitbucket.com:origin_user/reponame.git (push)
upstream    https://bitbucket.com/upstream_user/reponame.git (fetch)
upstream    https://bitbucket.com/upstream_user/reponame.git (push)
other_users_repo    https://bitbucket.com/other_users_repo/reponame (fetch)
other_users_repo    https://bitbucket.com/other_users_repo/reponame (push)

Como adicionar repositórios remotos

O comando git remote add vai criar um novo registro de conexão para um repositório remoto. Depois de adicionar um remoto, você pode usar <name> como um atalho conveniente para <url> em outros comandos Git. Para obter mais informações sobre a sintaxe de URL aceita, veja a seção "URLs de repositório" abaixo. Este comando vai criar um novo registro dentro do ./.git/config do repositório. A seguir, é mostrado um exemplo dessa atualização do arquivo de configuração:

$ git remote add fake_test https://bitbucket.com/upstream_user/reponame.git; [remote "remote_test"] 
   url = https://bitbucket.com/upstream_user/reponame.git 
   fetch = +refs/heads/*:refs/remotes/remote_test/*

Como inspecionar um remoto

O subcomando show pode ser anexado a git remote para dar uma saída detalhada na configuração de um remoto. Esta saída vai conter uma lista de ramificações associadas ao remoto e também aos terminais anexados para busca e envio.

git remote show upstream
* remote upstream
   Fetch URL: https://bitbucket.com/upstream_user/reponame.git
   Push URL: https://bitbucket.com/upstream_user/reponame.git
   HEAD branch: master
   Remote branches:
      master tracked
      simd-deprecated tracked
      tutorial tracked
   Local ref configured for 'git push':
      master pushes to master (fast-forwardable)

Como buscar e puxar de remotos do Git

Depois que um registro remoto é configurado pelo uso do comando git remote, o nome remoto pode ser passado como um argumento para outros comandos Git para comunicação com o repositório remoto. Tanto git fetch quanto git pull podem ser usados para ler a partir de um repositório remoto. Os dois comandos têm operações diferentes que são explicadas mais detalhadamente em seus respectivos links.

Como enviar para remotos do Git

O comando git push é usado para gravar em um repositório remoto.

git push <remote-name> <branch-name>

Este exemplo vai carregar o estado local de <branch-name> no repositório remoto especificado por <remote-name>.

Como renomear e remover remotos

git remote rename <old-name> <new-name>

A renomeação do comando git remote é autoexplicativa. Quando executado, este comando vai renomear uma conexão remota de <old-name> para <new-name>. Além disso, isso vai modificar o conteúdo de ./.git/config para renomear o registro para o remoto lá também.

git remote rm <name>

O comando git remote rm vai remover a conexão com o repositório remoto especificado pelo parâmetro <name>. Para demonstrar, vamos 'desfazer' a adição remota do último exemplo. Se executarmos git remote rm remote_test e, em seguida, examinarmos o conteúdo de ./.git/config, podemos ver que o registro [remote "remote_test"] não está mais lá.