Como posso adicionar repositórios remotos no Mercurial?

99

Estou trabalhando com repositórios Git da seguinte maneira:

  • Eu tenho o repositório mestre e vários controles remotos nas diferentes máquinas de produção.
  • Estou enviando o código de produção para os controles remotos e reinicio os serviços para que as alterações tenham efeito.

Estou prestes a mudar do Git para o Mercurial e gostaria de saber com antecedência como posso conseguir algo assim.

sem camisa
fonte

Respostas:

130

Você adiciona entradas à [paths]seção do .hg/hgrcarquivo do seu clone local . Aqui está um exemplo de uma seção que iria para o .hg/hgrcarquivo:

[paths]
remote1 = http://path/to/remote1
remote2 = http://path/to/remote2

Você pode então usar comandos como hg push remote1enviar conjuntos de alterações para esse repo. Se você quiser que o repositório remoto seja atualizado no diretório de trabalho, será necessário colocar um changegroupgancho no local remoto que faz uma atualização. Isso seria algo como:

[hooks]
changegroup = hg update 2>&1 > /dev/null && path/to/script/restart-server.sh

Nem todo mundo é um grande fã de ter repositórios remotos atualizando automaticamente seus diretórios de trabalho no push, e certamente não é o padrão.

Ry4an Brase
fonte
23
Para quem quer apenas ver o uso do controle remoto para o hg pathsqual é equivalente git remote -v.
Keyo
5
default-push (em vez de, por exemplo, remote1) permite apenas digitar "hg push". O repositório push padrão é então usado. Muito útil.
Cristão
6
@Christian default-pushsó é necessário / útil se o seu alvo de push usual for diferente de sua fonte de pull usual. Se eles são iguais (ou você nunca puxa), então defaulté o suficiente.
Ry4an Brase
2
Só para acrescentar ainda mais sobre isso: se você tiver ambos default-pushe defaultem seu arquivo de configuração, o primeiro será usado para enviar e o segundo para extrair. Se você deseja enviar e receber do mesmo repositório remoto (o que provavelmente fará se estiver usando o Mercurial de uma forma centralizada), coloque apenas defaulto arquivo. Seria tão legal se eles adicionassem uma pequena opção de linha de comando para apenas fazer isso no primeiro envio ... (ou talvez eu seja uma pessoa muito do CVS ;-))
tiktak
Tenho o Mercurial v2.6.2 instalado no meu Mac, e o arquivo para definir os caminhos está em .hg/hgrc(sem DOT antes do nome do arquivo).
Regis Zaleman
9

se você quiser adicionar o caminho padrão, terá de trabalhar com ele defaultem seu ~project/.hg/hgrcarquivo. Do seguinte modo:

[paths]
default = https://path/to/your/repo

Boa sorte.

Akash
fonte
5

Você poderia dar uma olhada no plugin hg-git GitHub :

ideia geral hg-git

adicionando a capacidade de enviar e receber de um repositório de servidor Git do Mercurial.
Isso significa que você pode colaborar em projetos baseados em Git do Mercurial ou usar um servidor Git como um ponto de colaboração para uma equipe com desenvolvedores que usam Git e Mercurial.

Observação: não testei essa ferramenta com as versões mais recentes do Mercurial.

VonC
fonte
1
Tenho a capacidade de portar tudo para o mercurial, gostaria de usar apenas uma ferramenta para o gerenciamento de código-fonte. Converta uma vez que o repositório construa as estruturas apropriadas e, em seguida, apenas comandos mercuriais para produção. Estou ciente de que git e mercurial podem colaborar, mas nunca tentei.
topless de
2
^ Chris: sua pergunta também: como faço para converter repositórios Git em repositórios Mercurial? ", Ou" como declarar / configurar repositório Hg remoto? "(Como em superuser.com/questions/43686/… ), ou" onde um remoto é declarado em Hg? "( crazythinking.wordpress.com/2009/03/07/… )
VonC
0

Se você estiver no Unix e tiver o Git instalado, poderá usar esta função bash para adicionar prontamente um caminho para os controles remotos sem um editor de texto:

add-hg-path() {
    git config -f $(hg root)/.hg/hgrc --add paths.$1 $2
    awk '{$1=$1}1' $(hg root)/.hg/hgrc > /tmp/hgrc.tmp
    mv /tmp/hgrc.tmp $(hg root)/.hg/hgrc
}

Em seguida, invoque-o com:

$ add-hg-path remote1 https://path.to/remote1

Se alguém quiser construir um equivalente Powershell, gostaria de incluí-lo também. Outras melhorias potenciais incluem verificação de erros nos parâmetros e fatoração da chamada para $(hg root).

Jason R. Coombs
fonte