aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--introduzione_a_git.rest327
1 files 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 <file>..." to include in what will be committed)
- #
- # greeter/__init__.pyc
- # greeter/greeter.pyc
+ On branch master
+ Untracked files:
+ (use "git add <file>..." 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 <file>..." to include in what will be committed)
- #
- # .gitignore
+ On branch master
+ Untracked files:
+ (use "git add <file>..." 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
-------------