Como usar o git para este fim específico?

1

Aqui está a situação. Existem duas máquinas, laptop A e estação de trabalho B. B tem um IP fixo, A tem um IP dinâmico, e eu quero evitar a necessidade de conexão de B para A (configurando um túnel ssh por exemplo; para o bem do argumento, suponha que ssh de B para A não é possível).

Existe um repositório git, /home/user/foo.git , em ambas as máquinas. Problema: trabalhando em A, mescle as alterações em A:/home/user/foo.git e B:/home/user/foo.git . No final, ambos os repositórios devem ser idênticos.

A solução mais simples que consegui criar é a seguinte:

A:~$ cd foo.git
A:~/foo.git$ git commit -a
A:~/foo.git$ ssh B
B:~$ cd foo.git
B:~/foo.git$ git commit -a
B:~/foo.git$ logout
A:~/foo.git$ git pull ssh://B/home/user/foo.git
A:~/foo.git$ git push ssh://B/home/user/foo.git master

(antes de poder fazer isso, eu tive que mudar o git config no B e adicionar um hook pós-recebimento como descrito na resposta a este pergunta stackoverflow )

Minhas perguntas:

1) o acima está correto? 2) existe uma maneira mais simples de atingir o mesmo propósito?

    
por January 31.05.2013 / 17:08

3 respostas

2

Seu gancho de pós-recebimento tem algumas advertências terríveis IMO!

Eu tenho uma configuração semelhante, mas o servidor B tem duas cópias do repositório. Um é um repositório simples e usado como o controle remoto padrão ("origem") para ambos. Então eu não tenho que fornecer argumentos para "git push" e "git pull". Essa última é a única simplificação que tenho sobre os comandos que você está mencionando. (E no meu caso B é um servidor; eu tenho uma caixa ARM que eu posso deixar).

Se você "realmente não usa o Git", não é necessariamente a melhor ideia. O Git foi projetado para energia e a interface do usuário ainda não é tão consistente quanto a de outros DVCSs. Ferramentas mais simples para esse uso podem incluir

link (novo - eu não tentei)

link (antigo em espera, funciona em ssh)

Dropbox (não-livre e requer conexão com a internet, mas liso e otimizará as transferências pela LAN também)

Ou há Mercurial ou até mesmo Darcs. Eu acho que ou evitaria o problema que o Git requer um repositório extra nu ou um gancho de commiting preocupante. O Mercurial deve ser mais amigável que o Git. Darcs tem um design diferente de qualquer outro DVCS ... então essa pode não ser a melhor idéia. Olhando para os documentos parece Bazaar seria duvidoso para este caso.

    
por 31.05.2013 / 20:33
1

Se tudo o que está mantendo você é que você não pode ssh de B para A, mas você pode ssh de A para B, então estabelecer um túnel ssh reverso .

    
por 01.06.2013 / 01:00
0

Acho que git não é bom para você, também acho que rsync é muito mais adequado para a sua tarefa, desde que você simplesmente tem que manter os arquivos em sincronia git não é o ideal na minha opinião, porque:

  • você aparentemente não precisa de nenhum modelo de ramificação / versão / distribuído
  • você precisa lidar com arquivos, git não lida diretamente com arquivos, em poucas palavras git vê todos os "objetos" em seu sistema de arquivos (arquivos e dirs basicamente) como um hash SHA1, como conseqüência não há como realmente recuperar um arquivo ou simplesmente fazer qualquer coisa específica para um arquivo, a única coisa que git é capaz de dizer é se o conteúdo do seu branch é alterado ou não, é isso, e nem mesmo mantém uma faixa real no arquivo. meio, por exemplo, a soma de verificação é feita quando você faz o commit quando você adiciona arquivos ao palco.
por 31.05.2013 / 17:36