7 maggio 2009

Cercasi Susan disperatamente

...ammesso e non concesso che Susan conosca bene git(1).

A differenza dei precedenti, questo post non cerca deliberatamente di instillare nel lettore l'idea che git(1) sia un programma nato dalla mente di un cazzone avariato e destinato solo a cazzoni avariati. Questo post cerca risposte e spiegazioni.

L'autore di questo post ha provveduto, non riuscendo a reggere il fottio di opzioni e l'oscurità del linguaggio nelle rispettive pagine di help dei singoli comandi, a leggersi le istruzioni "rapide" sulla documentazione ufficiale e sulla sezione "Impara" di github relative al branching e merging, quanto meno relativamente alle funzioni basilari di cui aveva bisogno. Dalle sullinkate letture l'autore di questo post ha desunto che la semplice sequenza di comandi
$ git branch purge-Ai
$ git checkout purge-Ai
potesse permettere di creare un branch locale nel suo clone di un modulo che in parte mantiene, in modo da poter applicare lì tutta una serie di cambiamenti correlati, senza andare a toccare il branch master, che l'autore di questo post voleva mantenere "staccato".

Notate che il tutorial ufficiale propone, nella sezione Managing branches esattamente la sequenza di comandi inserita dall'autore di questo post e che il tutorial stesso afferma "Check that the change you made is no longer visible, since it was made on the experimental branch and you're back on the master branch."

Dolcissima Susan, o chi per lei, perché, come loggato qui, dopo essere tornato al branch master, mi dice che i cambiamenti apportati nel branch purge-Ai sono stati applicati anche lì (o là)???? Cos'è? Forse git(1) è così intelligente da sapere che prima o poi faccio il merge e mi anticipa??

4 commenti:

Filippo Argiolas ha detto...

Finchè non fai il commit i cambiamenti rimangono "fluttuanti" quindi se cambi branch continui a vederli.
git add aggiunge i file modificati alla lista di file da "committare", poi devi usare git commit per salvare i cambiamenti.
A questo puoi tornare su master e non vedrai il commit che hai fatto sul branch locale.

ziabice ha detto...

ti sei dimenticato di fare il commit sul tuo branch locale.
La linea 40 avrebbe dovuto essere:

$ git commit -a

Non ti so dire perché abbia fatto l'auto merge (può darsi che trovando il file cambiato e non "committato" l'abbia preso per buono come un cambiamento).
ti consiglio caldamente il canale irc #git su freenode, c'è gente molto disponibile.

mattions ha detto...

Devi fare il commit.

Funziona così per la branch locale:

git branch -b test_stuff
(edit file1)

git add file1
git commit -m "Something for commit message"

now you can switch back

git checkout master

prova a visualizzare con giggle la repository e vedrai che le branch sono diverse ed a diverse posizioni.

Finchè non fai il commit git automaticamente porta i cambiamenti che hai fatto con te.

--> Sempre una clean directory prima di cambiare branch, altrimenti non combini nulla.


HIH

Luca Ferretti ha detto...

OK, capito grazie a tutti.

Ciò non toglie che se si viene da un vcs tradizionale 'sta cosa è spiazzante. OK che Linus lo ha progettatto, lui che non è mai stato traviato da cvs, ma allora poteva almento usare un altro termine invece di checkout...