Hospedando Repositório Git no Windows

108

Existe atualmente uma maneira de hospedar um repositório Git compartilhado no Windows? Eu entendo que você pode configurar o serviço Git no Linux com:

git daemon

Existe uma opção nativa do Windows, com falta de compartilhamento de pastas, para hospedar um serviço Git?

EDITAR: Atualmente, estou usando a instalação cygwin do git para armazenar e trabalhar com repositórios git no Windows, mas gostaria de dar o próximo passo de hospedar um repositório com um serviço que pode fornecer acesso a outros.

Jeff Fritz
fonte
35
Meu empregador atual não tem nenhuma máquina Unix ou Linux ... trazer um novo provedor de controle de fonte e sistema operacional ao mesmo tempo pode ser um pouco ... traumático.
Jeff Fritz
1
O que há de errado com o git-daemon? AFAIK funciona muito bem no Windows.
Aristóteles Pagaltzis
10
A instalação do Git usando o instalador msysgit padrão para Windows não parece instalar git daemon. : \
Tim Visher
1
Há um instalador CopSSH e msysgit que você pode querer dar uma olhada. Ele usa autenticação de chave pública e torna isso fácil. Isenção de responsabilidade: sou o webmaster - comecei o projeto depois de ler o tutorial de Tim Davis sobre como configurar um servidor git seguro.
Lilith River
3
Para registro: Git para Windows incluiu uma versão funcional do daemon git desde a versão 1.7.4 (lançada em fevereiro de 2011). Portanto, o cygwin não é mais necessário. Consulte também stackoverflow.com/q/5186070/291641
patthoyts

Respostas:

75

Aqui estão algumas etapas que você pode seguir para fazer o daemon git rodar no Windows:

(Pré-requisitos: uma instalação Cygwin padrão e um cliente git compatível com daemon git)

Etapa 1 : abrir um shell bash

Etapa 2 : no diretório / cygdrive / c / cygwin64 / usr / local / bin /, crie um arquivo chamado "gitd" com o seguinte conteúdo:

#!/bin/bash

/usr/bin/git daemon --reuseaddr --base-path=/git --export-all --verbose --enable=receive-pack

Etapa 3 : execute o seguinte comando cygrunsrv em um prompt elevado (ou seja, como administrador) para instalar o script como um serviço (Observação: assume que o Cygwin está instalado em C: \ cygwin64):

cygrunsrv   --install gitd                          \
            --path c:/cygwin64/bin/bash.exe         \
            --args c:/cygwin64/usr/local/bin/gitd   \
            --desc "Git Daemon"                     \
            --neverexits                            \
            --shutdown

Etapa 4 : execute o seguinte comando para iniciar o serviço:

cygrunsrv --start gitd

Você terminou. Se você quiser testá-lo, aqui está um script rápido e sujo que mostra que você pode enviar o protocolo git para sua máquina local:

#!/bin/bash

echo "Creating main git repo ..."
mkdir -p /git/testapp.git
cd /git/testapp.git
git init --bare
touch git-daemon-export-ok
echo "Creating local repo ..."
cd
mkdir testapp
cd testapp
git init
echo "Creating test file ..."
touch testfile
git add -A
git commit -m 'Test message'
echo "Pushing master to main repo ..."
git push git://localhost/testapp.git master
Derek Greer
fonte
2
Se eu pudesse editar este post, adicionaria o seguinte: Pré-requisitos: cygwin com os pacotes git e cygrunsrv instalados.
Mario
2
Outra observação: qualifique totalmente o caminho para git dentro do script de shell gitd. Em uma das minhas máquinas, o MSYSGit estava sendo iniciado em vez do cygwin-git ao ser executado como um processo do Windows. MSYSGit não oferece suporte ao modo daemon, portanto, o serviço falhou ao iniciar.
Mario
26
Nunca considerei as soluções Cygwin como "funcionando no Windows". É como dizer "rodar o Linux em uma VM funciona no Windows". Mas essa é apenas minha opinião purista;)
Rook
3
nota rápida: / usr / bin não funcionou para mim, mas colocar em / bin funcionou (e usar c: / cygwin / bin / gitd no cygrunsrv). Não tenho certeza de quantos anos minha instalação do cygwin é, mas parece que / usr / bin é um link para o que está em / bin que o Windows não conhece ... Também meio óbvio, mas lembre-se de criar a pasta / git em c: / cygwin /
armyofda12mnkeys
3
@Rook - Ao contrário, o conjunto de ferramentas Cygwin não é diferente de quaisquer outros aplicativos de terceiros que você possa instalar. Cygwin não é uma máquina virtual, mas um conjunto de ferramentas pré-embalado. É apenas um conjunto de executáveis ​​e dlls do Windows, como tudo o mais em sua máquina.
Derek Greer
16

