Estou fazendo a transição de meus projetos pessoais de usar o subversion (svn) para o GIT. Na subversão, usei um diretório de trabalho compartilhado do SVN em vários hosts (apesar de as pessoas me dizerem que não funcionaria), e está provado que funciona muito bem para mim. É importante ressaltar que esta é uma solução de usuário única, e eu sou a única pessoa que está fazendo alterações, portanto, não estou executando commits do SVN em várias caixas ao mesmo tempo. Resumindo, estou disposto a viver com algumas limitações (se necessário) para simplificar o gerenciamento geral de meus projetos pessoais.
Para entender por que estou procurando fazer isso, considere minha configuração (abaixo). Eu tenho algumas máquinas robustas, cada uma executando várias VMs. Eu tenho vários discos grandes em "host1" e tenho compartilhamentos de arquivos que outros hosts (na LAN local) acessam.
host1 (share \host1\share)
+vm1 (access SVN working dir \host1\share\svnproj1, and svnproj2)
+vm2 (access SVN working dir \host1\share\svnproj1)
+vm3 (access SVN working dir \host1\share\svnproj1)
host2
+vm4 (access SVN working dir \host1\share\svnproj1)
+vm5 (access SVN working dir \host1\share\svnproj1)
laptop (access SVN working dir \host1\share\svnproj1)
But also have a svn checkout at c:\svnproj1
Todos os sistemas operacionais são Win7x64 ou Win8.1x64. Atualmente estou usando o Tortoise SVN 1.8.2 e o subversion 1.8.3 (em TODOS os hosts).
Essa abordagem permite que eu acesse o compartilhamento de arquivos do servidor (\ host1 \ share) de qualquer host. Em alguns casos, meu svn repos tem muitos anos e mais de 2 GIG com "áreas de trabalho SVN" separadas em cada VM torna minhas VMs maiores e complicam meus instantâneos de VM e backups.
Eu também não tenho que confirmar arquivos até que eu esteja levando meu laptop para uma reunião de negócios. Eu trabalho em casa, então isso não é freqüente. Quando retorno de uma reunião de negócios ou viagem, eu faço as alterações no meu laptop e atualizo o comando svn update em qualquer uma das 5 VMs e os arquivos são atualizados para todas as 5 VMs. Para mim, isso é bastante simples e funcionou bem.
Então, agora estou me perguntando se essa mesma abordagem pode funcionar usando o GIT. Tudo que li diz que você não pode (ou não deveria fazer isso).
Aqui estão as perguntas que tenho que me ajudarão a entender se isso é tecnicamente possível (NOTA: eu já estou experimentando essa abordagem).
-
(Q) O GIT armazena informações em um host fora do repositório GIT?
(.git dir) e requer essa informação para gerenciar adequadamente
o repositório do git. Se isso acontecer, então ter várias máquinas configuradas
identicamente com essa informação não é viável.
-
(Q) O GIT cria arquivos temporários dentro da área de trabalho do GIT? E se
isso, seria que as informações temporárias estragassem outra cópia do git
correndo em outra máquina? Se assim for, então, novamente, esta abordagem não é
viável.
-
(Q) O GIT tem o mesmo problema que a Subersão em que todos os
clientes usando um repositório específico precisam ser da mesma versão?
-
(Q) Esta abordagem falha se outro SO for introduzido (Linux,
Apple OSX)?
-
(Q) Se você usar um provedor de armazenamento em nuvem como o Dropbox ou o SpiderOak
esta solução ainda funciona?
-
(Q) Existem outras questões ou problemas que eu possa encontrar quando
usando o GIT que eu não veria ao usar o SVN.
Mais uma vez, é importante observar que essa solução só precisa funcionar para mim, nunca haverá várias pessoas fazendo alterações no repositório GIT, e posso viver com algumas limitações se simplificar o gerenciamento geral das VMs .
Este artigo link fez um bom trabalho explicando como usar o GIT da maneira tradicional. Para mim, a solução do Dropbox é equivalente ao compartilhamento de arquivos da LAN local.