git per progetti personali (one-man). Eccessivo?


84

Conosco e utilizzo due sistemi di controllo della versione: Subversion e git. Subversion, fin d'ora, viene utilizzato per progetti personali in cui sono l'unico sviluppatore e git viene utilizzato per progetti e progetti open source in cui credo che anche altri lavoreranno sul progetto. Ciò è dovuto principalmente alle incredibili capacità di fork e fusione di git, in cui tutti possono lavorare sul proprio ramo; molto maneggevole.

Ora uso Subversion per progetti personali, poiché penso che git abbia poco senso lì. Sembra essere un po 'eccessivo. Va bene per me se è centralizzato (sul mio server di casa, di solito) quando sono l'unico sviluppatore; Prendo comunque backup regolari. Non ho bisogno della capacità di creare il mio ramo, il ramo principale è il mio ramo. Sì, SVN ha un supporto semplice per le ramificazioni, ma credo che un supporto molto più potente non abbia senso. La fusione può essere un dolore, o almeno dalla mia piccola esperienza.

C'è qualche buona ragione per usare git su progetti personali o è semplicemente eccessivo?


61
No, utilizzo git e hg per progetti personali. Avere il controllo di revisione locale è una manna dal cielo.
wkl,

7
Git è in molti modi migliore per tutti i progetti, che abbiano o meno un gran numero di collaboratori: git comprime le cose molto, molto più efficacemente di svn (ed è l'ordine delle magnitudini più veloce!), Git rende i backup banali e git no essere un ostacolo se qualcun altro vuole contribuire.
Artefatto2,

4
Uso il controllo della versione per inviare il mio codice a github o bitbucket, server come backup per me, e forse un giorno scriverò davvero qualcosa a cui le persone saranno veramente interessate.
Mahmoud Hossam,

8
"Non ho bisogno della capacità di creare il mio ramo, il ramo principale è il mio ramo". Molte persone hanno detto la stessa cosa undoquando si trattava di una funzionalità relativamente nuova nelle applicazioni. Ora tutti si rendono conto che ne avevano sempre bisogno. Devi diramarti, semplicemente non lo sai.
Dan Rosenstark,

1
@rtperson sì, puoi farlo, ma in realtà mi piace di più Mercurial, anche se mi piace Github più che Bitbucket.
Mahmoud Hossam,

Risposte:


155

Non è eccessivo. Il motivo principale per cui ho iniziato a utilizzare Git e Mercurial su Subversion per progetti personali è che l'avvio di un repository è molto più semplice.

Vuoi iniziare un nuovo progetto?

> git init

BAM! Non è necessario configurare un server di repository né archiviare una struttura di cartelle per supportare la ramificazione e i tag in un repository di sovversione.

La condivisione del progetto in un secondo momento è solo una questione di: git push(oltre ad avere un repository remoto). Prova a farlo rapidamente con sovversione!


24
Accettato. Non avrei potuto essere smentito più del fatto che Git fosse eccessivo di così;)
Anto,

7
Steve341: Solitamente conservo tutti i progetti di codice sorgente in una cartella denominata "progetti". È qui che conservo tutti i repository, uno per ciascun progetto di codice sorgente. Non ho mai avuto bisogno di tenere traccia di diversi progetti insieme nello stesso repository VCS; ecco a cosa servono i sistemi di gestione delle dipendenze come Ivy o Maven.
Spoike,

3
@ Steve341 Come è difficile tenere traccia di queste cose? Hai solo una cartella che contiene tutti i tuoi repository. Non è diverso dal tuo sistema, a parte il fatto che il tuo sistema è una pratica estremamente negativa quando usi git ...
alternativa

2
@ Steve314:echo 'for dir in projects/*; do cd "$dir"; git push; cd ..; done' > update_all; chmod +x update_all
André Paramés,

2
git inite bam! Oh sì e poi cp ../the-other-project/.gitignore .prima del commit iniziale. Bam!
Dan Rosenstark,

46

