Com o SVN, eu tinha um único grande repositório que mantive em um servidor e fiz check-out em algumas máquinas. Este era um sistema de backup muito bom e me permitiu trabalhar facilmente em qualquer uma das máquinas. Eu poderia fazer o checkout de um projeto específico, fazer um commit e atualizar o projeto 'master', ou eu poderia fazer o checkout de tudo.
Agora, eu tenho um monte de repositórios git, para vários projetos, vários dos quais estão no github. Também tenho o repositório SVN que mencionei, importado por meio do comando git-svn ..
Basicamente, gosto de ter todo o meu código (não apenas projetos, mas trechos e scripts aleatórios, algumas coisas como meu currículo, artigos que escrevi, sites que fiz e assim por diante) em um grande repositório que posso facilmente clonar em um remoto máquinas ou memory-sticks / harddrives como backup.
O problema é que, uma vez que é um repositório privado, e o git não permite o check-out de uma pasta específica (que eu poderia enviar para o github como um projeto separado, mas as alterações aparecem no master-repo e no sub- repos)
Eu poderia usar o sistema de submódulo git, mas ele também não age como eu quero (submódulos são ponteiros para outros repositórios e não contêm realmente o código real, portanto, é inútil para backup)
Atualmente, tenho uma pasta de git-repos (por exemplo, ~ / code_projects / proj1 / .git / ~ / code_projects / proj2 / .git /), e depois de fazer alterações em proj1 eu faço git push github
e copio os arquivos em ~ / Documents / code / python / projects / proj1 / e faz um único commit (ao invés dos numerosos nos repositórios individuais). Então faça git push backupdrive1
, git push mymemorystick
etc
Então, a pergunta: como fazer seu código pessoal e projetos com repositórios git e mantê-los sincronizados e com backup?
Quero acrescentar à resposta de Damien, onde ele recomenda:
Você pode configurar um controle remoto especial para acessar todos os controles remotos reais individuais com 1 comando; Encontrei-o em http://marc.info/?l=git&m=116231242118202&w=2 :
Você também pode evitar digitar os URLs duas vezes usando a construção:
fonte
Também estou curioso sobre as maneiras sugeridas de lidar com isso e irei descrever a configuração atual que uso (com o SVN). Basicamente, criei um repositório que contém uma hierarquia de mini-sistema de arquivos, incluindo seus próprios diretórios bin e lib. Há um script na raiz desta árvore que configurará seu ambiente para adicionar esses bin, lib, etc ... outros diretórios às variáveis de ambiente adequadas. Portanto, o diretório raiz se parece essencialmente com:
Agora, dentro de / bin e / lib existem vários projetos e suas bibliotecas correspondentes. Eu sei que este não é um projeto padrão, mas é muito fácil para outra pessoa do meu grupo verificar o repo, executar o script 'setup_env.bash' e ter as versões mais atualizadas de todos os projetos localmente em seu Verificação de saída. Eles não precisam se preocupar em instalar / atualizar / usr / bin ou / usr / lib e mantém a simplicidade de ter vários checkouts e um ambiente muito localizado por checkout. Alguém também pode simplesmente executar o rm em todo o repositório e não se preocupar em desinstalar nenhum programa.
Isso está funcionando bem para nós e não tenho certeza se iremos alterá-lo. O problema com isso é que existem muitos projetos neste grande repositório. Existe uma maneira padrão git / Hg / bzr de criar um ambiente como este e dividir os projetos em seus próprios repositórios?
fonte
, Ainda não tentei aninhar repositórios git porque não me deparei com uma situação em que seja necessário. Como li no canal #git, git parece ficar confuso aninhando os repositórios, ou seja, você está tentando fazer git-init dentro de um repositório git. A única maneira de gerenciar uma estrutura git aninhada é usar
git-submodule
orepo
utilitário ou o Android .Quanto à responsabilidade de backup que você está descrevendo, digo delegue -a ... Para mim, geralmente coloco o repositório de "origem" para cada projeto em uma unidade de rede no trabalho que é regularmente apoiada pelos técnicos de TI por sua estratégia de backup de escolha. É simples e não preciso me preocupar com isso. ;)
fonte
Que tal usar mr para gerenciar seus vários repositórios Git de uma vez:
fonte
Há outro método para aninhar repositórios git, mas ele não resolve o problema que você está procurando. Ainda assim, para outros que estão procurando a solução que eu estava:
No nível superior git repo apenas esconda a pasta em .gitignore que contém o git repo aninhado. Isso torna mais fácil ter dois repositórios git separados (mas aninhados!).
fonte