From 2df6ee242a2965b1fb4e59bb878011d62e7968e4 Mon Sep 17 00:00:00 2001 From: Elena ``of Valhalla'' Grandi Date: Sat, 2 Apr 2016 19:22:23 +0200 Subject: Spostamento della condivisione alla fine --- introduzione_a_git.rest | 327 +++++++++++++++++++++++++++--------------------- 1 file changed, 183 insertions(+), 144 deletions(-) diff --git a/introduzione_a_git.rest b/introduzione_a_git.rest index d60b208..c8d8176 100644 --- a/introduzione_a_git.rest +++ b/introduzione_a_git.rest @@ -52,7 +52,7 @@ GIT .. class:: handout - Con ``git status`` possiamo vedere che git si è accorto dell'esistenza + Con ``git status`` possiamo vedere che git si è accorto dell'esistenza di alcuni file, ma sono *untracked*, ovvero non considerati dal controllo delle revisioni. @@ -109,7 +109,7 @@ Altre mod :: $ cat > greeter/__init__.py - from greeter import Greeter + from .greeter import Greeter $ git status # On branch master # @@ -258,7 +258,7 @@ Iniziamo a lavorarci (1) """ """ def greet(self): - print "Hello World!" + print("Hello World!") Iniziamo a lavorarci (2) ------------------------ @@ -275,22 +275,61 @@ Iniziamo a lavorarci (2) if __name__ == '__main__': main() -Diamo in pasto a git --------------------- +Diamo in pasto a git (1) +------------------------ .. class:: handout E vediamo di nuovo il workflow quotidiano: aggiungiamo le modifiche - fatte alla staging area con ``git add`` per poi darle in pasto - a ``git commit``. + fatte alla staging area; questa volta aggiungiamo l'opzione ``-p`` + a ``git add``, in modo da verificare pezzo per pezzo che modifiche + stiamo aggiungendo. + +:: - In questo caso anziché usare un editor per descrivere il commit - ci accontentiamo di una descrizione breve, passata per comodità - con l'opzione ``-m``. + $ git add -p greeter.py greeter/greeter.py + diff --git a/greeter.py b/greeter.py + index b102561..15faef1 100755 + --- a/greeter.py + +++ b/greeter.py + @@ -1,7 +1,10 @@ + #!/usr/bin/env python3 + + +import greeter + + + def main(): + - pass + + grt = greeter.Greeter() + + grt.greet() + + if __name__ == '__main__': main() + + Stage this hunk [y,n,q,a,d,/,s,e,?]? y + + diff --git a/greeter/greeter.py b/greeter/greeter.py + index 310fd1e..d4c4273 100644 + --- a/greeter/greeter.py + +++ b/greeter/greeter.py + @@ -1,2 +1,5 @@ + class Greeter: + """ """ + + + + def greet(self): + + print("Hello World!") + Stage this hunk [y,n,q,a,d,/,e,?]? y + + +Diamo in pasto a git (2) +------------------------ + +.. class:: handout + + E quindi possiamo creare il commit; in questo caso anziché usare un + editor per descrivere il commit ci accontentiamo di una descrizione + breve, passata per comodità con l'opzione ``-m``. :: - $ git add greeter.py greeter/greeter.py $ git commit -m 'Generic greetings' [master adfbc73] Generic greetings 2 files changed, 8 insertions(+), 1 deletion(-) @@ -355,32 +394,35 @@ gitignore .. class:: handout - Lavorando al progetto capita che si generino file che si vogliono - ignorare, ad esempio i risultati di compilazione: basta aggiungerli - al file ``.gitignore`` perché non vengano considerati. + Lavorando al progetto capita che si generino file che si vogliono + ignorare, ad esempio i risultati di compilazione o i file nascosti + dell'editor: basta aggiungerli al file ``.gitignore`` perché non + vengano considerati. :: $ ./greeter.py Hello World! $ git status - # On branch master - # Untracked files: - # (use "git add ..." to include in what will be committed) - # - # greeter/__init__.pyc - # greeter/greeter.pyc + On branch master + Untracked files: + (use "git add ..." to include in what will be committed) + + .greeter.py.swp + greeter/__pycache__/ + nothing added to commit but untracked files present (use "git add" to track) - $ echo "*.pyc" >> .gitignore + $ echo "*.sw?" >> .gitignore + $ echo "__pycache__" >> .gitignore $ git status - # On branch master - # Untracked files: - # (use "git add ..." to include in what will be committed) - # - # .gitignore + On branch master + Untracked files: + (use "git add ..." to include in what will be committed) + + .gitignore nothing added to commit but untracked files present (use "git add" to track) $ git add .gitignore - $ git commit -m '.gitignore: ignore .pyc files.' + $ git commit -m '.gitignore: ignore generated files. Aggiungere funzionalità ----------------------- @@ -411,50 +453,8 @@ Aggiungere funzionalità :: $ git add greeter/greeter.py - - -Che bel sole là fuori! ----------------------- - -.. class:: handout - - Anche se non abbiamo finito di implementare la nuova feature, - ci accorgiamo che c'è un bel sole e vogliamo andare a lavorarci - al parco (o dobbiamo correre a prendere il treno), e vogliamo - spostarci a lavorare sul portatile. - - Niente di più semplice: committiamo quel che abbiam fatto fin'ora, - cloniamo il repository su una chiavetta usb, e possiamo lavorare - dal portatile senza problemi. - -:: - $ git commit -m 'greeter/greeter.py: support for multiple greetees.' - $ cd $USB_KEY - $ git clone /home/[...]/greeter - Cloning into 'greeter'... - done. - $ cd greeter - $ git branch - * people - $ git branch -a - * people - remotes/origin/HEAD -> origin/people - remotes/origin/master - remotes/origin/people -.. class:: handout - - Con il comando ``git branch`` scopriamo che il clone ha già preso - come branch corrente quello che stavamo usando sul primo repository, - e con l'opzione ``-a`` possiamo vedere tutti i branch che abbiamo - a disposizione. - - Con git ogni copia comprende tutta la storia di tutti i branch - disponibili nel repository che si è copiato, e quindi è possibile - continuare a lavorare anche se ci si dovesse trovare senza connessione - ad internet. Inoltre ogni clone del repository è un backup completo, - utile nel caso in cui succeda qualcosa ad un hard disk. Aggiunte successive (1) ----------------------- @@ -490,77 +490,6 @@ Aggiunte successive (1) [people 59b9d39] greeter.py: support for a custom greetee. 1 file changed. 6 insertions(+). 1 deletion(-) -Ora di rientrare (1) --------------------- - -.. class:: handout - - Riattacchiamo la chiavetta al PC, cerchiamo di riportare le modifiche - dal repository su chiavetta al repository su hard disk con - il comando ``git push``. - -:: - - $ git push - Counting objects: 5, done. - Delta compression using up to 2 threads. - Compressing objects: 100% (3/3), done. - Writing objects: 100% (3/3), 487 bytes, done. - Total 3 (delta 0), reused 0 (delta 0) - Unpacking objects: 100% (3/3), done. - remote: error: refusing to update checked out branch: refs/heads/people - remote: error: By default, updating the current branch in a non-bare repository - remote: error: is denied, because it will make the index and work tree inconsistent - remote: error: with what you pushed, and will require 'git reset --hard' to match - remote: error: the work tree to HEAD. - remote: error: - remote: error: You can set 'receive.denyCurrentBranch' configuration variable t - remote: error: 'ignore' or 'warn' in the remote repository to allow pushing int - remote: error: its current branch; however, this is not recommended unless you - remote: error: arranged to update its work tree to match what you pushed in som - remote: error: other way. - remote: error: - remote: error: To squelch this message and still keep the default behaviour, se - remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'. - To /home/[...]/greeter/ - ! [remote rejected] people -> people (branch is currently checked out) - error: failed to push some refs to '/home/[...]/greeter/' - -Ora di rientrare (2) --------------------- - -.. class:: handout - - C'è un problema: git non permette di fare push che dovrebbero modificare - ciò che c'è nella *working copy* dell'altro repository; una soluzione - sarebbe richiedere l'aggiornamento con il comando ``git pull`` - dal repository sul PC, ma richiede un po' di configurazione. - Per ora usiamo una soluzione veloce: - -:: - - $ cd /home/[...]/greeter/ - $ git checkout master - $ cd - - $USB_KEY/greeter - $ git push - Counting objects: 5, done. - Delta compression using up to 2 threads. - Compressing objects: 100% (3/3), done. - Writing objects: 100% (3/3), 487 bytes, done. - Total 3 (delta 0), reused 0 (delta 0) - Unpacking objects: 100% (3/3), done. - To /home/[...]/greeter/ - d78d340..59b9d39 people -> people - $ git log - commit 59b9d3971db8cb872c798b215365b22fb20aa5a7 - [...] - $ cd /home/[...]/greeter/ - $ git checkout people - Switched to branch 'people' - $ git log - commit 59b9d3971db8cb872c798b215365b22fb20aa5a7 - Bugfixing della versione stabile -------------------------------- @@ -596,13 +525,13 @@ Reintegriamo in master (1) .. class:: handout Adesso che la funzionalità è completa possiamo reintegrarla nel branch - master: con ``gitk -a`` possiamo vedere la situazione attuale. + master: con ``gitk --all`` possiamo vedere la situazione attuale. :: $ git checkout people Switched to branch 'people' - $ gitk -a + $ gitk --all .. figure:: images/gitk01.png @@ -638,7 +567,7 @@ Reintegriamo in master (2) commit 5a23f44b8492f41f6a4834b959111b924efa905c [...] commit 2229a1833b2dd00922978140d5b7e16688408ee1 - $ gitk -a + $ gitk --all .. figure:: images/gitk02.png @@ -729,7 +658,7 @@ Reintegriamo in master (4) $ git log commit ca91dc9944e003ff47ec58464f3ebbb2ffdb8cfa [...] - $ gitk -a + $ gitk --all .. figure:: images/gitk03.png @@ -752,6 +681,116 @@ Reintegriamo in master (5) .. figure:: images/gitk04.png +Lavoriamo con altri +------------------- + +.. class:: handout + + Un amico si offre di aiutarci nello sviluppo: vogliamo passargli + una copia del repository + + Niente di più semplice: colleghiamo un disco esterno, da quello + cloniamo il repository e il nostro amico potrà lavorare su quello. + +:: + + $ cd $USB_DISK + $ git clone /home/[...]/greeter + Cloning into 'greeter'... + done. + $ cd greeter + $ git branch + * master + $ git branch -a + * master + remotes/origin/HEAD -> origin/master + remotes/origin/master + remotes/origin/people + +.. class:: handout + + Con il comando ``git branch`` scopriamo che il clone ha già preso + come branch corrente quello che stavamo usando sul primo repository, + e con l'opzione ``-a`` possiamo vedere tutti i branch che abbiamo + a disposizione. + + Con git ogni copia comprende tutta la storia di tutti i branch + disponibili nel repository che si è copiato, e quindi è possibile + continuare a lavorare anche se ci si dovesse trovare senza connessione + ad internet. Inoltre ogni clone del repository è un backup completo, + utile nel caso in cui succeda qualcosa ad un hard disk. + +Ora di rientrare (1) +-------------------- + +.. class:: handout + + Il nostro amico ci riporta l'hard disk, lo ricolleghiamo al pc e + cerchiamo di riportare le modifiche dal repository esterno al + nostro iniziale con ``git push``, e ci accorgiamo però di un problema. + +:: + + $ git push + Counting objects: 5, done. + Delta compression using up to 2 threads. + Compressing objects: 100% (3/3), done. + Writing objects: 100% (3/3), 487 bytes, done. + Total 3 (delta 0), reused 0 (delta 0) + Unpacking objects: 100% (3/3), done. + remote: error: refusing to update checked out branch: refs/heads/people + remote: error: By default, updating the current branch in a non-bare repository + remote: error: is denied, because it will make the index and work tree inconsistent + remote: error: with what you pushed, and will require 'git reset --hard' to match + remote: error: the work tree to HEAD. + remote: error: + remote: error: You can set 'receive.denyCurrentBranch' configuration variable t + remote: error: 'ignore' or 'warn' in the remote repository to allow pushing int + remote: error: its current branch; however, this is not recommended unless you + remote: error: arranged to update its work tree to match what you pushed in som + remote: error: other way. + remote: error: + remote: error: To squelch this message and still keep the default behaviour, se + remote: error: 'receive.denyCurrentBranch' configuration variable to 'refuse'. + To /home/[...]/greeter/ + ! [remote rejected] people -> people (branch is currently checked out) + error: failed to push some refs to '/home/[...]/greeter/' + +Ora di rientrare (2) +-------------------- + +.. class:: handout + + C'è un problema: git non permette di fare push che dovrebbero modificare + ciò che c'è nella *working copy* dell'altro repository; una soluzione + sarebbe richiedere l'aggiornamento con il comando ``git pull`` + dal repository sul PC, ma richiede un po' di configurazione. + Per ora usiamo una soluzione veloce: + +:: + + $ cd /home/[...]/greeter/ + $ git checkout master + $ cd - + $USB_KEY/greeter + $ git push + Counting objects: 5, done. + Delta compression using up to 2 threads. + Compressing objects: 100% (3/3), done. + Writing objects: 100% (3/3), 487 bytes, done. + Total 3 (delta 0), reused 0 (delta 0) + Unpacking objects: 100% (3/3), done. + To /home/[...]/greeter/ + d78d340..59b9d39 people -> people + $ git log + commit 59b9d3971db8cb872c798b215365b22fb20aa5a7 + [...] + $ cd /home/[...]/greeter/ + $ git checkout people + Switched to branch 'people' + $ git log + commit 59b9d3971db8cb872c798b215365b22fb20aa5a7 + Un bel backup ------------- -- cgit v1.2.3