GitStack pode ser sua melhor escolha. Atualmente é gratuito (para até 2 usuários) e de código aberto no momento da escrita.

Poiuytrez
fonte
2
Parece que isso foi restrito a projetos de software livre ou de alunos: "GitStack é gratuito para projetos de software livre e de alunos!"
ccelar
12

Este é um servidor git dedicado para Windows: https://github.com/jakubgarfield/Bonobo-Git-Server/wiki

Daniel O
fonte
Qual é o estado do servidor Bonobo? Está totalmente funcional? Não posso dizer pelos documentos, mas parece muito atraente.
Jeff Fritz
1
@JeffFritz: simplesmente parei de usá-lo. A maldita coisa não atualiza o estado do repositório ( git update-server-info) após o envio de HTTP, e essa lógica não é implementada por sua biblioteca Git (GitSharp). Duvido que chegue a um estado de funcionamento real tão cedo.
André Caron
Além disso, não funciona com o Teamcity (que é o principal motivo para eu não usá-lo) github.com/jakubgarfield/Bonobo-Git-Server/issues/11
Piers Karsenbarg
3
Feliz usuário Bonobo aqui. Acredito que as preocupações de Andre e Piers devem ser resolvidas agora. Esse problema do TeamCity foi marcado como fechado e não tive problemas ao usar um repositório centralizado central.
Quinn Bailey
9

Se você está trabalhando em um ambiente Windows, você considerou o Mercurial ? É um sistema de controle de versão distribuído como o Git, mas se integra de forma muito mais organizada e fácil ao Windows.

David Arno
fonte
9
É verdade que é muito mais fácil usar o Mercurial em máquinas Windows, pelo menos no que diz respeito à capacidade de sincronizar repositórios. Não é uma resposta muito útil se você realmente precisar usar o Git!
Frank Shearar
Além disso, o Bazaar funciona nativamente em janelas; tem até suporte comercial.
hasen
7

Se você receber o erro cygrunsrv: Error starting a service: QueryServiceStatus: Win32 error 1062: The service has not been started.depois de executar o comando:

cygrunsrv --start gitd

isso significa que você não criou a pasta 'caminho-base'.

Criar a pasta '/ git' e executar o comando novamente irá corrigir isso.

isaac
fonte
Você também pode obter esse erro se suas /gitpermissões NTFS não permitirem o acesso de leitura / gravação da conta de serviço (SISTEMA).
spoulson
5

Atualmente, estou usando o daemon ssh do cygwin no Windows para servir e permitir o acesso remoto ao meu repo. Funciona muito bem, tenho controle total sobre quem acessa meu repo por meio de seus certificados SSH e o desempenho dispara, mesmo em links remotos de WAN e VPN.

Outra solução é usar Gitosis . É uma ferramenta que facilita muito a hospedagem de repositórios.

Matthew McCullough
fonte
Como você fez o daemon git funcionar com o cygwin? Eu tenho o daemon ssh configurado e estou testando o login na minha máquina via ssh, mas sempre que tento executar o daemon git ele simplesmente trava.
Qui,
Como você fez a gitose funcionar no Windows porque há um bug: github.com/res0nat0r/gitosis/issues#issue/1
dalore
4

Você não precisa hospedar um serviço, você também pode criar um repositório compartilhado em uma unidade compartilhada. Basta criar um repositório vazio. Você pode clonar um repo existente em um compartilhado usando: "git clone --bare --shared [source] [dest]". Você também pode iniciar um novo repositório usando "git init --bare --shared = all".

Henk

Henk
fonte
3
Sim, você pode criar um repositório compartilhado em uma unidade, mas NÃO poderei acessar esse repositório a menos que esteja na mesma rede que o repositório. O objetivo da pergunta é permitir acesso remoto a um repositório para um colega de trabalho que está trabalhando fora do local
Jeff Fritz,
3
Esta não é realmente uma solução para a questão e parece uma coisa bastante questionável de se fazer de qualquer maneira.
Pat O de
4

Você já pensou em usar a camada cygwin? Veja este link .

Clokey
fonte
4

Agora msysGit suporta daemon git! Funciona bem (pelo menos para mim). Vou tentar fazê-lo funcionar como serviço ...

Artem
fonte
ele suporta empurrar e puxar? Porque há um problema code.google.com/p/msysgit/issues/detail?id=457 ao fazer push.
Vadim
Então você tem isso funcionando como um serviço? Você conhece um guia de "primeiros passos"?
Craig McQueen
4

