Introduzione a GIT ================== .. footer:: LIFO .. contents:: :class: handout Un nuovo progetto ----------------- .. class:: handout Iniziamo un nuovo progetto che vogliamo salvare sotto git: non serve preoccuparsi di avere un server, e neanche un nome pubblicabile per il progetto, basta creare una directory (che potremo rinominare in futuro), dire a git di crearci un repository e poi si può inizare subito a lavorare. :: $ mkdir greeter $ cd greeter/ $ git init Initialized empty Git repository in /home/[...]/greeter/.git/ Qualche file ------------ .. class:: handout Creiamo i nostri file, in questo caso un programma in python che saluterà le persone. :: $ mkdir greeter $ touch greeter/__init__.py $ cat > greeter/greeter.py class Greeter: """ """ $ cat > greeter.py #!/usr/bin/env python def main(): pass if __name__ == '__main__': main() $ chmod 755 greeter.py GIT --- .. class:: handout Con ``git status`` possiamo vedere che git si è accorto dell'esistenza di alcuni file, ma sono *untracked*, ovvero non considerati dal controllo delle revisioni. :: $ git status # On branch master # # Initial commit # # Untracked files: # (use "git add ..." to include in what will be committed) # # greeter.py # greeter/ nothing added to commit but untracked files present (use "git add" to track) In staging ---------- .. class:: handout Aggiungiamo quel che abbiamo fatto alla *staging area*, ovvero diciamo a git di prendere in considerazione quella versione del file perché venga successivamente salvata. :: $ git add greeter.py greeter/ $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: greeter.py # new file: greeter/__init__.py # new file: greeter/greeter.py # Altre mod --------- .. class:: handout Facendo altre modifiche e riguardando ``git status`` ci possiamo accorgere di come git non salvi automaticamente tutti i cambiamenti presenti nei file di cui tiene traccia, ma solo quelli che gli vengono indicati esplicitamente da salvare. :: $ cat > greeter/__init__.py from greeter import Greeter $ git status # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: greeter.py # new file: greeter/__init__.py # new file: greeter/greeter.py # # Changes not staged for commit: # (use "git add ..." to update what will be committed) # (use "git checkout -- ..." to discard changes in working directory) # # modified: greeter/__init__.py # Commit ------ .. class:: handout Finalmente possiamo aggiungere anche le ultime modifiche: :: $ git add greeter/__init__.py $ git commit .. class:: handout Se è la prima volta che usiamo git su questo computer salviamo qualche informazione su di noi, nel mio caso: :: $ git config --global user.name "Elena ``of Valhalla'' Grandi" $ git config --global user.email valhalla@trueelena.org .. class:: handout E finalmente possiamo creare il nostro primo commit, un insieme di file in una loro determinata versione al quale vengono associati alcuni metadati (autore, data, ...) e soprattutto un identificativo che è un hash crittografico dei contenuti. Il comando ``git commit`` apre un editor con il quale scrivere un commento da associare al commit. Di solito si scrive una descrizione breve da una riga (una 60ina di caratteri), e poi eventualmente altre informazioni più approfondite. :: Skeleton for the new project. # Please enter the commit message for your changes. Lines starting # with '#' will be ignored, and an empty message aborts the commit. # On branch master # # Initial commit # # Changes to be committed: # (use "git rm --cached ..." to unstage) # # new file: greeter.py # new file: greeter/__init__.py # new file: greeter/greeter.py # :: ".git/COMMIT_EDITMSG" 14L, 377C written [master (root-commit) b54e94f] Skeleton for the new project. 3 files changed, 9 insertions(+) create mode 100755 greeter.py create mode 100644 greeter/__init__.py create mode 100644 greeter/greeter.py LOG --- :: $ git log commit b54e94fde972281ca31a56ef0d36204addd4906b Author: Elena ``of Valhalla'' Grandi Date: Thu Nov 15 19:05:42 2012 +0100 Skeleton for the new project. Iniziamo a lavorarci -------------------- ``greeter/greeter.py``:: class Greeter: """ """ def greet(self): print "Hello World!" ``greeter.py``:: #!/usr/bin/env python import greeter def main(): grt = greeter.Greeter() grt.greet() if __name__ == '__main__': main() Diamo in pasto a git -------------------- :: $ git add greeter.py greeter/greeter.py $ git commit -m 'Generic greetings' [master adfbc73] Generic greetings 2 files changed, 8 insertions(+), 1 deletion(-) $ git status # On branch master nothing to commit (working directory clean) $ git log commit adfbc7340ac1af8b1dc80ebb1526c7b2b9ad4d1f Author: Elena ``of Valhalla'' Grandi Date: Thu Nov 15 19:08:29 2012 +0100 Generic greetings commit b54e94fde972281ca31a56ef0d36204addd4906b Author: Elena ``of Valhalla'' Grandi Date: Thu Nov 15 19:05:42 2012 +0100 Skeleton for the new project. gitignore --------- Aggiungere funzionalità ----------------------- Che bel sole là fuori! ---------------------- Ora di rientrare ---------------- Un bel backup ------------- Finalmente pubblichiamo ----------------------- :: $ $BROWSER http://gitorious.org Non github? ----------- Alternative: * _ * gitolite_ + gitweb_ self-hosted * ... .. _gitolite: .. _gitweb: .. vim: set filetype=rst: