O resumo: existe uma maneira de fazer com que um repositório Git seja enviado e retirado de uma lista de repositórios remotos (em vez de uma única "origem")?
Por muito tempo: geralmente tenho uma situação em que estou desenvolvendo um aplicativo em vários computadores, com conectividade diferente - digamos, um laptop em trânsito, um computador "A" enquanto estou em um determinado local e outro computador "B" enquanto em outro. Além disso, o laptop pode ter conectividade apenas com "A" ou "B" e, às vezes, com os dois.
O que eu gostaria é que o git sempre "puxe" e "empurre" para todos os computadores aos quais pode se conectar atualmente, para que seja mais fácil pular de uma máquina para outra e continuar trabalhando sem problemas.
git
características, está incluído na malvineous 's resposta abaixo . A resposta aceita está incorreta.Respostas:
Você pode configurar vários repositórios remotos com o
git remote
comando:Para buscar em todos os controles remotos configurados e atualizar ramos de rastreamento, mas não mesclar
HEAD
, faça:Se não estiver conectado atualmente a um dos controles remotos, isso levará um tempo ou causará um erro e seguirá para o próximo. Você precisará mesclar manualmente a partir dos repositórios buscados ou
cherry-pick
, dependendo de como deseja organizar a coleta de alterações.Para buscar o ramo principal de alt e puxá-lo para sua cabeça atual, faça:
Então, na verdade,
git pull
é quase uma abreviação degit pull origin HEAD
(na verdade, ele procura no arquivo de configuração para determinar isso, mas você entendeu).Para enviar atualizações por push, você deve fazer isso para cada repo manualmente.
Acho que um empurrão foi projetado com o fluxo de trabalho do repositório central em mente.
fonte
Fazer isso manualmente não é mais necessário , com versões modernas do
git
! Veja a solução da Malvineous , abaixo.Reproduzido aqui:
Resposta original:
Isso é algo que venho usando há um bom tempo sem consequências ruins e sugerido por Linus Torvalds na lista de discussão do git .
A solução da araqnid é a mais adequada para trazer código para o seu repositório ... mas quando você, como eu, tem vários upstream autoritativos equivalentes (eu mantenho alguns dos meus projetos mais críticos clonados em um upstream privado, GitHub e Codaset), pode ser uma dor empurrar mudanças para cada uma, todos os dias.
Para encurtar a história,
git remote add
todos os seus controles remotos individualmente ...git config -e
e adicione um controle remoto mesclado. Supondo que você tenha este repositórioconfig
:… Para criar um controle remoto mesclado para
"Paws"
e"Codaset"
, posso adicionar o seguinte depois de todos:Depois de fazer isso, quando for
git push Origin Master
, ele passará para ambosPaws/Master
eCodaset/Master
sequencialmente, tornando a vida um pouco mais fácil.fonte
git config -e
abre o.git/config
arquivo no seu editor preferido.git
a linha de comando da suporta isso nativamente, comgit remote set-url ... --add
.[branch "Master"]
conjuntoremote = Origin
egit pull
usará os dois controles remotos.Desde o git 1.8 (outubro de 2012), você pode fazer isso na linha de comando:
Em seguida
git push
, pressione o botão user1 @ repo1 e, em seguida, pressione user2 @ repo2.fonte
git fetch
. (Perante isto, eu não entendo o que a finalidadegit remote set-url --add
pode ser sem--push
.)Adicionei esses aliases ao meu ~ / .bashrc:
fonte
git config alias.pushall '!for i in
git remote; do git push $i; done;'
alias pushall='for i in `git remote`; do echo "Pushing to " $i; git push $i; done;'
Você pode adicionar controles remotos com:
Para atualizar todos os repositórios, faça:
fonte
Aqui está o meu exemplo com o script bash na
.gitconfig
seção aliasfonte
Adicionei dois pushurl separados à "origem" remota no arquivo .git congfig. Quando eu corro
git push origin "branchName"
Em seguida, ele percorre e empurra para cada URL. Não tenho certeza se existe uma maneira mais fácil de fazer isso, mas isso funciona para mim passar para o código-fonte do Github e para o código-fonte My.visualStudio ao mesmo tempo.fonte
Tomei a liberdade de expandir a resposta de nona-urbiz; basta adicionar isso ao seu ~ / .bashrc:
Uso:
Se você não fornecer nenhum argumento de ramificação para o git-pullall, o pull dos controles remotos não padrão falhará; deixou esse comportamento como ele é, pois é análogo ao git.
fonte
Você precisará de um script para percorrê-los. O Git não fornece um "empurrar tudo". Teoricamente, você poderia fazer um push em vários threads, mas um método nativo não está disponível.
A busca é ainda mais complicada, e eu recomendo fazer isso linearmente.
Acho que sua melhor resposta é ter uma máquina que todo mundo faça pressão / puxar, se isso for possível.
fonte
Para atualizar os controles remotos (ou seja, o
pull
caso), as coisas ficaram mais fáceis.A declaração de Linus
na entrada referenciada na lista de correspondência Git na resposta do elliottcable não é mais verdadeira.
git fetch
aprendi o--all
parâmetro em algum lugar no passado, permitindo buscar todos os controles remotos de uma só vez.Se nem todos forem solicitados, pode-se usar a
--multiple
opção para especificar vários controles remotos ou um grupo.fonte
Eu queria trabalhar no VSO / TFS e enviar publicamente para o GitHub quando estiver pronto. Repo inicial criado no VSO privado. Quando chegou a hora de adicionar ao GitHub, fiz:
Trabalhou como um campeão ...
Para uma verificação de integridade, emita "git remote -v" para listar os repositórios associados a um projeto.
Maneira simples, funcionou para mim ... Espero que isso ajude alguém.
fonte
git push -f
sem uma razão, por exemplo, falhagit push
ou conhecimento exato do que se está fazendo, é uma má idéia e potencialmente prejudicial. Isso também não responde à pergunta, mas como adicionar um segundo controle remoto.adicione um alias ao gitconfig global (/home/user/.gitconfig) com o comando abaixo.
Depois de confirmar o código, dizemos
para empurrar para a origem por padrão. Depois do apelido acima, podemos dizer
e o código será atualizado para todos os controles remotos, incluindo o controle remoto de origem.
fonte
Adicionar o
all
controle remoto fica um pouco entediante, pois você precisa configurar em cada máquina que usa.Além disso, todos os aliases
bash
e fornecidos assumem que você possui o envio para todos os controles remotos. (Por exemplo: tenho uma bifurcação que mantenho no GitHub e GitLab. Tenho o controle remoto upstream adicionado, mas não tenho permissão para fazer isso.)git
sshag
Aqui está um
git
alias que apenas envia para controles remotos com um URL de envio que inclui@
.fonte
fonte