[Linux-Biella] hg vs git spiegatemi
Daniele Segato
daniele.bilug a gmail.com
Mer 16 Nov 2011 09:15:17 CET
On Tue, 2011-11-15 at 19:12 +0100, Federico "Darkmagister" Pietta wrote:
> On 15/11/2011 19:02, Paolo Ciarrocchi wrote:
> >> ho letto la cosa del branching .... spiegami bene ... git è comodo
> >> perchè io posso fare nella stessa dir,
> >> scelgo il branch in uso .... modifico un file ... poi magari torno al
> >> branc master per fare altre cose poi cambio branch di nuovo torno alla
> >> modifica di prima ... e se ok unisco i due branch
> >> ???
> >
> > Di solito non si sviluppa tutto nello stesso branch, con o senza git.
> > Branch master per lo sviluppo stabile, devel per lo sviluppo di nuove
> > funzionalità, etc etc.
> >
> > Poi fai il merge di una branch in un'altra o il cherrypicking di singoli
> > commit.
> >
> > Lo trovo estremamente naturale.
> >
>
> mi sfugge proprio qualcosa....
si :)
> nel senso chiaro hai più branch ... ma
> diciamo che io faccio così (non so se funzioni solo per software molto
> piccoli o cosa comunque...) devo correggere un bug, bene ho l'ultima
> versione committata in locale e pushata in remoto quindi uguale ... bene
> se devo correggere qualcosa solitamente apro il file con geany dalla
> directory, modifico testo se ok committo e push, voglio provare una cosa
> nuova copio la directory (ptt mi aveva parlato di un qualcosa che faceva
> la copia di una dir per lo sviluppo senza copiare i file ... non ricordo
> più comunque ... ma ciò che faccio ora non supera qualche mega non è un
> grosso problema copiare) provo faccio le modifiche che voglio se
> funzionano o servono ripulisco e committo ... se è una cacata rm della
> dir e finita li ...
uhhhh che scomodo
non conosco hg, ma è l'unico modo di lavorare su un branch?
duplicare tutto?
boh... comunque ti spiego come funziona git, hg non lo conosco bene
io ho una directory con dentro tutti i miei file: working directory
al cui interno c'è una dir nascosta: .git che contiene tutto il repo e i
file necessari a git
git fa uno snapshot di ogni branch (fotografia della working directory /
salvo file ignorati)
quando cambi branch git rende la working directory esattamente come era
a quel commit, cambia i file e le directory contenute
quindi tu, senza copiare nulla, ti trovi nel nuovo branch e, se vuoi,
puoi tornare a quello precedente
git checkout feature/foo
git checkout master
git checkout bugfix/bar
...
> >> è così .... ??? perchè nn lo trovo molto comodo dover ricordarsi di
> >> controllare in che branch si è in quel momento ....
> >> magari mi sfugge qualcosa
l'interfaccia in genere ti dice dove ti trovi
da linea di comando io ho modificato un po' il bashrc secondo istruzioni
di git stesso e mi scrive qualcosa come:
mastro a mastroc3 ~/ws/.../android (feature/000500/new-ux-design *) $
la parte tra parentesi tonde è il branch in cui mi trovo
l'asterisco che vedi mi dice che ho delle modifiche non committate
se ci fosse un + saprei che ho delle modifiche in stage ma non
committate
> il mio ide o la shell ??? in che senso ?? ma i branch sono directory ??
quello sopra è la shell, si ottiene con un piccolo script invocato in
PS1
questo è in fondo al mio .bashrc
# git PS1 and pettry colors
if [ -e /etc/bash_completion.d/git ] ; then
GIT_PS1_SHOWDIRTYSTATE=true
PS1='\[\033[00;34m\]\u\[\033[01;30m\]@\h\[\033[00;1m\] \w \[\033[00;36m
\]$(__git_ps1 "(%s)") \[\033[00;34m\]\$\[\033[00m\] '
fi
è la mia versione riadattata di quanto consiglia git, ha un po' di
colori
la parte git è solo questa:
$(__git_ps1 "(%s)")
io poi ci ho messo dei colori:
\u = nome utente (blu = 00;34m)
@\h = @host (grigio scuro = 01;30m)
\w = ~/..path/ (nero = 00;1m)
$(__git_ps1 "(%s)") = info git su dove mi trovo, tra parentesi, vedi il
"(%s)" (azzurro = 00;36m)
\$ = $/# simbolo della shell (blu)
io uso quasi solo la shell ma se usi una qualunque altra interfaccia di
comando ti dice dove sei
> se no non capisco
>
> io solitamente uso geany per programmare e shell per hg non ho un ide
> che integra il tutto o robe di questo tipo ...
non conosco geany
io per uso Eclipse, di solito
ho installato il plugin di Git su eclipse ma lo trovo ancora immaturo,
mi viene comodo solo per vedere da Eclipse quali file ho modificato, poi
faccio tutto da linea di comando per quel che riguarda la gestione di
git
> per favore spiegami come funziona fisicamente un nuovo branch sui file
> locali ... che mi sfugge proprio ...
ti spiego invece perché trovo comodo non dover cambiare directory:
nell'IDE ho già configurato tutto per funzionare sulla mia working
directory
sto lavorando nel branch feature/123-sarcazzo
faccio un esperimento, smandruppo un po' il codice poi provo
mi rendo conto che potrebbe aver senso sviluppare tutto su un altro
branch perché la cosa apre nuove prospettive ma impiegherei troppo
tempo, devo prima finire la feature nel modo più veloce...
# creo un nuovo branch portandomi dietro le modifiche
git checkout -b experiment/123-sarcazzo-better-design
# committo tutto scrivendo nel commento di commit cosa sto provando
git commit -a
# quindi ritorno al branch di prima
git checkout feature/123-sarcazzo
che ora non include più le modifiche del mio esperimento, ma io non le
ho perse, sono nel branch experiment/...
altro esempio:
sto sviluppando sempre la mia feature quando un bug urgente richiede di
essere trattato
faccio subito commit di tutto ciò su cui stavo lavorando per non
perderlo e poi...
git checkout -b bugfix/prod-bug tag-1.0.0
ho creato un branch a partire dal tag in produzione e ci sono entrato
ora sistemo il bug, commit e posso rilasciare direttamente il tag-1.0.1
che era urgente
quindi riporto la fix nel mio branch di sviluppo per non perdermela per
le prossime release
git checkout devel
git merge bugfix/prod-bug
git push origin tag-1.0.1
git push origin devel
ed infine ritorno a lavorare sulla mia feature
git checkout feature/...
non ho mai dovuto cambiare directory o copiare file
non ho mai dovuto riconfigurare il mio ambiente di lavoro perché la
directory è rimasta la stessa
ho dato solo i comandi che vedi qui e poi mi sono preoccupato di
lavorare
è git ha fatto tutto il resto
Maggiori informazioni sulla lista
Linux