Navegador Bare Bones
git instaweb --httpd=webrick
do livro git scm
combine-o com algo como a abordagem descrita aqui para desenvolvimento distribuído (crédito ao datagrok pelo conceito bem descrito)
Inicie um servidor git único a partir de qualquer repositório local.
Eu twittou isso já, mas achei que poderia usar alguma expansão:
Ative o fluxo de trabalho descentralizado do git: git config alias.serve "daemon --verbose --export-all --base-path = .git --reuseaddr --strict-caminhos .git /"
Digamos que você use um fluxo de trabalho git que envolva o trabalho com um repositório "oficial" principal, no qual você puxa e envia suas alterações de e para dentro. Tenho certeza que muitas empresas fazem isso, assim como muitos usuários de serviços de hospedagem git como o Github.
Digamos que o servidor, ou Github, fique um pouco inativo.
Afinal, não se preocupe, uma das razões pelas quais você usa o git é para ter uma cópia de todo o histórico do projeto no seu clone local.
Você pode continuar a codificar e confirmar, enquanto aguarda a equipe de operações trazer o servidor de volta à vida. Nota para si mesmo: compre rosquinhas para a equipe de operações.
Mas e se, durante esse tempo de inatividade, você quiser colaborar com outra pessoa, que pode não ser especialista em git, no mesmo repositório?
Ou, em vez de tempo de inatividade, e se você e seu colaborador estiverem em campo e, por algum motivo, você não conseguir que sua VPN permita a conexão com seu repo oficial?
Ou então, se você e seu colaborador estão lançando várias mudanças experimentais e, mesmo tendo acesso, não deseja colocar sua bagunça inacabada no repositório central oficial? (Nem mesmo como ramificações de recursos.) Talvez você esteja no meio de uma recuperação ou mesclagem desastrosa e as ramificações estão por toda parte.
Bem, o git, como você provavelmente sabe, é um sistema de controle de versão "distribuído" .
Mesmo que você possa usar um repositório git "oficial" central em seu fluxo de trabalho, ainda poderá usar o git de maneira ponto a ponto, onde você e seu colaborador simplesmente criam e compartilham confirmações entre si e com a central servidor nunca precisa saber.
Então, como você consegue seus ramos e se compromete com eles, ou vice-versa?
- Você pode usar as instalações do git para enviar correções por e-mail. Mas isso é um pouco deselegante e requer algum conhecimento sobre como aplicar patches enviados por email.
- Você pode criar uma conta em sua própria máquina para a qual seu colaborador se hospede. Mas talvez você não tenha acesso root local ou talvez não confie neles com acesso SSH à sua caixa.
- Você pode clonar seu repositório em um pendrive e passá-lo para frente e para trás. Mas isso é bastante entediante, especialmente se você estiver na mesma rede local e exigir um pen drive.
Você provavelmente pode pensar em outros métodos também. Mas há uma maneira super fácil: se você pode se ver na rede, poderá iniciar um servidor git único que ele possa usar como controle remoto para clonar, buscar e puxar suas alterações e matá-lo quando estiver feito com isso.
A ferramenta que permite isso é git daemon, que tem muitas opções e funcionalidades, mas com o objetivo de permitir esse processo "fácil de servir o repo em que estou", a maneira de usá-lo é criar um alias. Eu gosto de chamar git serve. Corre:
git config --global alias.serve "daemon --verbose --export-all --base-path=.git --reuseaddr --strict-paths .git/"
Usar um alias é realmente crucial, porque os aliases do git são executados no diretório base da sua árvore de trabalho. Portanto, o caminho '.git' sempre apontará para o lugar certo, não importa onde você esteja na árvore de diretórios do seu repositório.
Use o seu novo git serveassim:
- Corra
git serve. "Pronto para fazer barulho", relatará. Git é malvado.
- Descubra o seu endereço IP. Digamos que seja 192.168.1.123.
- Diga "ei, Jane, eu não estou pronto / apto a enviar esses commits até a origem, mas você pode buscar meus commits no seu clone executando
git fetch git://192.168.1.123/"
- Pressione ctrl + c quando não desejar mais veicular esse repositório.
Você também pode dizer a Jane git clone git://192.168.1.123/ local-repo-namese ela ainda não possui um clone do repositório. Ou use git pull git://192.168.1.123/ branchnameuma busca e mesclagem de uma só vez, útil se você estiver trabalhando juntos em uma ramificação de recurso.
Observe, no entanto, que você não deve fazer isso em redes hostis se guardar segredos em seu repositório, porque não há autenticação. Ele não anuncia sua existência, mas qualquer pessoa com um scanner de porta pode encontrá-lo, conectar-se a ele e clonar seu repositório.
Mas não é super perigoso, porque é somente leitura por padrão. Leia a git daemonpágina de manual com atenção se achar que deseja ativar o acesso de gravação. No caso em que você deseja obter as confirmações do seu colaborador, é muito mais seguro deixá-lo como somente leitura e peça ao seu colaborador para também executar este comando, para que você possa retirá-las.
Relacionado tangencialmente: no assunto de servidores únicos, se você deseja compartilhar temporariamente um monte de arquivos estáticos por HTTP: python -m SimpleHTTPServer