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.

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 dar 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.

Como usar o git remoto para conectar outros repositórios

Visão geral de uso remoto do Git

O comando git remote é, em essência, 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 direto o arquivo ./.git/config com um editor de texto.

git remote add <name> <url>

Create a new connection to a remote repository. After adding a remote, you’ll be able to use <name> as a convenient shortcut for <url> in other Git commands.

git remote rm <name>

Remove the connection to the remote repository called <name>.

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

Rename a remote connection from <old-name> to <new-name>.

Discussão remota do Git

O Git foi desenvolvido para dar a cada desenvolvedor um ambiente de desenvolvimento isolado. Isto significa que as informações não são passadas automaticamente para lá e para cá entre os repositórios. Em vez disso, os desenvolvedores precisam puxar manualmente os commits upstream em seus repositórios locais ou colocar manualmente seus commits locais de volta no repositório central. O comando git remote é apenas uma forma mais fácil de passar URLs a esses comandos de "compartilhamento".

A origem Remota

Quando você clona um repositório com git clone, ocorre a criação automática de uma conexão remota chamada origem, que aponta de volta para o repositório clonado. É um recurso útil para os desenvolvedores criarem uma cópia local de um repositório central, pois oferece uma maneira fácil de enviar pull de alterações de upstream ou publicar commits 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 bastante usados.

ADD <NAME> <URL>

Adds a record to ./.git/config for remote named <name> at the repository url <url>.

Aceita uma opção -f, que vai fazer o git fetch assim que o registro remoto for criado.

Aceita uma opção --tags, que vai fazer o git fetch de imediato e importar cada marcador do repositório remoto.

RENAME <OLD> <NEW>

Updates ./.git/config to rename the record <OLD> to <NEW>. All remote-tracking branches and configuration settings for the remote are updated.

REMOVE or RM <NAME>

Modifies ./.git/config and removes the remote named <NAME>. All remote-tracking branches and configuration settings for the remote are removed.

GET-URL <NAME>

Envia as URLs para um registro remoto.

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

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

SHOW <NAME>

Outputs high-level information about the remote <NAME>.

PRUNE <NAME>

Deletes any local branches for <NAME> that are not present on the remote repository.

Aceita uma opção --dry-run que vai listar quais ramificações são definidas como reduzidas, mas não vai fazer a redução de fato.

Exemplos remotos do Git

Além da origem, muitas vezes é 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 com acesso público 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 antes para outros repositórios. Assim, 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 "verbose". 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 como um atalho conveniente para 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: main
   Remote branches:
      main tracked
      simd-deprecated tracked
      tutorial tracked
   Local ref configured for 'git push':
      main pushes to main (fast-forwardable)

Como buscar e puxar de remotos do Git

Como enviar para remotos do Git

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

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

This example will upload the local state of <branch-name> to the remote repository specified by <remote-name>.

Como renomear e remover remotos

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

The command git remote rename is self-explanatory. When executed, this command will rename a remote connection from <old-name> to <new-name>. Additionally, this will modify the contents of ./.git/config to rename the record for the remote there as well.

git remote rm <name>

The command git remote rm will remove the connection to the remote repository specified by the <name> parameter. To demonstrate let us 'undo' the remote addition from our last example. If we execute git remote rm remote_test, and then examine the contents of ./.git/config we can see that the [remote "remote_test"] record is no longer there.