Como posso organizar repositórios pessoais do Git?

20

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:

  1. 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),
  2. 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),
  3. 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)
Arkaaito
fonte
2
Estou curioso para saber quantos repositórios estamos falando aqui. O que você quer dizer com "ponteiros"?
Mhulse
Como essa é uma pergunta antiga, o bitbucket permite criar organizações livres e naquelas em que você pode ter projetos, que podem ter repositórios. As organizações são gratuitas para um certo número de usuários. Você pode gerenciar permissões por organização / projeto / repositório.
Xenoterracide
Observe que o GitHub agora oferece repositórios privados ilimitados com seus planos pagos.
Jack

Respostas:

11

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.

Andrew T Finnell
fonte
Verdadeiro, verdadeiro ... Eu provavelmente não deveria ter chamado o GitHub especificamente, pois estou aberto a usar o BitBucket para projetos privados. Editou a pergunta um pouco para torná-la menos específica.
Arkaaito
5

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 ...

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).

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.

O GitHub não cobra apenas pelo repositório privado,

Apenas para esclarecer para outras pessoas (novamente, nenhuma afiliação comercial ao GitHub ou BitBucket):

GitHub: Planos e preços

  • US $ 7 / mês. para até 5 repositórios particulares , ilimitado todo o resto.
  • US $ 12 / mês. para até 10 repositórios particulares , ilimitado todo o resto.
  • US $ 12 / mês. para até 20 repositórios particulares , ilimitado todo o resto.

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.

  • 5 usuários: grátis
  • 10 usuários: US $ 10 / mês.
  • 25 usuários: US $ 25 / mês.
  • 50 usuários: US $ 50 / mês.
  • 100 usuários: US $ 100 / mês.
  • Ilimitado $ 200 / mês.

parece não haver nenhuma maneira de organizar repositórios hierarquicamente.

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:

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?

Ramificação?

O GitHub (ou um concorrente, como o BitBucket) tem alguns recursos de organização do projeto que estão faltando?

Não tenho certeza se isso vai ajudar, mas você pode dar uma olhada em:

O Git vem com ferramentas GUI integradas para confirmação ( git-gui ) e navegação ( gitk ), mas existem várias ferramentas de terceiros para usuários que procuram experiência específica da plataforma.

... 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.

Na falta disso, qual é a "maneira geral" aceita de lidar com essa situação (descartar projetos não destinados ao lançamento, armazená-los offline, agrupá-los de alguma forma etc.)?

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 mainramificaçã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?

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),

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.

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),

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).

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)

---> Veja minha resposta curta acima. ^^^^^^

mhulse
fonte
0

Aqui está o que eu faço:

  • Coloque projetos independentes que você deseja tornar públicos em repositórios GitHub separados . Como o GitHub é atualmente o lugar de fato para compartilhar código, isso tornará seus projetos mais detectáveis ​​/ fáceis de distribuir.
  • Para todos os projetos que você deseja manter em sigilo, coloque-os em repositórios particulares hospedados pelo provedor de sua escolha. Como já mencionado, o Bitbucket é uma boa opção para isso, pois permite acordos privados ilimitados.
  • 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.

bmaupin
fonte
0

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.

Peter Green
fonte
Tê-los armazenados no mesmo repositório remoto não significa que você precise usar o mesmo repositório local.
Peter Green
Apenas esqueça o meu último comentário. Acabei de aprender sobre o git worktreecomando, 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 :-)
cmaster - Reintegrar monica
@cmaster, done ...
Peter Green