git syncing
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.
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
git remote rm <name>
Remova a conexão com o repositório remoto chamado
.
git remote rename <old-name> <new-name>
Renomeie uma conexão remota de
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
Aceita uma opção -f
, que vai git fetch
imediatamente depois do registro remoto ser criado.
Aceita uma opção --tags
, que vai git fetch
imediatamente e importar cada tag do repositório remoto.
RENAME <OLD> <NEW>
Atualiza ./.git/config
para renomear o registro
REMOVE or RM <NAME>
Modifica ./.git/config
e remove o remoto chamado
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
PRUNE <NAME>
Exclui todas as ramificações locais para
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 ./.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
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 ./.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 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á.