Gerente SCM

  • Servidor http leve para repositórios Git, Mercurial e Subversion em uma caixa (apenas Java é necessário)
  • Interface da web para gerenciamento de usuários, ACLs, repos
Texugo Preguiçoso
fonte
2

No Windows, você também pode servir repositórios Git com Apache sobre HTTP ou HTTPS, usando a extensão DAV.

O caminho do repositório Git pode então ser protegido com verificações de autenticação Apache, como restringir a determinados endereços IP ou autenticação do tipo htpasswd / htdigest.

A limitação de usar a autenticação htpasswd / htdigest é que o nome de usuário: senha é passado na URL Git solicitada, portanto, restringir o acesso à URL Git a certos endereços IP é melhor.

Edit: Nota, você pode deixar a senha fora do URL do Git e o Git irá solicitar a senha em push e buscar / puxar.

Usar HTTPS significa que todos os dados são criptografados na transferência.

É fácil de configurar e funciona.

O exemplo a seguir mostra a combinação de controle de acesso por endereço IP e usuário: senha sobre HTTP padrão.

Exemplo de Apache Virtualhost

## GIT HTTP DAV ##
<VirtualHost *:80>

  ServerName git.example.com
  DocumentRoot C:\webroot\htdocs\restricted\git
  ErrorLog C:\webroot\apache\logs\error-git-webdav.log

    <Location />
      DAV on
      # Restrict Access
      AuthType Basic
      AuthName "Restricted Area"
      AuthUserFile "C:\webroot\apache\conf\git-htpasswd"
      # To valid user
      Require valid-user
      # AND valid IP address
      Order Deny,Allow
      Deny from all
      # Example IP 1
      Allow from 203.22.56.67 
      # Example IP 2
      Allow from 202.12.33.44 
      # Require both authentication checks to be satisfied
      Satisfy all
    </Location>

</VirtualHost>

Exemplo .git / config

[core]
    repositoryformatversion = 0
    filemode = true
    bare = false
    logallrefupdates = true
[remote "origin"]
    fetch = +refs/heads/*:refs/remotes/origin/*
    url = http://username:[email protected]/codebase.git
[branch "master"]
    remote = origin
    merge = refs/heads/master
David Thomas
fonte
2

No trabalho, estou usando o GitBlit GO instalado em um Windows Server. Trabalhe perfeitamente e integre-se bem com ActiveDirectory para autenticação e autorização de usuário. Também é gratuito e de código aberto (licenciado Apache)

Página inicial do GitBlit

Apenas o acesso HTTP (S) é compatível, sem SSH, mas no Windows você não precisa de mais nada.

Gian Marco
fonte
Eles têm suporte a SSL (HTTPS) com base no documento de configuração do site.
Dandré
Sim, HTTP e HTTPS são suportados (estou usando HTTPS exclusivamente), mas não há SSH. Resposta atualizada.
Gian Marco
2

esta é uma resposta de 2015 a uma pergunta que já tem mais de 7 anos.

Por $ 10 de pagamento único, em https://bitbucket.org/product/server , pode-se comprar uma licença do Windows de 64 bits para até 10 usuários .

Aparentemente, as versões de 32 bits estão disponíveis apenas por meio de seu arquivo.

O Bitbucket Server era conhecido anteriormente como Stash .

Observe que não experimentei esta versão, mas $ 10 parece um bom negócio; li aqui que a Atlassian doa US $ 10 para instituições de caridade. FWIW

gerryLowry
fonte
0

Acho que o que Henk está dizendo é que você pode criar um repositório compartilhado em uma unidade e depois copiá-lo para algum local comum ao qual vocês dois tenham acesso. Se houver algum servidor da empresa ou algo ao qual vocês dois tenham acesso ssh, você pode colocar o repositório em algum lugar onde possa SCP de volta para seu próprio computador e, em seguida, extrair dele. Fiz isso sozinha por um tempo, já que tenho dois computadores. É um incômodo, mas funciona.

Ibrahim
fonte
2
"falta de compartilhamento de pastas", diz a pergunta original.
Lightness Races in Orbit
0

Para Windows 7 x64 e Cygwin 1.7.9 eu precisei usar / usr / bin / gitd como o argumento args de cygrunsrv

cygrunsrv   --install gitd                          \
            --path c:/cygwin/bin/bash.exe           \
            --args /usr/bin/gitd                    \
            --desc "Git Daemon"                     \
            --neverexits                            \
            --shutdown

Além disso, precisei executar o bash como administrador para instalar o serviço.

disrvptor
fonte