Como posso disponibilizar meu repositório local para git-pull?


89

Eu tenho um repositório de cópia de trabalho no qual tenho trabalhado sem problemas; a origem deste repositório está no GitHub.

Eu gostaria de disponibilizar meu repositório de cópia de trabalho como a origem para minha máquina de construção (uma VM em outro host físico), de modo que os commits que faço para minha cópia de trabalho possam ser compilados e testados na máquina de construção sem ter que passar por GitHub primeiro. Já tenho um build para o repositório GitHub em andamento, mas gostaria que fosse um repositório / build "dourado"; ou seja, se algo entrar lá, a compilação com o GitHub deve ser aprovada.

Eu olhei a documentação sobre URLs do Git e vi que há a opção de usar uma URL no formulário git://host.xz[:port]/path/to/repo.git/(consulte, por exemplo, a documentação do git-clone ). Quero fazer isso da maneira mais simples possível, com o mínimo de configuração: não quero ter que configurar um daemon SSH ou servidor web apenas para publicar isso na minha máquina de construção.

Estou executando o Windows 7 x64 RC, tenho MSysGit e TortoiseGit instalados e abri a porta padrão do Git (9814) no firewall. Assuma que o repo da cópia de trabalho está em D:\Visual Studio Projects\MyGitRepoe o nome do host é devbox. A máquina de construção é o Windows Server 2008 x64. Tenho tentado o seguinte comando na máquina de construção, com a saída associada:

D:\Integration>git clone "git://devbox/D:\Visual Studio Projects\MyGitRepo"
Initialized empty Git repository in D:/Integration/MyGitRepo/.git/
devbox[0: 192.168.0.2]: errno=No error
fatal: unable to connect a socket (No error)

Estou esquecendo de algo?


Você não pode simplesmente configurar um compartilhamento localmente e então fazer 'git clone \\ workmachine \ share' em sua buildmachine? Não é a maneira melhor / mais eficaz, mas a coisa mais simples de fazer.
Joakim Elofsson

Respostas:


133

Existem cinco possibilidades para configurar um repositório para pull from:

  • sistema de arquivos local : git clone /path/to/repoou git clone file://path/to/repo. Menos trabalho se você tiver um sistema de arquivos em rede, mas não um uso muito eficiente da rede. (Esta é quase exatamente a solução proposta por Joakim Elofsson )
  • HTTP protocolos : git clone http://example.com/repo. Você precisa de qualquer servidor web e também precisa executar (talvez automaticamente, de um gancho) git-update-server-info para gerar as informações necessárias para buscar / puxar por meio de protocolos "burros".
  • SSH : git clone ssh://example.com/srv/git/repoou git clone example.com:/srv/git/repo. Você precisa configurar o servidor SSH (daemon SSH) e ter o SSH instalado no cliente (por exemplo, PuTTY no MS Windows).
  • protocolo git : git clone git://example.com/repo. Você precisa executar o git-daemon no servidor; consulte a documentação para obter detalhes (você pode executá-lo como um processo autônomo apenas para obter, não é necessário executar como serviço). git-daemon é uma parte do git.
  • bundle : Você gera bundle no servidor usando o comando git-bundle , transfere-o para uma máquina cliente de qualquer forma (mesmo via USB) e clona usando git clone file.bndl(se o clone não funcionar, você pode fazer "git init", "git remote add "e" git fetch ").

O que está faltando em seu exemplo é provavelmente a execução do git-daemon no servidor. Isso, ou configuração incorreta do git-daemon.

Infelizmente, não posso ajudá-lo a executar o git-daemon como serviço no MS Windows. No entanto, não há nada no anúncio da última versão do msysGit sobre o git-daemon não funcionar.


Ok, então eu preciso instalar algo ou copiá-lo em um pacote manualmente a cada vez (possivelmente fazendo o script via, eu acho. As três primeiras opções precisam do git-daemon também?
alastairs

1
Apenas a opção "protocolo git" precisa rodar git-daemon no servidor. Apenas as opções "SSH" e "HTTP" requerem ferramentas extras: sshd (servidor ssh) ou servidor web. A solução do pacote é uma solução manual.
Jakub Narębski

Embora a questão seja sobre 'pull', o autor da postagem deve ser avisado para não executar 'git push' depois, pois o repositório do qual ele está clonando não está vazio.
yhager

Por favor, você poderia explicar melhor, @yhager?
Alastairs

1
Nota para qualquer pessoa que tentar a opção de sistema de arquivos local: lembre-se de escapar das barras invertidas no caminho UNC! :-)
alastairs

17

Além das respostas de Jakub Narębski, há outra maneira, mais de acordo com sua pergunta original. Você poderia clonar do github como costuma fazer, então, quando quiser realizar uma retirada única de seu repositório local, basta fazer o seguinte:

git pull /path/to/repo master

(em vez de mestre, você pode colocar qualquer nome de branch.)


Uma pequena dica (ou como cheguei a esta questão): ..em <path / to / repo> não parecem funcionar; use um caminho completo.
Dmitry Timofeev


1

Recentemente, mudei um de meus projetos git para replicar a si mesmo em um servidor HTTP usando sitecopy para fazer uploads de arquivos reais.

É muito fácil, basta usar git update-server-infoe espelhar o diretório .git para algum diretório acessível por http em seu servidor. Usei 'project.git', que é bastante comum.

Git pull from http: // site / project-git funciona como um campeão, e eu não preciso ter nada no servidor, exceto acesso FTP, embora sitecopy suporte webdav também.

Não recomendo usar sitecopy, entretanto, porque ele não mantém várias máquinas em sincronia bem. Para o meu projeto, o repositório HTTP é somente leitura e as atualizações de ouro vêm de apenas uma máquina, portanto, funciona bem o suficiente.


1

Se você tem um caminho como

C:\Project\

e você git initjá fez , então você também tem uma pasta

C:\Project\.git\

Agora você faz uma nova pasta

C:\.git\

Vá para essa pasta e execute git clone --bare ..\Project( bare é importante),
volte para a C:\Project\pasta e faça a git remote add-url local ..\.git\Project.
Agora você acabou de fazer git add -A, git commit -m "HelloWorld"e git push local master.

Você pode compartilhar a Projectpasta, conectá-la Z:e fazer git clone Z:\Project- você pode usar agora git pull origin mastere git push origin masterpara enviar / receber alterações de um computador para outro.


0

Se seu host remoto estiver na mesma rede do Windows, ou seja, você pode acessá-lo como \ remotehost, então você pode mapear a unidade de rede no explorer, digamos z: -> \ remotehost \ repodir, depois disso você pode usar 'git clone / z / myproject 'para clonar o projeto

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.