Direi che usare Subversion per progetti personali locali è eccessivo, mentre Git decisamente no. Git occuperà meno spazio (a causa dell'inefficiente concetto di "revisioni" di SVN rispetto alle istantanee degli oggetti di Git), richiede meno installazione ( git initrispetto a una dozzina di svnadmincomandi e impostazioni di autorizzazioni e così via), è più facile eseguire il backup ( git clone --bare[o git push originse usi Github o simili] e il gioco è fatto) e dispone di strumenti migliori per la gestione del codice (la ramificazione è gratuita e l'unione è più semplice e pulita). Solo perché nessun altro ha un clone del tuo repository non significa che i vantaggi di qualsiasi DVCS siano "eccessivi".

Inoltre, direi che il supporto delle ramificazioni di Git è meno complesso di quello di SVN, con maggiori ricompense.


Immagino che avrei dovuto usare "potente" anziché "complesso"
Anto il

3
@Anto: non importa. Direi ancora sostanzialmente la stessa cosa: la ramificazione superiore di Git semplicemente non ha aspetti negativi, rispetto a SVN.
greyfade

3
Né Git "inquinerà" l'albero dei tuoi sorgenti con i file di tracciamento in ogni sottodirectory.
WarrenT

4
@WarrenT l'albero di origine "inquinamento" non si verifica nelle versioni svn 1.7 e successive.
Pllee

