Come posso organizzare i repository Git personali?


20

Sono in procinto di creare un account GitHub con il piano di creare un paio di librerie che ho sviluppato come parte di alcuni recenti progetti iOS liberamente disponibili per altri sviluppatori iOS da utilizzare.

Al momento non ho backup off-site per la maggior parte del mio codice, quindi come parte di questo, inizialmente pensavo di caricare tutti i miei progetti personali, o almeno tutti i miei progetti iOS, su un repository privato ospitato da GitHub . Tuttavia, ho molti progetti in giro, molti dei quali hanno un valore abbastanza basso (cioè adattati da libri e scritti per l'esperienza di apprendimento). Non solo GitHub si carica dal repository privato, ma non sembra avere alcun modo di organizzare i repository in modo gerarchico.

C'è qualcosa che mi manca che mi permetterebbe di usare un repository git con una gerarchia e di controllare i pezzi di cui ho bisogno / lavorare con loro, come faccio attualmente con SVN?

GitHub (o un concorrente, come BitBucket) ha alcune funzionalità di organizzazione del progetto che mi mancano?

In caso contrario, qual è il "modo Git" generalmente accettato per gestire questa situazione (scartare i progetti non destinati al rilascio, archiviarli offline, raggrupparli in qualche modo, ecc., Ecc.)?

Per quanto ne so, le mie opzioni sono:

  1. Metti le librerie su GitHub, continua a ospitare il mio SVN per tutti gli altri progetti, usa una soluzione non VCS per il backup off-site (blech),
  2. Metti librerie e software che prevedo di rilasciare su GitHub (rispettivamente come pubblico e privato), continua a ospitare il mio SVN per progetti che non mi interessano tanto e che probabilmente rivedrò per aggiornare la mia memoria su come implementare XYZ, decido che sono disposto a cancellarli se la mia casa implode (doppio blech),
  3. Metti tutto su [GitHub e / o BitBucket], occupati di avere un numero ridicolo di repository cercando ciò di cui ho bisogno / mantenendo un set offline di puntatori nel mio account [GitHub e / o BitBucket] (triple blech)

2
Sono curioso di sapere di quanti archivi stiamo parlando qui. Cosa intendi con "puntatori"?
mhulse,

poiché questa è una vecchia domanda, bitbucket ti consente di creare organizzazioni gratuite e in quelle puoi avere progetti, che possono avere repository. Le organizzazioni sono gratuite fino a un determinato numero di utenti. È possibile gestire le autorizzazioni per org / project / repo.
xenoterracide,

Nota che GitHub ora offre repository privati ​​illimitati con i loro piani a pagamento.
Jack

Risposte:


11

bitbucket.org ti consente di creare repository privati ​​illimitati.

Git non ti consente di controllare solo alcune parti di codice. Quindi è necessario creare un repository per ciascun progetto o occuparsi della clonazione di tutti i progetti. In realtà non vedo alcun problema nel mettere tutti i nostri piccoli progetti in un unico repository. Lo cloni una volta e hai finito.

Con Git non devi mai "checkout" di nuovo il codice a meno che non soffi via il repository locale o passi a un'altra macchina. Sincronizzerai semplicemente tutte le tue modifiche.

Ho un problema simile con un gran numero di repository. Il motivo per cui non riesco a memorizzarli tutti in un singolo repository è che devo ramificare versioni diverse da ogni repository. È molto difficile da gestire.


Vero, vero ... probabilmente non avrei dovuto chiamare GitHub in modo specifico, dato che sono aperto all'uso di BitBucket per progetti privati. Modificato leggermente la domanda per renderla meno particolare.
Arkaaito,

5

Risposta breve ...

Il mio consiglio: inizia con account pubblici su GitHub e / o Bitbucket (altro?). Lanciare alcuni progetti pubblici e iniziare a utilizzare gli strumenti / le interfacce. Una volta che hai un'idea dei servizi, dovresti capire quali sono i limiti, i vantaggi e gli svantaggi di ciascun servizio. Da lì, dovresti essere in grado di scegliere il percorso migliore per l'illuminazione di controllo della versione. :)


Risposta lunga ...

