O mercurial funcionará corretamente com vários usuários usando uma única cópia de trabalho em um compartilhamento

4

Estou procurando uma solução em que possa instalar o controle de versão em um ambiente corporativo da maneira menos intrusiva possível. Uma solução possível que eu estava considerando era instalar mercurial em cada um dos desktops do Windows e apenas configurar cópias de trabalho de repos no compartilhamento. Portanto, não haveria instalação de mercurial no servidor. Obviamente, isso não resolve vários usuários no mesmo arquivo ao mesmo tempo, mas isso não é um problema que estamos tentando resolver. E isso não é backup, mas, novamente, o controle de versão não deve ser backup. Além disso, temos muito backup.

Essa configuração funcionaria? Os nomes de usuários nos logs de confirmação serão registrados corretamente. Ou tudo pareceria estar comprometido pelo mesmo usuário? Alguém tem alguma experiência com essa configuração?

    
por Steven Noble 30.09.2009 / 04:24

2 respostas

4

Sim, você pode fazer o que você sugere. As versões modernas do Mercurial realmente não se importam onde as cópias de trabalho são armazenadas - elas podem ser armazenadas em um disco local ou em um sistema de arquivos em rede.

Tivemos alguns problemas no passado (antes da versão 1.7.1) em que o Mercurial não conseguiria quebrar hardlinks em repositórios armazenados em sistemas de arquivos da rede. O problema é que dois repositórios serão hardlinked no servidor se você fizer hg clone foo bar . Se um usuário enviar um commit para bar e acessar o repositório pelo compartilhamento de rede, é fundamental que o Mercurial descubra que os arquivos dentro de bar/.hg/store estão com hardlink para foo/.hg/store , de modo que ele possa quebrar os links. Devido a vários bugs do kernel no Windows e no Linux , isso pode falhar nas versões antigas do Mercurial.

Então, para recapitular: seu servidor não precisa do Mercurial instalado se você acabou de instalar o Mercurial em todos os clientes. Criar (espero lembrar-me dos caminhos UNC corretamente)

\server\share\main

como o repositório principal e cria clones para os desenvolvedores:

\server\share\alice
\server\share\bob

Alice e Bob vão trabalhar lá e modificar as cópias de trabalho de forma independente. Eles fazem commits normalmente e quando estão prontos, eles retornam ao main repo. Os nomes de usuários são armazenados nos changesets, então eles serão retidos quando os changesets entrarem no repositório principal.

    
por 18.12.2011 / 12:09
3

Crie um repositório de linha de base compartilhado em um compartilhamento de rede. Faça todos os usuários fazerem o 'hg clone' para obter uma cópia local desse repositório e deixá-los trabalhar (compilar, editar, 'hg add / ... / commit') na cópia local. Sempre que alguém estiver pronto para enviar suas alterações locais para o repositório compartilhado, deixe-as fazer 'hg push'. Sempre que alguém quiser receber alterações enviadas ao repositório compartilhado por outras pessoas, deixe-as fazer "hg pull" e "hg update". É isso em poucas palavras.

Algumas notas:

  • O acesso simultâneo de leitura / gravação ao repositório compartilhado não é um problema. Como outros sistemas similares, o Mercurial foi explicitamente projetado para lidar com isso.

  • Cópias locais do repositório compartilhado são seus backups.

  • Nomes de usuários anexados a commits precisam ser configurados manualmente nos arquivos 'mercurial.ini' em cada instalação local do Mercurial. Não sei se há uma maneira de usar algo como% USERNAME% nesse arquivo, que se expandiria para o nome do login atual, pode haver.

  • Uma prática comum é evitar vários cabeçalhos no repositório compartilhado (apenas ignore este item por enquanto, se você ainda não sabe o que está falando). Para ajudar nisso, os usuários que estão prestes a promover suas alterações normalmente gostariam de primeiro puxar as alterações feitas por outras pessoas e certificar-se de que as alterações locais são compatíveis com as feitas por outras pessoas. A parte de resolução de conflitos é feita por 'hg merge'. A maioria dos conflitos é resolvida automaticamente, mas alguns requerem intervenção do usuário (por exemplo, se você e eu editarmos a mesma linha no mesmo arquivo, haverá um conflito e os mais lentos terão que lidar com isso e editar o final linha manualmente).

  • Como estamos lidando com o Windows, sugiro forçar todos os nomes de arquivos a minúsculas (ou maiúsculas, se você gosta de gritar). Isso pode não ser absolutamente necessário com as versões mais recentes do Mercurial, mas ainda fazemos isso apenas para estar no lado seguro (e, sim, quando algo quebra porque o Mercurial acha que 'a.txt' não é o mesmo arquivo que 'A. txt 'em um sistema baseado em Windows, ele quebra feio).

Boa sorte.

    
por 30.09.2009 / 08:44