[Python] Scelta GUI

Enrico Bianchi enrico.bianchi a live.com
Lun 3 Apr 2017 01:01:21 CEST


On 03/30/2017 08:37 AM, Gollum1 wrote:
> In che modo dovrebbe essere gestito un repository di sviluppo?
Partiamo da un presupposto: queste sono mie considerazioni basate da 
quanto ho visto in giro e da come mi regolo io nel gestire un 
repository. Analizzando il repository BitBucket di Genropy:

Commit:
Per come la vedo io, un commit dovrebbe essere riferito ad un solo 
evento, ovvero mai riferirsi a due modifiche differenti. Per capirci, un 
commit che incorpora un fix e che incorpora una modifica di sviluppo non 
deve esistere. Inoltre, per me i commit dovrebbero essere il più 
granulari possibile, anche riferiti al cambio di una sola linea di 
codice (git da questo punto di vista aiuta parecchio, essendo 
decentralizzato). Questo perché non solo è più facile capire 
l'evoluzione del codice, ma è anche più facile eseguire operazioni di 
rebase o di cherry-pickying. Da quello che ho visto (un paio di commit, 
in realtà), in Genropy vengono incorporati i commit, cosa che come ho 
detto per me è Male™

Branch[1]:
Partiamo da un presupposto, esistono due tipi di branch: quelli di 
sviluppo di funzionalità (i feature branch) e quelli di 
mantenimento/hotfix del prodotto. La differenza è semplice: i primi sono 
branch che nascono per una deviazione dello sviluppo e muoiono, mediante 
merge o mediante cancellazione, quando questa deviazione finisce. 
Inoltre, molti li usano per definire dei workflow differenti da quello 
standard[2][3]. Da quello che mi è sembrato di capire, in Genropy viene 
usato un workflow basato su di un branch di sviluppo/feature/hotfix, ma 
mi sembra che ci siano anche dei branch che non c'entrano nulla con 
tutto il resto. Ora, le motivazioni possono essere due: o i branch in 
più sono di funzionalità che sono rimasti per storico o per mancata 
cancellazione, o sono deviazioni dallo sviluppo principale per 
customizzazioni specifiche. Nel primo caso, vedo un peccato "veniale", 
ovvero semplicemente non è stata fatta pulizia del repository, mentre 
nel secondo vedo un peccato più grave perché ogni customizzazione non 
riportata nel ramo principale significa non solo che ogni fix dev'essere 
riportato su tutti i branch, ma che c'è una gestione malsana del 
progetto, quindi spero che il progetto non si trovi in quest'ultimo caso.

Tag:
Qua vedo non è che ci sia molto da dire, per come l'ho intesa io i tag 
in Genropy sono usati alla stregua di branch. Comunemente i tag in 
qualsiasi sistema di controllo di revisione vengono usati per rilasciare 
la nuova versione del software, tanto che basta vedere il repository di 
un qualsiasi altro software per notare questa convenzione e che molti 
software di supporto li gestiscono in tal senso (e.g. Github rilascia 
automaticamente una versione del tuo software non appena compare il 
tag). Va da sè che è qua che per me, quello che fino a sopra era 
sopportabile (mi si perdoni il termine), diventa inaccettabile. Non vedo 
un senso alla gestione dei tag, e quindi non è chiaro quanto e come si 
sta evolvendo il software.

Per quanto riguarda il repository Github, invece, posto che sono 
d'accordo con le osservazioni dell'issue aperta, quello che vedo è non 
solo la mancanza di tag (che aiuterebbe non poco), ma uno scarso 
utilizzo del mezzo. Per intenderci, per quanto anche io sia un 
estimatore di BitBucket, Github permette di avere più visibilità 
rispetto a qualsiasi altro sistema di gestione dei repository, pertanto 
considererei veramente una migrazione del repository di sviluppo.

In definitiva, allo stato attuale quello che farei è questo:

  - Rivedrei tutti i tag utilizzando un sistema di versioning 
esplicativo[4] rispetto all'attuale.
  - Eliminerei tutti i branch morti, più per pulizia che altro.
  - Ristrutturerei il repository utilizzando come tracce di esempio [2] 
o [3], visto che ben si adattano al workflow che si sta utilizzando in 
questo momento

Enrico
[1] A tal proposito, consiglio sempre di seguire questo: 
http://learngitbranching.js.org/ <http://learngitbranching.js.org/>
[2] http://nvie.com/posts/a-successful-git-branching-model/
[3] https://about.gitlab.com/2014/09/29/gitlab-flow/
[4] http://semver.org/


Maggiori informazioni sulla lista Python