Al momento non ho backup off-site per la maggior parte del mio codice, quindi come parte di questo, inizialmente pensavo di caricare tutti i miei progetti personali, o almeno tutti i miei progetti iOS, su un repository privato ospitato da GitHub . Tuttavia, ho molti progetti in giro, molti dei quali hanno un valore abbastanza basso (cioè adattati da libri e scritti per l'esperienza di apprendimento).

Hai preso in considerazione l'installazione del tuo client Git? Se stai già pagando per l'hosting web, potrebbe avere senso usare quell'host per la tua configurazione Git.

Ad esempio, il mio host è WebFaction (nessuna affiliazione):

Installazione dell'applicazione Web Git

Dirigendoti su questa rotta potresti permetterti di risparmiare un po 'di $$$, esp. se stai già pagando per l'hosting.

GitHub non si carica solo dal repository privato,

Giusto per chiarire per gli altri (di nuovo, nessuna affiliazione commerciale a GitHub o BitBucket):

GitHub: piani e prezzi

  • $ 7 / mo. per un massimo di 5 repository privati , tutto il resto illimitato.
  • $ 12 / mo. per un massimo di 10 repository privati , tutto il resto illimitato.
  • $ 12 / mo. per un massimo di 20 repository privati , tutto il resto illimitato.

Si noti che i prezzi dei "piani aziendali" sono diversi.

Prezzi per l'hosting di repository Git e Mercurial per Bitbucket di Atlassian

Come affermato da Andrew nell'altra risposta, Bitbucket promuove repository privati ​​illimitati.

  • 5 utenti: gratuito
  • 10 utenti: $ 10 / mese.
  • 25 utenti: $ 25 / mese
  • 50 utenti: $ 50 / mese.
  • 100 utenti: $ 100 / mese.
  • $ 200 / mese illimitati .

non sembra avere alcun modo di organizzare gerarchicamente i repository.

Non so esattamente cosa intendi per "gerarchicamente" (probabilmente perché non ho familiarità con SVN).

Non sono sicuro che ciò possa aiutare, ma puoi guardare questa tabella di confronto per vedere come i comandi confrontano / differiscono:

C'è qualcosa che mi manca che mi permetterebbe di usare un repository git con una gerarchia e di controllare i pezzi di cui ho bisogno / lavorare con loro, come faccio attualmente con SVN?

Branching?

GitHub (o un concorrente, come BitBucket) ha alcune funzionalità di organizzazione del progetto che mi mancano?

Non sono sicuro se questo aiuterà, ma potresti dare un'occhiata a:

Git viene fornito con strumenti GUI integrati per il commit ( git-gui ) e la navigazione ( gitk ), ma ci sono diversi strumenti di terze parti per gli utenti che cercano un'esperienza specifica per la piattaforma.

... di nuovo, non sono sicuro che qualcuno di questi strumenti possa aiutarti a farti un'idea di ciò che è possibile.

Per essere chiari, non sono sicuro del tuo livello di abilità Git ... se non conosci Git / GitHub, usare una GUI potrebbe essere un modo semplice e veloce per farti un'idea delle cose. Personalmente mi piace usare le app GitHub ufficiali per Mac / Windows.

In caso contrario, qual è il "modo git" generalmente accettato per gestire questa situazione (scartare i progetti non destinati al rilascio, archiviarli offline, raggrupparli in qualche modo, ecc., Ecc.)?

Se fossi in te, utilizzerei i repository.

Di quanti repository privati ​​hai bisogno?

Se si desidera utilizzare GitHub, una soluzione potrebbe essere quella di ottenere il piano più economico e utilizzare alcuni repository privati ​​per contenere tutto il codice di test / non pubblico. Puoi semplicemente usare una struttura di cartelle sul tuo mainramo per mantenere una struttura gerarchica, oppure puoi usare più rami per mantenere le cose più separate.

Suggerimento: se stai utilizzando una versione più recente di Git, puoi estrarre rami specifici usando git clone -b mybranch --single-branch git://sub.domain.com/repo.git:

Devo avvertirti però, usare i rami per organizzare il codice (come le cartelle) non è davvero il modo migliore per fare le cose (tuttavia, non c'è nulla che dica che non puoi seguire questa strada).

( Sembra la mia risposta qui per informazioni correlate riguardo alle filiali GitHub. )

Ancora una volta, penso che più repository siano la strada da percorrere.

Potresti chiederti se il tuo codice deve davvero essere privato; è possibile che tu possa rendere pubblico questo codice senza ripercussioni?

Metti le librerie su GitHub, continua a ospitare il mio SVN per tutti gli altri progetti, usa una soluzione non VCS per il backup off-site (blech),

Se segui questa strada, Dropbox (o simile) potrebbe essere un buon modo per ottenere una qualche forma di controllo e sincronizzazione della versione per il backup off-site.

Metti librerie e software che prevedo di rilasciare su GitHub (rispettivamente come pubblico e privato), continua a ospitare il mio SVN per progetti che non mi interessano tanto e che probabilmente rivedrò per aggiornare la mia memoria su come implementare XYZ, decido che sono disposto a cancellarli se la mia casa implode (doppio blech),

Questo mi riporta alla domanda "Paghi già per l'hosting? In tal caso, potresti installare il tuo host Git"; il vantaggio è che potresti avere tutto il codice sorgente sotto l'ombrello di Git, anche se non è tutto sullo stesso host (ad esempio, usa GitHub per le cose pubbliche che vuoi mostrare).

Metti tutto su [GitHub e / o BitBucket], occupati di avere un numero ridicolo di repository cercando ciò di cui ho bisogno / mantenendo un set offline di puntatori nel mio account [GitHub e / o BitBucket] (triple blech)

---> Vedi la mia breve risposta sopra. ^^^^^^


0

Ecco cosa faccio:

  • Inserisci i progetti autonomi che desideri rendere pubblici in repository GitHub separati . Poiché GitHub è attualmente il luogo di fatto per condividere il codice, ciò renderà i tuoi progetti più rilevabili / più facili da spostare.
  • Per qualsiasi progetto che desideri mantenere privato, inseriscilo in repository privati ​​ospitati dal tuo provider preferito. Come già accennato, Bitbucket è una buona scelta per questo in quanto consente repository privati ​​illimitati.
  • Metti tutti gli altri codici in un repository "junk". Ciò può includere il codice utilizzato per l'apprendimento e i test, nonché piccoli frammenti che non fanno realmente parte di un progetto. Finché non c'è motivo di mantenerlo privato, è possibile ospitare questo repository anche su GitHub.

    Oltre a tutti i consueti vantaggi del controllo versione (che hai già con SVN), ora il backup del codice è online. Nel caso in cui uno qualsiasi dei tuoi codici spazzatura si trasformi in un progetto, puoi semplicemente trasformarlo nel suo repository.

    Potresti mettere questo codice in repository separati o usare qualcosa di fantasioso come sottomoduli o sottotitoli git, ma trovo che sia più semplice tenere tutto in un repository e organizzarlo usando le cartelle. È molto più semplice e git è abbastanza veloce che la dimensione del repository non dovrebbe essere un problema.


0

Una possibile tecnica sarebbe quella di utilizzare i rami.

I rami in un repository git sono solo dei puntatori a commit, non devono essere in alcun modo correlati tra loro. Quindi è possibile creare un repository "minorprojects" sul servizio di hosting e quindi utilizzare una succursale in quel repository per ciascun progetto. Se un progetto minore cresce, puoi facilmente spostare il ramo nel suo repository.

A livello locale è possibile mantenere i rami in repository locali separati (non è necessario un mapping 1: 1 tra repository locali e remoti) o disporre di un singolo repository locale e utilizzare git worktree per mantenere più alberi di lavoro. Personalmente sospetto che il primo approccio sia meno soggetto a errori.


La loro memorizzazione nello stesso repository remoto non significa che è necessario utilizzare lo stesso repository locale.
Peter Green,

Dimentica il mio ultimo commento. Ho appena imparato a conoscere il git worktreecomando, che ti consente di creare alberi di lavoro aggiuntivi per un repository, permettendoti di fare il check-out di più rami contemporaneamente. Con questo, gli aspetti negativi del tuo approccio praticamente scompaiono: basta creare un albero di lavoro per ogni ramo indipendente e usarli come repository indipendenti. Potrebbe essere una buona idea aggiungere questo alla tua risposta :-)
cmaster - reintegrare monica

@Castero, fatto ...
Peter Green,
Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.