4
La creazione di un repository di filesystem in Subversion è un comando ( svnadmin create, più uno per eseguire il checkout iniziale o l'importazione), non è necessario impostare autorizzazioni e così via. Non nego che Git sia spesso uno strumento migliore, ma le inesattezze su Subversion non sono utili.
Josh Kelley,

34

Pensare che non diramerai mai il tuo codice è un po 'miope. Ho ramificato il mio codice diverse volte, in particolare quando stavo sperimentando un nuovo approccio di cui non ero ancora del tutto convinto. Alla fine vorrai la funzione.

Questo viene da un utente Subversion da molto tempo. Il consolidamento su uno strumento può davvero aiutarti a semplificarti la vita.


2
Sì, credo che questo sia il punto di partenza, la sperimentazione. Questa è stata la mia prima prenotazione quando ho letto la domanda di Op. Se non stai ramificando nel tuo repository stai "ramificando" nella tua testa e questo è insensato quando hai il controllo della versione in atto.
Chris,

3
Puoi ramificare con sovversione. E unisci. Una specie di. In realtà, l'unica volta che ho provato sono finito con un repository corrotto con cui non potevo più lavorare e il recupero da un backup (con il ramo già applicato) non mi ha aiutato, così ho finito per perdere tutta la mia storia e avviare un nuovo repository ... ma ho incolpato quello sulla transizione dall'1.4. 1.5 (penso - era qualche anno fa). Probabilmente diramare e fondere opere, davvero. Se sei abbastanza coraggioso da provarlo. Se avessi saputo di svn dump allora, avrei potuto risolvere il problema con un certo sforzo, ovviamente.
Steve314,

@ Chris, mi piace avere una versione funzionante a cui posso ricorrere in qualsiasi momento. Sicuro che puoi farlo con i tag, ma ci sono momenti in cui un ramo ha perfettamente senso. Non dimenticare gli altri vantaggi di git / mercurial.
Berin Loritsch,

9

Overkill è riservato quando si verificano danni collaterali causati dalla "soluzione". Usare una pistola per uccidere una mosca significa che ci sono danni causati dal proiettile che va altrove. È eccessivo. L'uso di qualcosa di più potente del necessario che non causa problemi non è eccessivo e può essere una buona cosa se ti aiuta a semplificare il processo di sviluppo. Non provoca alcun danno e consente di aggiornare solo un set di software anziché due. Quindi perché preoccuparsi di due sistemi invece di uno?


Potrebbe essere eccessivo (sì, con quella definizione) se il sistema fosse sulla tua strada. Mi chiedo se sia una buona idea usare git per progetti personali. Potresti dirmi quali sono i vantaggi specifici ? Questa risposta non risolve questo problema. Vedo git come un sistema più potente e troppo potente per progetti personali. Non ci deve essere necessariamente alcun danno in questo, purché non ti ostacoli. Potresti forse espandere la tua risposta?
Anto,

1
Overkill viene utilizzato anche quando lo sforzo utilizzato per applicare la soluzione è sproporzionato. Probabilmente, se stai già usando la sovversione per progetti locali, lo sforzo necessario per imparare Git o qualunque cosa sia eccessivo. O forse una lezione utile per sviluppare abilità trasferibili, ovviamente. Personalmente uso ancora la sovversione - mi sono morso un paio di volte, ma ho lasciato solo cicatrici minori. Sono interessato a imparare Git, ma ogni volta che sono andato a cercare, i tutorial che ho trovato erano criptici o non riuscivo a ottenere strumenti stabili per Windows o c'erano altri blocchi stradali che facevano sembrare tutto, beh, eccessivo.
Steve314,

7

Uso Git per i miei progetti personali e lo adoro. In precedenza utilizzavo Subversion e non ho ancora visto un aspetto negativo nell'utilizzo di Git. È più potente ma non in un modo che rende le cose semplici più complicate. Rendere le cose semplici inutilmente complicate / costose / lente / ecc. IMHO è una condizione necessaria per chiamare qualcosa di eccessivo. Inoltre, su Github ho biforcuto progetti precedentemente personali di altre persone per aggiungere una funzione che volevo e poi ho inviato loro richieste pull. Lo troverei abbastanza interessante se qualcuno interessato ai miei progetti facesse la stessa cosa.


7

Non ho mai usato il controllo del codice sorgente su progetti personali prima di DVCS, quindi è un po 'strano immaginare che qualcuno abbia la visione opposta. Alcuni dei miei motivi sono:

  • Facile da installare e demolire. Ad esempio, un collega mi ha dato un puzzle di programmazione la settimana scorsa che ho risolto in diversi piccoli passaggi. Ho fatto un repository git che è durato tutti i 45 minuti per contenere il mio lavoro, e poi è sparito. Non so quanto sia facile qualcosa di simile in sovversione, ma non ho mai sentito parlare di nessuno.
  • Disconnected. Per me, essere in grado di lavorare offline è molto più un vantaggio per un progetto di hobby che uno per lavoro. Non ho bisogno di creare un buco nel mio firewall di casa o ospitare pubblicamente un progetto. Posso temporaneamente mettere un repository su una chiavetta USB o un laptop e mantenere tutto sincronizzato.
  • Tutto colocato. Avere il repository e l'albero di lavoro insieme rende più facile tenere traccia dei piccoli progetti durante gli aggiornamenti del sistema operativo.
  • Funzionalità potenti. Certo, non ho bisogno del potere tutto il tempo, ma è lì quando ne ho bisogno e non consuma risorse quando non lo faccio.

6

Mi è stato detto che git-bisectè davvero bello per trovare il commit esatto che ha introdotto un determinato comportamento, navigando avanti e indietro nei commit a seconda del tuo input.

Si dovrà avere a che fare che un giorno per le cose che semplicemente non può capire cosa è successo.


EDIT: Inoltre, la capacità di ramificare è molto importante quando devi fare correzioni di bug nelle vecchie versioni che i clienti usano. Devi essere in grado di gestire "basta riparare questa piccola cosa ma non voglio la versione più recente perché non voglio testarla di nuovo ora".


2

Dipende da quanto seriamente vuoi ottenere il controllo delle versioni del tuo codice. Se quello che stai costruendo è ad esempio una semplice libreria che avrà sempre e solo la versione corrente (o per tutto il tempo che è vero), personalmente utilizzerei solo un'opzione di backup di base come Dropbox. Se perdi tutto il tuo codice, puoi recuperarlo dal Web e Dropbox ha un backup della versione di 30 giorni se fai davvero qualcosa di stupido.

Tuttavia, se ad esempio hai bisogno di mantenere i rami Production e Dev, allora git è assolutamente un ottimo strumento e un diavolo molto più veloce di svn. Tieni presente il rischio di guasti del disco rigido se, tuttavia, memorizzi i dati solo localmente.


1
Sì, uso DropBox per progetti personali. Il controllo delle versioni non è affatto sofisticato come un vero VCS, ma va bene per i progetti più piccoli che faccio nel mio tempo libero e non richiede alcuna attenzione (ad es. Nessun commit, i file si aggiornano solo mentre ci lavori).
jhocking

oh e per inciso perché sviluppo giochi i miei progetti tendono ad avere molti file binari (file di immagini, clip audio, ecc.) e la maggior parte dei sistemi di controllo della versione sono realmente destinati solo al codice sorgente.
jhocking

Git funziona perfettamente con i file binari, le differenze sono solo meno interessanti. Fortunatamente la differenza in git non è esattamente bloccata - se riesci a trovare uno strumento diff binario che ami, puoi usarlo con git abbastanza facilmente (dalla riga di comando)
Chris Moschini,

Mi è stato detto che Git spreca un sacco di file binari di versioning dello spazio, ma ciò che mi è stato detto potrebbe essere errato. Fondamentalmente, mi è stato detto che la maggior parte delle risorse binarie (suppongo non tutti i file binari, ma le immagini e i suoni che vanno in un gioco) devono essere salvate completamente in ogni versione e quindi Git riempie il tuo disco rigido con il repository locale.
jhocking

È inutile solo se non intendevi versione dei file binari. Se è necessario eseguirne la versione, la cronologia delle versioni non è inutile. Penso che stiano insinuando accidentalmente git che gonfia la sua cronologia delle versioni quando si tracciano i binari - non è corretto. git.wiki.kernel.org/index.php/GitSvnComparsion
Chris Moschini

2

Userei sempre, sempre, sempre un sistema di controllo della versione per qualsiasi tipo di progetto di sviluppo. Grandi o piccoli non contano davvero. Sia che io stia giocando a casa con una sorta di nuova tecnologia, scrivendo un piccolo aiuto per facilitare la mia vita o sviluppando professionalmente in una squadra grande e distribuita, vorrei sempre un sistema di controllo della versione per supportarmi.

Certo, la maggior parte delle volte per piccoli progetti personali non userete la maggior parte delle funzionalità, ma impostare un repository git (o anche un repository Subversion locale) non è un grosso problema, quindi provatelo! E prima che tu lo sappia vorrai sapere "accidenti, qual era il contenuto del file X venerdì scorso?". Senza controllo della versione - buona fortuna ;-)

