Estou no processo de configurar uma conta do GitHub com o plano de tornar um par de bibliotecas que desenvolvi como parte de alguns projetos recentes do iOS disponíveis gratuitamente para uso por outros desenvolvedores do iOS.
No momento, não tenho backup externo para a maior parte do meu código; portanto, como parte disso, originalmente pensei em carregar todos os meus projetos pessoais, ou pelo menos todos os meus projetos iOS, em um repositório privado hospedado no GitHub . No entanto, tenho muitos projetos por aí, muitos dos quais têm um valor bastante baixo (ou seja, adaptados de livros e escritos para a experiência de aprendizado). O GitHub não apenas cobra pelo repositório privado, mas também não tem como organizar hierarquicamente os repositórios.
Falta algo que me permita usar um repositório git com uma hierarquia e verificar as peças conforme eu precisar delas / trabalhar com elas, da maneira que atualmente faço com o SVN?
O GitHub (ou um concorrente, como o BitBucket) tem alguns recursos de organização do projeto que estão faltando?
Na falta disso, qual é a "maneira Git" geralmente aceita de lidar com essa situação (descartar projetos não destinados à liberação, armazená-los offline, agrupá-los de alguma forma etc.)?
Tanto quanto posso dizer, minhas opções são:
- Coloque bibliotecas no GitHub, continue hospedando meu próprio SVN para todos os outros projetos, use uma solução que não seja VCS para backup externo (blech),
- Coloque as bibliotecas e o software que planejo lançar no GitHub (como público e privado, respectivamente), continue hospedando meu próprio SVN para projetos de que não me importo tanto e que provavelmente revisarei para atualizar minha memória sobre como implementar o XYZ, decido que estou disposto a amortizá-las se minha casa implodir (duplo golpe),
- Coloque tudo no [GitHub e / ou BitBucket], lide com ter um número ridículo de repositórios pesquisando o que eu preciso / mantendo algum conjunto offline de ponteiros na minha conta [GitHub e / ou BitBucket] (blech triplo)
fonte
Respostas:
O bitbucket.org permite criar repositórios privados ilimitados.
O Git não permite que você verifique apenas alguns trechos de código. Portanto, você precisará criar um repositório para cada projeto ou lidar com a clonagem de todos os projetos. Na realidade, não vejo problema em colocar todos os nossos pequenos projetos em um único repositório. Você clona uma vez e está pronto.
Com o Git, você nunca precisa fazer o "checkout" do código novamente, a menos que você estrague seu repositório local ou mude para outra máquina. Você apenas sincronizará todas as suas alterações.
Eu tenho um problema semelhante com um grande número de repositórios. A razão pela qual não posso armazená-los todos em um único repositório é que preciso ramificar versões diferentes de cada repositório. É muito difícil de gerenciar.
fonte
Resposta curta ...
Minha sugestão: comece com contas públicas no GitHub e / ou Bitbucket (outro?). Crie alguns projetos públicos e comece a usar as ferramentas / interfaces. Depois de ter uma idéia dos serviços, você deve ter uma idéia de quais são as limitações, vantagens e desvantagens de cada serviço. A partir daí, você poderá escolher o melhor caminho para a iluminação do controle de versão. :)
Resposta longa ...
Você já pensou em instalar seu próprio cliente Git? Se você já está pagando pela hospedagem na Web, pode fazer sentido usar esse host para sua própria configuração do Git.
Por exemplo, meu host é WebFaction (sem afiliação):
Instalando o aplicativo Web Git
O rumo desta rota pode permitir a você economizar alguns $$$, esp. se você já está pagando pela hospedagem.
Apenas para esclarecer para outras pessoas (novamente, nenhuma afiliação comercial ao GitHub ou BitBucket):
GitHub: Planos e preços
Observe que o preço dos "Planos de negócios" é diferente.
Preços para hospedagem de repositório Git e Mercurial para Bitbucket by Atlassian
Conforme declarado por Andrew na outra resposta, o Bitbucket promove acordos privados ilimitados.
Não sei exatamente o que você quer dizer com "hierarquicamente" (provavelmente porque não estou familiarizado com o SVN).
Não tenho certeza se isso ajudaria, mas você pode olhar para esta tabela de comparação para ver como os comandos se comparam / diferem:
Ramificação?
git-flow
)Não tenho certeza se isso vai ajudar, mas você pode dar uma olhada em:
... novamente, não tenho certeza se alguma dessas ferramentas pode ajudá-lo a entender o que é possível.
Para ser claro, não tenho certeza do seu nível de habilidade no Git ... se você é novo no Git / GitHub, o uso de uma GUI pode ser uma maneira rápida / fácil de entender as coisas. Pessoalmente, gosto de usar os aplicativos oficiais do GitHub para Mac / Windows.
Se eu fosse você, estaria usando repositórios.
Quantos repositórios particulares você precisa?
Se você deseja usar o GitHub, uma solução pode ser obter o plano mais barato e utilizar alguns repositórios particulares para armazenar todo o seu código de teste / não público. Você pode simplesmente usar uma estrutura de pastas em sua
main
ramificação para manter uma estrutura hierárquica ou usar várias ramificações para manter as coisas mais separadas.Dica: se você estiver usando uma versão mais recente do Git, poderá extrair ramificações específicas usando
git clone -b mybranch --single-branch git://sub.domain.com/repo.git
:Eu tenho que avisá-lo, porém, o uso de ramificações para organizar o código (como pastas) não é realmente a melhor maneira de fazer as coisas (no entanto, não há nada que diga que você não pode seguir esse caminho).
(Veja minha resposta aqui para obter informações relacionadas com relação às ramificações do GitHub. )
Mais uma vez, acho que vários repositórios são o caminho a percorrer.
Você pode se perguntar se seu código realmente precisa ser privado; é possível que você possa tornar público esse código sem nenhuma repercussão?
Se você liderar essa rota, o Dropbox (ou similar) pode ser uma boa maneira de obter alguma forma de controle de versão e sincronização para o backup externo.
Isso me leva de volta à pergunta "Você já paga pela hospedagem? Nesse caso, você pode instalar seu próprio host Git"; a vantagem é que você pode ter todo o código-fonte sob o guarda-chuva do Git, mesmo que não esteja tudo no mesmo host (por exemplo, use o GitHub para as coisas públicas que você deseja exibir).
---> Veja minha resposta curta acima. ^^^^^^
fonte
Aqui está o que eu faço:
Coloque todo o outro código em um repositório "lixo". Isso pode incluir código usado para aprendizado e teste, bem como pequenos trechos que não fazem parte de um projeto. Desde que não haja motivo para manter isso privado, você também pode hospedar este repositório no GitHub.
Além de todas as vantagens usuais do controle de versão (que você já possui com o SVN), agora é feito o backup online do seu código. Caso qualquer um dos seus códigos indesejados se transforme em um projeto, você pode simplesmente transformá-lo em seu próprio repositório.
Você pode colocar esse código em repositórios separados ou usar algo sofisticado, como sub-módulos ou subárvores git, mas acho que é mais fácil manter tudo em um repositório e organizá-lo usando pastas. É muito mais simples e o git é rápido o suficiente para que o tamanho do repositório não seja um problema.
fonte
Uma técnica possível seria usar ramificações.
As ramificações em um repositório Git são apenas indicadores de consolidação, não precisam estar relacionadas de nenhuma maneira. Assim, você pode criar um repositório "minorprojects" no serviço de hospedagem e, em seguida, usar uma ramificação nesse repositório para cada projeto. Se um projeto menor crescer, você poderá facilmente mover o ramo para seu próprio repositório.
Localmente, você pode manter as ramificações em repositórios locais separados (não precisa haver um mapeamento 1: 1 entre repositórios locais e remotos) ou ter um único repositório local e usar a árvore de trabalho git para manter várias árvores de trabalho. Pessoalmente, suspeito que a primeira abordagem seja menos propensa a erros.
fonte
git worktree
comando, que permite criar árvores de trabalho adicionais para um repositório, permitindo que você faça check-out de várias ramificações simultaneamente. Com isso, as desvantagens de sua abordagem basicamente desaparecem: basta criar uma árvore de trabalho para cada ramificação independente e usá-las como repositórios independentes. Pode ser uma boa idéia para adicionar esta a sua resposta :-)