Quindi, non importa se usi git o SVN - personalmente sto iniziando a migrare sempre più cose da SVN a git, ma la cosa principale è usare il controllo della versione, anche per le piccole cose.


1

Solo perché nessuno lo ha menzionato: per i progetti personali, darcs è davvero buono e meno coinvolto di git per fare un controllo diretto della versione. Non è così veloce per i progetti più grandi, ma nemmeno Subversion!


1
Sembra un po 'correlato a quanto conosci i darc. Non l'ho mai usato ma ho usato molto git. Per me git è molto semplice, ma scommetto che mi griderei la testa se dovessi usare i darc.
Sam

1
Se hai già imparato la folle interfaccia utente di git, i darc sarebbero un gioco da ragazzi.
wlangstroth,

1
puoi, per favore, spiegare perché darcs è meglio per i piccoli progetti che git?
shabunc,

0

Può essere un potente cambio di paradigma mentale per capire che ciò che facciamo è la sperimentazione. Avere uno strumento economico / facile per supportare questo, migliora la tua capacità di andare avanti, in parte perché migliora la tua capacità di uscire da qualsiasi esperimento quando risulta male.

Molti sviluppatori dicono: Beh, faccio solo copie del mio codice. Ma queste copie diventano difficili da gestire e finiscono per essere disordinate. Hai più copie e non ricordi quale copia di cosa, quindi prova a capire quando è sicuro eliminarle.

Tutto ciò diventa ancora più prezioso quando l'esperimento comporta cambiamenti coordinati su più file. E quando si tratta di un progetto solista, usare Git diventa ancora più semplice.

Invece di chiedermi se dovrei usarlo in un progetto solista, ora penso che peccato non averlo scoperto prima.


Per le opinioni del designer su questo, guarda Linus su Git su YouTube (~ 70 minuti)
WarrenT
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.