<?xml version="1.0"?>
<?xml-stylesheet type="text/css" href="https://wiki.mocambos.net/skins/common/feed.css?303"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="pt-br">
		<id>https://wiki.mocambos.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Musa</id>
		<title>Rede Mocambos - Contribuições do usuário [pt-br]</title>
		<link rel="self" type="application/atom+xml" href="https://wiki.mocambos.net/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=Musa"/>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Especial:Contribui%C3%A7%C3%B5es/Musa"/>
		<updated>2026-09-08T16:44:56Z</updated>
		<subtitle>Contribuições do usuário</subtitle>
		<generator>MediaWiki 1.18.6</generator>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-09-02T11:36:01Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django ==&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;musa jedo@exmple.org&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex get .&lt;br /&gt;
  get zaghawa.jpg (merging amilo/git-annex origin/git-annex into git-annex...)&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  (from amilo...) &lt;br /&gt;
  SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg&lt;br /&gt;
       56356 100%   11.25MB/s    0:00:00 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
  sent 56508 bytes  received 31 bytes  113078.00 bytes/sec&lt;br /&gt;
  total size is 56356  speedup is 1.00&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
*sincronizzazione:-&lt;br /&gt;
Si noti che nell'esempio precedente, si doveva git fetch e unire dal computer portatile prima. Ciò consente git-annex sapere cosa è cambiato nel computer portatile, e quindi conosce i file lì presenti e possono farli.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex sync&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  commit  &lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  ok&lt;br /&gt;
  pull origin &lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   e0231e2..44f655e  git-annex  -&amp;gt; origin/git-annex&lt;br /&gt;
  * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
  ok&lt;br /&gt;
  pull amilo &lt;br /&gt;
  ok&lt;br /&gt;
  push origin &lt;br /&gt;
  Counting objects: 32, done.&lt;br /&gt;
  Delta compression using up to 2 threads.&lt;br /&gt;
  Compressing objects: 100% (18/18), done.&lt;br /&gt;
  Writing objects: 100% (24/24), 2.17 KiB, done.&lt;br /&gt;
  Total 24 (delta 3), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (24/24), done.&lt;br /&gt;
  To /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex -&amp;gt; synced/git-annex&lt;br /&gt;
   * [new branch]      master -&amp;gt; synced/master&lt;br /&gt;
  ok&lt;br /&gt;
  push amilo &lt;br /&gt;
  Everything up-to-date&lt;br /&gt;
  ok&lt;br /&gt;
Dopo l'esecuzione di sincronizzazione, il repository sarà aggiornato con tutte le modifiche apportate ai propri remoto, ed eventuali cambiamenti nel repository sarà spinto fuori per i suoi remoti, dove una sincronizzazione li porterà. Ciò è particolarmente utile quando si usa git in modo distribuito, senza un repository nudo centrale. Vedere sincronizzazione per i dettagli.&lt;br /&gt;
Si noti che la sincronizzazione sincronizza solo i metadati sui file che è memorizzato in git. Non sincronizzare il contenuto dei file, che sono gestiti da git-annex.&lt;br /&gt;
*usando ssh remoto:&lt;br /&gt;
Finora in questa procedura dettagliata, git-annex è stato utilizzato con un repository remoto su un drive USB. Ma può essere utilizzato anche con un remoto git che è veramente remota, un host accessibile da ssh.&lt;br /&gt;
Diciamo che avete un desktop sulla stessa rete del computer portatile e vuole clonare annex del portatile ad esso:&lt;br /&gt;
  $git clone ssh://mio portable/home/musa/Bocs&lt;br /&gt;
  $cd ~/Bocs&lt;br /&gt;
  $git annex init &amp;quot;mio Scrivania&amp;quot;&lt;br /&gt;
Ora è possibile ottenere i file e saranno trasferiti (usando rsync via ssh):&lt;br /&gt;
  $git annex get zaghawa.jpg&lt;br /&gt;
   get my_cool_big_file (getting UUID for origin...) (from origin...)&lt;br /&gt;
   SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg  100% 2159     2.1KB/s   00:00&lt;br /&gt;
  ok&lt;br /&gt;
Quando si elimina file, git-annex volontà ssh verso il remoto e assicurarsi che il contenuto del file è ancora lì prima di rimuoverla a livello locale:&lt;br /&gt;
  git annex drop zaghawa&lt;br /&gt;
  drop zaghawa.jpg (checking origin..) ok&lt;br /&gt;
* spostamento del contenuto di file tra i repository:&lt;br /&gt;
Spesso si vuole spostare alcuni contenuti dei file da un archivio ad un altro uno. Ad esempio, rigido del computer portatile è sempre pieno, il tempo di spostare alcuni file su un disco esterno prima di passare un altro file da un file server al vostro computer portatile. Farlo a mano (usando git annex ottenere e git annex calo) è possibile, ma un po 'di dolore. git annex mossa rende molto facile.&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex move zaghawa.jpg --to usbdrive&lt;br /&gt;
* utilizzando tag e rami:&lt;br /&gt;
Come git, git-annex si blocca su ogni versione di un file (di default), in modo da poter rendere i tag e rami, e può controllare fuori in seguito a guardare i vecchi file.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git tag 1.0&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ rm -f zaghawa.jpg&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git commit -m deleted&lt;br /&gt;
  # On branch master&lt;br /&gt;
  # Changed but not updated:&lt;br /&gt;
  #   (use &amp;quot;git add/rm &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
  #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
  #&lt;br /&gt;
  #	deleted:    zaghawa.jpg&lt;br /&gt;
  #&lt;br /&gt;
  no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git checkout 1.0&lt;br /&gt;
  D	zaghawa.jpg&lt;br /&gt;
  Note: checking out '1.0'.&lt;br /&gt;
  You are in 'detached HEAD' state. You can look around, make experimental&lt;br /&gt;
  changes and commit them, and you can discard any commits you make in this&lt;br /&gt;
  state without impacting any branches by performing another checkout.&lt;br /&gt;
  If you want to create a new branch to retain commits you create, you may&lt;br /&gt;
  do so (now or later) by using -b with the checkout command again. Example:&lt;br /&gt;
  git checkout -b new_branch_name&lt;br /&gt;
  HEAD is now at d18d244... git-annex automatic sync&lt;br /&gt;
Naturalmente, quando si git checkout un vecchio ramo, alcune vecchie versioni di file potrebbero non essere disponibili a livello locale, e possono essere memorizzate in qualche altro repository. È possibile utilizzare git annex arrivare a farli come al solito.&lt;br /&gt;
* gestire automaticamente il contenuto:&lt;br /&gt;
Una volta che si dispone di più repository, e forse avete configurato numcopies, ogni file può avere molte più copie del necessario, o forse meno di quanto avrebbe voluto. Come gestire questo?&lt;br /&gt;
Il whereis sottocomando può essere usato per vedere quante copie di un file sono noti, ma poi si deve decidere cosa prendere o cadere. In questo esempio, non vi sono forse abbastanza copie del primo file, e troppi del secondo file.&lt;br /&gt;
  $cd /media/6FFE-842D/&lt;br /&gt;
  $git annex whereis&lt;br /&gt;
  whereis zaghawa.jgp (2 copies)&lt;br /&gt;
    0c443de8-e644-11df-acbf-f7cd7ca6210d  -- amilo&lt;br /&gt;
    62b39bbe-4149-11e0-af01-bb89245a1e61  -- here (usb drive)&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/BOCS/Altakamul_TerraTerra/TradizionalMENTE_2013</id>
		<title>BOCS/Altakamul TerraTerra/TradizionalMENTE 2013</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/BOCS/Altakamul_TerraTerra/TradizionalMENTE_2013"/>
				<updated>2013-09-02T10:59:24Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Soggetto proponente (max 20 righe) */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;'''Link: http://www.giovaninsicilia.it/bandi/bandi-creazioni-giovani'''&lt;br /&gt;
&lt;br /&gt;
Allegato 4&lt;br /&gt;
Avviso pubblico per la presentazione di progetti attuativi degli interventi 1, 2, e 3 delle Schede Intervento “Giovani protagonisti di sé e del territorio (CreAZIONI giovani)” della Regione Siciliana.&lt;br /&gt;
&lt;br /&gt;
Formulario&lt;br /&gt;
&lt;br /&gt;
== Titolo del progetto ==&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Soggetto proponente (max 20 righe) ==&lt;br /&gt;
:Denominazione e breve descrizione. In caso di gruppo informale elencare tutti i componenti del gruppo&lt;br /&gt;
&lt;br /&gt;
'''Altakamul Terra Terra (Gruppo informale)''':&lt;br /&gt;
&lt;br /&gt;
* Elio Tozzi&lt;br /&gt;
* Musa Jedo&lt;br /&gt;
* Alessio Parrino&lt;br /&gt;
* Tahib&lt;br /&gt;
* Tahib&lt;br /&gt;
* Tonino Greco&lt;br /&gt;
* Vincenzo Tozzi&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Tipologia soggetto proponente ==&lt;br /&gt;
* Associazione &lt;br /&gt;
* Consulta giovanile&lt;br /&gt;
* '''Gruppo informale X'''&lt;br /&gt;
&lt;br /&gt;
== Linea di intervento == &lt;br /&gt;
* Giovani talenti&lt;br /&gt;
* '''TradizionalMENTE X'''&lt;br /&gt;
* Giovani e legalità&lt;br /&gt;
&lt;br /&gt;
== Sintesi del progetto (max 20 righe) ==&lt;br /&gt;
:Descrivere sinteticamente la proposta progettuale, gli obiettivi, le attività previste, gli effetti attesi nonché i mezzi finanziari e materiali necessari per raggiungere gli obiettivi&lt;br /&gt;
&lt;br /&gt;
Il progetto &amp;quot;Altakamul nella Rotta dei Baobab&amp;quot; nasce da un esperimento ben riuscito sul territorio della conca d'oro siciliana. Riscoprire le nostre radici culturali ristabilendo un legame con la terra in dialogo con altre culture. La sinergia di varie realtà giovanili e di molti &amp;quot;espatriati&amp;quot; siciliani che rientrano nella loro terra con spirito di rinnovamento e con nuovi punti di vista che da anni realizzano attività socio culturali sul territorio. Le esperienze migranti e multiculturali sono legate alla diaspora siciliana quanto a quella africana con la partecipazione fin dalla sua creazione della comunità sudanese di Palermo, con un crescente legame con la brasiliana Rete Mocambos.&lt;br /&gt;
&lt;br /&gt;
L'obbiettivo di ristabilire il legame con la terra sarà realizzato attraverso il recupero e la gestione dei piccoli appezzamenti agricoli presenti sul territorio con forme associativiste e cooperativistiche in accordo con i proprietari de terreni. Il territorio si presta particolarmente per la presenza di numerosi terreni di piccole dimensioni semiabbandonati ma ancora produttivi principalmente a ulivi e agrumi sparsi che consentono una coltivazione di orti misto ad agroforesta.&lt;br /&gt;
&lt;br /&gt;
L'obbiettivo di ristabilire il legame con la terra non può che iniziare con i bambini e &amp;quot;Altakamul della Rotta dei Baobab&amp;quot; si propone di organizzare orti didattici con altre realtà del territorio tra cui tre asili della provincia di Palermo.&lt;br /&gt;
&lt;br /&gt;
== Ambito territoriale del progetto ==&lt;br /&gt;
* Comunale (specificare) _______________________&lt;br /&gt;
* Provinciale (specificare) _______________________&lt;br /&gt;
* Regionale&lt;br /&gt;
&lt;br /&gt;
== Descrizione del contesto territoriale e delle eventuali problematiche (max 30 righe) ==&lt;br /&gt;
:Descrivere come il progetto si colloca all'interno della realtà territoriale, l'analisi dei bisogni e delle tendenze in atto ecc.&lt;br /&gt;
&lt;br /&gt;
'''RACCONTARE QUI L'ESPERIENZA DI ALTAKAMUL!!!'''&lt;br /&gt;
&lt;br /&gt;
* Piccoli terreni agricoli semiabbandonati in area urbana &lt;br /&gt;
* Nuovi modelli sostenibili&lt;br /&gt;
* Recupero delle tradizioni culturali e sincretismo multiculturale&lt;br /&gt;
* Integrazione e discriminazione&lt;br /&gt;
&lt;br /&gt;
== Obiettivi progettuali (max 20 righe) ==&lt;br /&gt;
:Descrizione dell’obiettivo generale e di quelli specifici del progetto&lt;br /&gt;
&lt;br /&gt;
* Recupero del legame con la terra e di terreni abbandonati &lt;br /&gt;
* Formazione&lt;br /&gt;
* Integrazione&lt;br /&gt;
* ...&lt;br /&gt;
&lt;br /&gt;
== Beneficiari (max 20 righe) ==&lt;br /&gt;
:Identificazione dei beneficiari diretti e indiretti del progetto (tipologia, bisogni, numero previsto, criteri di selezione, partecipazione nella preparazione della proposta, età)&lt;br /&gt;
&lt;br /&gt;
== Adempimenti necessari per l'avvio delle attività progettuali (max 10 righe) ==&lt;br /&gt;
:Disponibilità degli immobili o dei luoghi dove svolgere l'attività, il possesso di autorizzazioni, ecc.&lt;br /&gt;
&lt;br /&gt;
== Partenariato (max 10 righe) ==&lt;br /&gt;
:Indicare le collaborazioni con altri enti eventualmente previste dal progetto&lt;br /&gt;
&lt;br /&gt;
== Sono previste collaborazioni con enti pubblici/privati? ==&lt;br /&gt;
&lt;br /&gt;
* Sì&lt;br /&gt;
* No&lt;br /&gt;
&lt;br /&gt;
=== Se sì specificare: ===&lt;br /&gt;
&lt;br /&gt;
== Innovatività del progetto (max 20 righe) ==&lt;br /&gt;
:Indicare l'innovatività del progetto rispetto agli standard attuali, all'area di riferimento e ai soggetti destinatari dell'intervento&lt;br /&gt;
&lt;br /&gt;
== Contemporaneità del progetto (max 20 righe) ==&lt;br /&gt;
:Indicare l’utilizzo sperimentale delle tecnologie informatiche, di moderni strumenti di linguaggio, diffusione e comunicazione&lt;br /&gt;
&lt;br /&gt;
== Contributo allo sviluppo del territorio (max 20 righe) ==&lt;br /&gt;
:Specificare in che modo il progetto è in grado di contribuire allo sviluppo sociale, economico e territoriale dell'area di riferimento nella quale interviene&lt;br /&gt;
&lt;br /&gt;
== Attività ed azioni del progetto (max 40 righe) ==&lt;br /&gt;
:Descrizione delle fasi del progetto e delle attività che s’intendono realizzare&lt;br /&gt;
&lt;br /&gt;
* Incontro-Settimana / Pajelança &lt;br /&gt;
** Organizzazione calendario&lt;br /&gt;
** Workshop su strumenti digitali (linux basico, wiki, audio-visuale)&lt;br /&gt;
** Workshop ricette stagionali locali&lt;br /&gt;
** Roda de conversa con coltivatori tradizionali locali&lt;br /&gt;
&lt;br /&gt;
* Gestione orto&lt;br /&gt;
** Preparazione culture&lt;br /&gt;
** Manutenzione&lt;br /&gt;
** Raccolta&lt;br /&gt;
&lt;br /&gt;
* Mercato locale&lt;br /&gt;
** Gestione GAS&lt;br /&gt;
** Allestimento&lt;br /&gt;
** Conserve&lt;br /&gt;
&lt;br /&gt;
* Recupero terreni&lt;br /&gt;
** Consulenza e manodopera&lt;br /&gt;
** Coogestione&lt;br /&gt;
** Introduzione al contesto dei km zero&lt;br /&gt;
&lt;br /&gt;
* Documentazione e &lt;br /&gt;
** Video corso collaborativo&lt;br /&gt;
** Wiki&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
* Cene mensili &lt;br /&gt;
** Organizzazione calendario rete di associazioni&lt;br /&gt;
**&lt;br /&gt;
&lt;br /&gt;
== Durata del progetto ==&lt;br /&gt;
Indicare il numero di mesi e il cronoprogramma delle attività&lt;br /&gt;
&lt;br /&gt;
N. mesi:_______&lt;br /&gt;
&lt;br /&gt;
== Fase/attività ==&lt;br /&gt;
* 1&lt;br /&gt;
* 2&lt;br /&gt;
* 3&lt;br /&gt;
* 4&lt;br /&gt;
* 5&lt;br /&gt;
* 6&lt;br /&gt;
* 7&lt;br /&gt;
* 8&lt;br /&gt;
* 9&lt;br /&gt;
* 10&lt;br /&gt;
* 11&lt;br /&gt;
* 12&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Risultati attesi e definizione indicatori (max 30 righe)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Elementi di sostenibilità e di continuità della proposta nel tempo (max 30 righe) Descrizione delle opportunità derivanti dal progetto per la continuità delle azioni dopo la sua conclusione.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
Luogo e data&lt;br /&gt;
&lt;br /&gt;
Firma&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T18:19:51Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django ==&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex get .&lt;br /&gt;
  get zaghawa.jpg (merging amilo/git-annex origin/git-annex into git-annex...)&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  (from amilo...) &lt;br /&gt;
  SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg&lt;br /&gt;
       56356 100%   11.25MB/s    0:00:00 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
  sent 56508 bytes  received 31 bytes  113078.00 bytes/sec&lt;br /&gt;
  total size is 56356  speedup is 1.00&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
*sincronizzazione:-&lt;br /&gt;
Si noti che nell'esempio precedente, si doveva git fetch e unire dal computer portatile prima. Ciò consente git-annex sapere cosa è cambiato nel computer portatile, e quindi conosce i file lì presenti e possono farli.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex sync&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  commit  &lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  ok&lt;br /&gt;
  pull origin &lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   e0231e2..44f655e  git-annex  -&amp;gt; origin/git-annex&lt;br /&gt;
  * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
  ok&lt;br /&gt;
  pull amilo &lt;br /&gt;
  ok&lt;br /&gt;
  push origin &lt;br /&gt;
  Counting objects: 32, done.&lt;br /&gt;
  Delta compression using up to 2 threads.&lt;br /&gt;
  Compressing objects: 100% (18/18), done.&lt;br /&gt;
  Writing objects: 100% (24/24), 2.17 KiB, done.&lt;br /&gt;
  Total 24 (delta 3), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (24/24), done.&lt;br /&gt;
  To /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex -&amp;gt; synced/git-annex&lt;br /&gt;
   * [new branch]      master -&amp;gt; synced/master&lt;br /&gt;
  ok&lt;br /&gt;
  push amilo &lt;br /&gt;
  Everything up-to-date&lt;br /&gt;
  ok&lt;br /&gt;
Dopo l'esecuzione di sincronizzazione, il repository sarà aggiornato con tutte le modifiche apportate ai propri remoto, ed eventuali cambiamenti nel repository sarà spinto fuori per i suoi remoti, dove una sincronizzazione li porterà. Ciò è particolarmente utile quando si usa git in modo distribuito, senza un repository nudo centrale. Vedere sincronizzazione per i dettagli.&lt;br /&gt;
Si noti che la sincronizzazione sincronizza solo i metadati sui file che è memorizzato in git. Non sincronizzare il contenuto dei file, che sono gestiti da git-annex.&lt;br /&gt;
*usando ssh remoto:&lt;br /&gt;
Finora in questa procedura dettagliata, git-annex è stato utilizzato con un repository remoto su un drive USB. Ma può essere utilizzato anche con un remoto git che è veramente remota, un host accessibile da ssh.&lt;br /&gt;
Diciamo che avete un desktop sulla stessa rete del computer portatile e vuole clonare annex del portatile ad esso:&lt;br /&gt;
  $git clone ssh://mio portable/home/musa/Bocs&lt;br /&gt;
  $cd ~/Bocs&lt;br /&gt;
  $git annex init &amp;quot;mio Scrivania&amp;quot;&lt;br /&gt;
Ora è possibile ottenere i file e saranno trasferiti (usando rsync via ssh):&lt;br /&gt;
  $git annex get zaghawa.jpg&lt;br /&gt;
   get my_cool_big_file (getting UUID for origin...) (from origin...)&lt;br /&gt;
   SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg  100% 2159     2.1KB/s   00:00&lt;br /&gt;
  ok&lt;br /&gt;
Quando si elimina file, git-annex volontà ssh verso il remoto e assicurarsi che il contenuto del file è ancora lì prima di rimuoverla a livello locale:&lt;br /&gt;
  git annex drop zaghawa&lt;br /&gt;
  drop zaghawa.jpg (checking origin..) ok&lt;br /&gt;
* spostamento del contenuto di file tra i repository:&lt;br /&gt;
Spesso si vuole spostare alcuni contenuti dei file da un archivio ad un altro uno. Ad esempio, rigido del computer portatile è sempre pieno, il tempo di spostare alcuni file su un disco esterno prima di passare un altro file da un file server al vostro computer portatile. Farlo a mano (usando git annex ottenere e git annex calo) è possibile, ma un po 'di dolore. git annex mossa rende molto facile.&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex move zaghawa.jpg --to usbdrive&lt;br /&gt;
* utilizzando tag e rami:&lt;br /&gt;
Come git, git-annex si blocca su ogni versione di un file (di default), in modo da poter rendere i tag e rami, e può controllare fuori in seguito a guardare i vecchi file.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git tag 1.0&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ rm -f zaghawa.jpg&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git commit -m deleted&lt;br /&gt;
  # On branch master&lt;br /&gt;
  # Changed but not updated:&lt;br /&gt;
  #   (use &amp;quot;git add/rm &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
  #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
  #&lt;br /&gt;
  #	deleted:    zaghawa.jpg&lt;br /&gt;
  #&lt;br /&gt;
  no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git checkout 1.0&lt;br /&gt;
  D	zaghawa.jpg&lt;br /&gt;
  Note: checking out '1.0'.&lt;br /&gt;
  You are in 'detached HEAD' state. You can look around, make experimental&lt;br /&gt;
  changes and commit them, and you can discard any commits you make in this&lt;br /&gt;
  state without impacting any branches by performing another checkout.&lt;br /&gt;
  If you want to create a new branch to retain commits you create, you may&lt;br /&gt;
  do so (now or later) by using -b with the checkout command again. Example:&lt;br /&gt;
  git checkout -b new_branch_name&lt;br /&gt;
  HEAD is now at d18d244... git-annex automatic sync&lt;br /&gt;
Naturalmente, quando si git checkout un vecchio ramo, alcune vecchie versioni di file potrebbero non essere disponibili a livello locale, e possono essere memorizzate in qualche altro repository. È possibile utilizzare git annex arrivare a farli come al solito.&lt;br /&gt;
* gestire automaticamente il contenuto:&lt;br /&gt;
Una volta che si dispone di più repository, e forse avete configurato numcopies, ogni file può avere molte più copie del necessario, o forse meno di quanto avrebbe voluto. Come gestire questo?&lt;br /&gt;
Il whereis sottocomando può essere usato per vedere quante copie di un file sono noti, ma poi si deve decidere cosa prendere o cadere. In questo esempio, non vi sono forse abbastanza copie del primo file, e troppi del secondo file.&lt;br /&gt;
  $cd /media/6FFE-842D/&lt;br /&gt;
  $git annex whereis&lt;br /&gt;
  whereis zaghawa.jgp (2 copies)&lt;br /&gt;
    0c443de8-e644-11df-acbf-f7cd7ca6210d  -- amilo&lt;br /&gt;
    62b39bbe-4149-11e0-af01-bb89245a1e61  -- here (usb drive)&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T18:08:10Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django ==&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex get .&lt;br /&gt;
  get zaghawa.jpg (merging amilo/git-annex origin/git-annex into git-annex...)&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  (from amilo...) &lt;br /&gt;
  SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg&lt;br /&gt;
       56356 100%   11.25MB/s    0:00:00 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
  sent 56508 bytes  received 31 bytes  113078.00 bytes/sec&lt;br /&gt;
  total size is 56356  speedup is 1.00&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
*sincronizzazione:-&lt;br /&gt;
Si noti che nell'esempio precedente, si doveva git fetch e unire dal computer portatile prima. Ciò consente git-annex sapere cosa è cambiato nel computer portatile, e quindi conosce i file lì presenti e possono farli.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex sync&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  commit  &lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  ok&lt;br /&gt;
  pull origin &lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   e0231e2..44f655e  git-annex  -&amp;gt; origin/git-annex&lt;br /&gt;
  * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
  ok&lt;br /&gt;
  pull amilo &lt;br /&gt;
  ok&lt;br /&gt;
  push origin &lt;br /&gt;
  Counting objects: 32, done.&lt;br /&gt;
  Delta compression using up to 2 threads.&lt;br /&gt;
  Compressing objects: 100% (18/18), done.&lt;br /&gt;
  Writing objects: 100% (24/24), 2.17 KiB, done.&lt;br /&gt;
  Total 24 (delta 3), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (24/24), done.&lt;br /&gt;
  To /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex -&amp;gt; synced/git-annex&lt;br /&gt;
   * [new branch]      master -&amp;gt; synced/master&lt;br /&gt;
  ok&lt;br /&gt;
  push amilo &lt;br /&gt;
  Everything up-to-date&lt;br /&gt;
  ok&lt;br /&gt;
Dopo l'esecuzione di sincronizzazione, il repository sarà aggiornato con tutte le modifiche apportate ai propri remoto, ed eventuali cambiamenti nel repository sarà spinto fuori per i suoi remoti, dove una sincronizzazione li porterà. Ciò è particolarmente utile quando si usa git in modo distribuito, senza un repository nudo centrale. Vedere sincronizzazione per i dettagli.&lt;br /&gt;
Si noti che la sincronizzazione sincronizza solo i metadati sui file che è memorizzato in git. Non sincronizzare il contenuto dei file, che sono gestiti da git-annex.&lt;br /&gt;
*usando ssh remoto:&lt;br /&gt;
Finora in questa procedura dettagliata, git-annex è stato utilizzato con un repository remoto su un drive USB. Ma può essere utilizzato anche con un remoto git che è veramente remota, un host accessibile da ssh.&lt;br /&gt;
Diciamo che avete un desktop sulla stessa rete del computer portatile e vuole clonare annex del portatile ad esso:&lt;br /&gt;
  $git clone ssh://mio portable/home/musa/Bocs&lt;br /&gt;
  $cd ~/Bocs&lt;br /&gt;
  $git annex init &amp;quot;mio Scrivania&amp;quot;&lt;br /&gt;
Ora è possibile ottenere i file e saranno trasferiti (usando rsync via ssh):&lt;br /&gt;
  $git annex get zaghawa.jpg&lt;br /&gt;
   get my_cool_big_file (getting UUID for origin...) (from origin...)&lt;br /&gt;
   SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg  100% 2159     2.1KB/s   00:00&lt;br /&gt;
  ok&lt;br /&gt;
Quando si elimina file, git-annex volontà ssh verso il remoto e assicurarsi che il contenuto del file è ancora lì prima di rimuoverla a livello locale:&lt;br /&gt;
  git annex drop zaghawa&lt;br /&gt;
  drop zaghawa.jpg (checking origin..) ok&lt;br /&gt;
* spostamento del contenuto di file tra i repository:&lt;br /&gt;
Spesso si vuole spostare alcuni contenuti dei file da un archivio ad un altro uno. Ad esempio, rigido del computer portatile è sempre pieno, il tempo di spostare alcuni file su un disco esterno prima di passare un altro file da un file server al vostro computer portatile. Farlo a mano (usando git annex ottenere e git annex calo) è possibile, ma un po 'di dolore. git annex mossa rende molto facile.&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex move zaghawa.jpg --to usbdrive&lt;br /&gt;
* utilizzando tag e rami:&lt;br /&gt;
Come git, git-annex si blocca su ogni versione di un file (di default), in modo da poter rendere i tag e rami, e può controllare fuori in seguito a guardare i vecchi file.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git tag 1.0&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ rm -f zaghawa.jpg&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git commit -m deleted&lt;br /&gt;
  # On branch master&lt;br /&gt;
  # Changed but not updated:&lt;br /&gt;
  #   (use &amp;quot;git add/rm &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
  #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
  #&lt;br /&gt;
  #	deleted:    zaghawa.jpg&lt;br /&gt;
  #&lt;br /&gt;
  no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git checkout 1.0&lt;br /&gt;
  D	zaghawa.jpg&lt;br /&gt;
  Note: checking out '1.0'.&lt;br /&gt;
  You are in 'detached HEAD' state. You can look around, make experimental&lt;br /&gt;
  changes and commit them, and you can discard any commits you make in this&lt;br /&gt;
  state without impacting any branches by performing another checkout.&lt;br /&gt;
  If you want to create a new branch to retain commits you create, you may&lt;br /&gt;
  do so (now or later) by using -b with the checkout command again. Example:&lt;br /&gt;
  git checkout -b new_branch_name&lt;br /&gt;
  HEAD is now at d18d244... git-annex automatic sync&lt;br /&gt;
Naturalmente, quando si git checkout un vecchio ramo, alcune vecchie versioni di file potrebbero non essere disponibili a livello locale, e possono essere memorizzate in qualche altro repository. È possibile utilizzare git annex arrivare a farli come al solito.&lt;br /&gt;
* gestire automaticamente il contenuto:&lt;br /&gt;
Con i due comandi rapidi, git-annex è stato in grado di decidere per voi come lavorare verso avere due copie dei file.&lt;br /&gt;
  $cd /media/6FFE-842D/&lt;br /&gt;
  $git annex whereis&lt;br /&gt;
  whereis zaghawa.jgp (2 copies)&lt;br /&gt;
    0c443de8-e644-11df-acbf-f7cd7ca6210d  -- amilo&lt;br /&gt;
    62b39bbe-4149-11e0-af01-bb89245a1e61  -- here (usb drive)&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T17:52:51Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django ==&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex get .&lt;br /&gt;
  get zaghawa.jpg (merging amilo/git-annex origin/git-annex into git-annex...)&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  (from amilo...) &lt;br /&gt;
  SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg&lt;br /&gt;
       56356 100%   11.25MB/s    0:00:00 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
  sent 56508 bytes  received 31 bytes  113078.00 bytes/sec&lt;br /&gt;
  total size is 56356  speedup is 1.00&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
*sincronizzazione:-&lt;br /&gt;
Si noti che nell'esempio precedente, si doveva git fetch e unire dal computer portatile prima. Ciò consente git-annex sapere cosa è cambiato nel computer portatile, e quindi conosce i file lì presenti e possono farli.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex sync&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  commit  &lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  ok&lt;br /&gt;
  pull origin &lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   e0231e2..44f655e  git-annex  -&amp;gt; origin/git-annex&lt;br /&gt;
  * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
  ok&lt;br /&gt;
  pull amilo &lt;br /&gt;
  ok&lt;br /&gt;
  push origin &lt;br /&gt;
  Counting objects: 32, done.&lt;br /&gt;
  Delta compression using up to 2 threads.&lt;br /&gt;
  Compressing objects: 100% (18/18), done.&lt;br /&gt;
  Writing objects: 100% (24/24), 2.17 KiB, done.&lt;br /&gt;
  Total 24 (delta 3), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (24/24), done.&lt;br /&gt;
  To /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex -&amp;gt; synced/git-annex&lt;br /&gt;
   * [new branch]      master -&amp;gt; synced/master&lt;br /&gt;
  ok&lt;br /&gt;
  push amilo &lt;br /&gt;
  Everything up-to-date&lt;br /&gt;
  ok&lt;br /&gt;
Dopo l'esecuzione di sincronizzazione, il repository sarà aggiornato con tutte le modifiche apportate ai propri remoto, ed eventuali cambiamenti nel repository sarà spinto fuori per i suoi remoti, dove una sincronizzazione li porterà. Ciò è particolarmente utile quando si usa git in modo distribuito, senza un repository nudo centrale. Vedere sincronizzazione per i dettagli.&lt;br /&gt;
Si noti che la sincronizzazione sincronizza solo i metadati sui file che è memorizzato in git. Non sincronizzare il contenuto dei file, che sono gestiti da git-annex.&lt;br /&gt;
*usando ssh remoto:&lt;br /&gt;
Finora in questa procedura dettagliata, git-annex è stato utilizzato con un repository remoto su un drive USB. Ma può essere utilizzato anche con un remoto git che è veramente remota, un host accessibile da ssh.&lt;br /&gt;
Diciamo che avete un desktop sulla stessa rete del computer portatile e vuole clonare annex del portatile ad esso:&lt;br /&gt;
  $git clone ssh://mio portable/home/musa/Bocs&lt;br /&gt;
  $cd ~/Bocs&lt;br /&gt;
  $git annex init &amp;quot;mio Scrivania&amp;quot;&lt;br /&gt;
Ora è possibile ottenere i file e saranno trasferiti (usando rsync via ssh):&lt;br /&gt;
  $git annex get zaghawa.jpg&lt;br /&gt;
   get my_cool_big_file (getting UUID for origin...) (from origin...)&lt;br /&gt;
   SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg  100% 2159     2.1KB/s   00:00&lt;br /&gt;
  ok&lt;br /&gt;
Quando si elimina file, git-annex volontà ssh verso il remoto e assicurarsi che il contenuto del file è ancora lì prima di rimuoverla a livello locale:&lt;br /&gt;
  git annex drop zaghawa&lt;br /&gt;
  drop zaghawa.jpg (checking origin..) ok&lt;br /&gt;
* spostamento del contenuto di file tra i repository:&lt;br /&gt;
Spesso si vuole spostare alcuni contenuti dei file da un archivio ad un altro uno. Ad esempio, rigido del computer portatile è sempre pieno, il tempo di spostare alcuni file su un disco esterno prima di passare un altro file da un file server al vostro computer portatile. Farlo a mano (usando git annex ottenere e git annex calo) è possibile, ma un po 'di dolore. git annex mossa rende molto facile.&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex move zaghawa.jpg --to usbdrive&lt;br /&gt;
* utilizzando tag e rami:&lt;br /&gt;
Come git, git-annex si blocca su ogni versione di un file (di default), in modo da poter rendere i tag e rami, e può controllare fuori in seguito a guardare i vecchi file.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git tag 1.0&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ rm -f zaghawa.jpg&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git commit -m deleted&lt;br /&gt;
  # On branch master&lt;br /&gt;
  # Changed but not updated:&lt;br /&gt;
  #   (use &amp;quot;git add/rm &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
  #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
  #&lt;br /&gt;
  #	deleted:    zaghawa.jpg&lt;br /&gt;
  #&lt;br /&gt;
  no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git checkout 1.0&lt;br /&gt;
  D	zaghawa.jpg&lt;br /&gt;
  Note: checking out '1.0'.&lt;br /&gt;
  You are in 'detached HEAD' state. You can look around, make experimental&lt;br /&gt;
  changes and commit them, and you can discard any commits you make in this&lt;br /&gt;
  state without impacting any branches by performing another checkout.&lt;br /&gt;
  If you want to create a new branch to retain commits you create, you may&lt;br /&gt;
  do so (now or later) by using -b with the checkout command again. Example:&lt;br /&gt;
  git checkout -b new_branch_name&lt;br /&gt;
  HEAD is now at d18d244... git-annex automatic sync&lt;br /&gt;
Naturalmente, quando si git checkout un vecchio ramo, alcune vecchie versioni di file potrebbero non essere disponibili a livello locale, e possono essere memorizzate in qualche altro repository. È possibile utilizzare git annex arrivare a farli come al solito.&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T17:46:24Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Django ==&lt;br /&gt;
&lt;br /&gt;
== Python ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex get .&lt;br /&gt;
  get zaghawa.jpg (merging amilo/git-annex origin/git-annex into git-annex...)&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  (from amilo...) &lt;br /&gt;
  SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg&lt;br /&gt;
       56356 100%   11.25MB/s    0:00:00 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
  sent 56508 bytes  received 31 bytes  113078.00 bytes/sec&lt;br /&gt;
  total size is 56356  speedup is 1.00&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
*sincronizzazione:-&lt;br /&gt;
Si noti che nell'esempio precedente, si doveva git fetch e unire dal computer portatile prima. Ciò consente git-annex sapere cosa è cambiato nel computer portatile, e quindi conosce i file lì presenti e possono farli.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex sync&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  commit  &lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  ok&lt;br /&gt;
  pull origin &lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   e0231e2..44f655e  git-annex  -&amp;gt; origin/git-annex&lt;br /&gt;
  * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
  ok&lt;br /&gt;
  pull amilo &lt;br /&gt;
  ok&lt;br /&gt;
  push origin &lt;br /&gt;
  Counting objects: 32, done.&lt;br /&gt;
  Delta compression using up to 2 threads.&lt;br /&gt;
  Compressing objects: 100% (18/18), done.&lt;br /&gt;
  Writing objects: 100% (24/24), 2.17 KiB, done.&lt;br /&gt;
  Total 24 (delta 3), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (24/24), done.&lt;br /&gt;
  To /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex -&amp;gt; synced/git-annex&lt;br /&gt;
   * [new branch]      master -&amp;gt; synced/master&lt;br /&gt;
  ok&lt;br /&gt;
  push amilo &lt;br /&gt;
  Everything up-to-date&lt;br /&gt;
  ok&lt;br /&gt;
Dopo l'esecuzione di sincronizzazione, il repository sarà aggiornato con tutte le modifiche apportate ai propri remoto, ed eventuali cambiamenti nel repository sarà spinto fuori per i suoi remoti, dove una sincronizzazione li porterà. Ciò è particolarmente utile quando si usa git in modo distribuito, senza un repository nudo centrale. Vedere sincronizzazione per i dettagli.&lt;br /&gt;
Si noti che la sincronizzazione sincronizza solo i metadati sui file che è memorizzato in git. Non sincronizzare il contenuto dei file, che sono gestiti da git-annex.&lt;br /&gt;
*usando ssh remoto:&lt;br /&gt;
Finora in questa procedura dettagliata, git-annex è stato utilizzato con un repository remoto su un drive USB. Ma può essere utilizzato anche con un remoto git che è veramente remota, un host accessibile da ssh.&lt;br /&gt;
Diciamo che avete un desktop sulla stessa rete del computer portatile e vuole clonare annex del portatile ad esso:&lt;br /&gt;
  $git clone ssh://mio portable/home/musa/Bocs&lt;br /&gt;
  $cd ~/Bocs&lt;br /&gt;
  $git annex init &amp;quot;mio Scrivania&amp;quot;&lt;br /&gt;
Ora è possibile ottenere i file e saranno trasferiti (usando rsync via ssh):&lt;br /&gt;
  $git annex get zaghawa.jpg&lt;br /&gt;
   get my_cool_big_file (getting UUID for origin...) (from origin...)&lt;br /&gt;
   SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg  100% 2159     2.1KB/s   00:00&lt;br /&gt;
  ok&lt;br /&gt;
Quando si elimina file, git-annex volontà ssh verso il remoto e assicurarsi che il contenuto del file è ancora lì prima di rimuoverla a livello locale:&lt;br /&gt;
  git annex drop zaghawa&lt;br /&gt;
  drop zaghawa.jpg (checking origin..) ok&lt;br /&gt;
* spostamento del contenuto di file tra i repository:&lt;br /&gt;
Spesso si vuole spostare alcuni contenuti dei file da un archivio ad un altro uno. Ad esempio, rigido del computer portatile è sempre pieno, il tempo di spostare alcuni file su un disco esterno prima di passare un altro file da un file server al vostro computer portatile. Farlo a mano (usando git annex ottenere e git annex calo) è possibile, ma un po 'di dolore. git annex mossa rende molto facile.&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex move zaghawa.jpg --to usbdrive&lt;br /&gt;
* utilizzando tag e rami:&lt;br /&gt;
Come git, git-annex si blocca su ogni versione di un file (di default), in modo da poter rendere i tag e rami, e può controllare fuori in seguito a guardare i vecchi file.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git tag 1.0&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ rm -f zaghawa.jpg&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git commit -m deleted&lt;br /&gt;
  # On branch master&lt;br /&gt;
  # Changed but not updated:&lt;br /&gt;
  #   (use &amp;quot;git add/rm &amp;lt;file&amp;gt;...&amp;quot; to update what will be committed)&lt;br /&gt;
  #   (use &amp;quot;git checkout -- &amp;lt;file&amp;gt;...&amp;quot; to discard changes in working directory)&lt;br /&gt;
  #&lt;br /&gt;
  #	deleted:    zaghawa.jpg&lt;br /&gt;
  #&lt;br /&gt;
  no changes added to commit (use &amp;quot;git add&amp;quot; and/or &amp;quot;git commit -a&amp;quot;)&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git checkout 1.0&lt;br /&gt;
  D	zaghawa.jpg&lt;br /&gt;
  Note: checking out '1.0'.&lt;br /&gt;
  You are in 'detached HEAD' state. You can look around, make experimental&lt;br /&gt;
  changes and commit them, and you can discard any commits you make in this&lt;br /&gt;
  state without impacting any branches by performing another checkout.&lt;br /&gt;
  If you want to create a new branch to retain commits you create, you may&lt;br /&gt;
  do so (now or later) by using -b with the checkout command again. Example:&lt;br /&gt;
  git checkout -b new_branch_name&lt;br /&gt;
  HEAD is now at d18d244... git-annex automatic sync&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T16:23:35Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex get .&lt;br /&gt;
  get zaghawa.jpg (merging amilo/git-annex origin/git-annex into git-annex...)&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  (from amilo...) &lt;br /&gt;
  SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg&lt;br /&gt;
       56356 100%   11.25MB/s    0:00:00 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
  sent 56508 bytes  received 31 bytes  113078.00 bytes/sec&lt;br /&gt;
  total size is 56356  speedup is 1.00&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
*sincronizzazione:-&lt;br /&gt;
Si noti che nell'esempio precedente, si doveva git fetch e unire dal computer portatile prima. Ciò consente git-annex sapere cosa è cambiato nel computer portatile, e quindi conosce i file lì presenti e possono farli.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex sync&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  commit  &lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  ok&lt;br /&gt;
  pull origin &lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   e0231e2..44f655e  git-annex  -&amp;gt; origin/git-annex&lt;br /&gt;
  * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
  ok&lt;br /&gt;
  pull amilo &lt;br /&gt;
  ok&lt;br /&gt;
  push origin &lt;br /&gt;
  Counting objects: 32, done.&lt;br /&gt;
  Delta compression using up to 2 threads.&lt;br /&gt;
  Compressing objects: 100% (18/18), done.&lt;br /&gt;
  Writing objects: 100% (24/24), 2.17 KiB, done.&lt;br /&gt;
  Total 24 (delta 3), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (24/24), done.&lt;br /&gt;
  To /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex -&amp;gt; synced/git-annex&lt;br /&gt;
   * [new branch]      master -&amp;gt; synced/master&lt;br /&gt;
  ok&lt;br /&gt;
  push amilo &lt;br /&gt;
  Everything up-to-date&lt;br /&gt;
  ok&lt;br /&gt;
Dopo l'esecuzione di sincronizzazione, il repository sarà aggiornato con tutte le modifiche apportate ai propri remoto, ed eventuali cambiamenti nel repository sarà spinto fuori per i suoi remoti, dove una sincronizzazione li porterà. Ciò è particolarmente utile quando si usa git in modo distribuito, senza un repository nudo centrale. Vedere sincronizzazione per i dettagli.&lt;br /&gt;
Si noti che la sincronizzazione sincronizza solo i metadati sui file che è memorizzato in git. Non sincronizzare il contenuto dei file, che sono gestiti da git-annex.&lt;br /&gt;
*usando ssh remoto:&lt;br /&gt;
Finora in questa procedura dettagliata, git-annex è stato utilizzato con un repository remoto su un drive USB. Ma può essere utilizzato anche con un remoto git che è veramente remota, un host accessibile da ssh.&lt;br /&gt;
Diciamo che avete un desktop sulla stessa rete del computer portatile e vuole clonare annex del portatile ad esso:&lt;br /&gt;
  $git clone ssh://mio portable/home/musa/Bocs&lt;br /&gt;
  $cd ~/Bocs&lt;br /&gt;
  $git annex init &amp;quot;mio Scrivania&amp;quot;&lt;br /&gt;
Ora è possibile ottenere i file e saranno trasferiti (usando rsync via ssh):&lt;br /&gt;
  $git annex get zaghawa.jpg&lt;br /&gt;
   get my_cool_big_file (getting UUID for origin...) (from origin...)&lt;br /&gt;
   SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg  100% 2159     2.1KB/s   00:00&lt;br /&gt;
  ok&lt;br /&gt;
Quando si elimina file, git-annex volontà ssh verso il remoto e assicurarsi che il contenuto del file è ancora lì prima di rimuoverla a livello locale:&lt;br /&gt;
  git annex drop zaghawa&lt;br /&gt;
  drop zaghawa.jpg (checking origin..) ok&lt;br /&gt;
* spostamento del contenuto di file tra i repository:&lt;br /&gt;
Spesso si vuole spostare alcuni contenuti dei file da un archivio ad un altro uno. Ad esempio, rigido del computer portatile è sempre pieno, il tempo di spostare alcuni file su un disco esterno prima di passare un altro file da un file server al vostro computer portatile. Farlo a mano (usando git annex ottenere e git annex calo) è possibile, ma un po 'di dolore. git annex mossa rende molto facile.&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T16:15:12Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex get .&lt;br /&gt;
  get zaghawa.jpg (merging amilo/git-annex origin/git-annex into git-annex...)&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  (from amilo...) &lt;br /&gt;
  SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg&lt;br /&gt;
       56356 100%   11.25MB/s    0:00:00 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
  sent 56508 bytes  received 31 bytes  113078.00 bytes/sec&lt;br /&gt;
  total size is 56356  speedup is 1.00&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
*sincronizzazione:-&lt;br /&gt;
Si noti che nell'esempio precedente, si doveva git fetch e unire dal computer portatile prima. Ciò consente git-annex sapere cosa è cambiato nel computer portatile, e quindi conosce i file lì presenti e possono farli.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex sync&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  commit  &lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  ok&lt;br /&gt;
  pull origin &lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   e0231e2..44f655e  git-annex  -&amp;gt; origin/git-annex&lt;br /&gt;
  * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
  ok&lt;br /&gt;
  pull amilo &lt;br /&gt;
  ok&lt;br /&gt;
  push origin &lt;br /&gt;
  Counting objects: 32, done.&lt;br /&gt;
  Delta compression using up to 2 threads.&lt;br /&gt;
  Compressing objects: 100% (18/18), done.&lt;br /&gt;
  Writing objects: 100% (24/24), 2.17 KiB, done.&lt;br /&gt;
  Total 24 (delta 3), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (24/24), done.&lt;br /&gt;
  To /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex -&amp;gt; synced/git-annex&lt;br /&gt;
   * [new branch]      master -&amp;gt; synced/master&lt;br /&gt;
  ok&lt;br /&gt;
  push amilo &lt;br /&gt;
  Everything up-to-date&lt;br /&gt;
  ok&lt;br /&gt;
Dopo l'esecuzione di sincronizzazione, il repository sarà aggiornato con tutte le modifiche apportate ai propri remoto, ed eventuali cambiamenti nel repository sarà spinto fuori per i suoi remoti, dove una sincronizzazione li porterà. Ciò è particolarmente utile quando si usa git in modo distribuito, senza un repository nudo centrale. Vedere sincronizzazione per i dettagli.&lt;br /&gt;
Si noti che la sincronizzazione sincronizza solo i metadati sui file che è memorizzato in git. Non sincronizzare il contenuto dei file, che sono gestiti da git-annex.&lt;br /&gt;
*usando ssh remoto:&lt;br /&gt;
Finora in questa procedura dettagliata, git-annex è stato utilizzato con un repository remoto su un drive USB. Ma può essere utilizzato anche con un remoto git che è veramente remota, un host accessibile da ssh.&lt;br /&gt;
Diciamo che avete un desktop sulla stessa rete del computer portatile e vuole clonare annex del portatile ad esso:&lt;br /&gt;
  $git clone ssh://mio portable/home/musa/Bocs&lt;br /&gt;
  $cd ~/Bocs&lt;br /&gt;
  $git annex init &amp;quot;mio Scrivania&amp;quot;&lt;br /&gt;
Ora è possibile ottenere i file e saranno trasferiti (usando rsync via ssh):&lt;br /&gt;
  $git annex get zaghawa.jpg&lt;br /&gt;
   get my_cool_big_file (getting UUID for origin...) (from origin...)&lt;br /&gt;
   SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg  100% 2159     2.1KB/s   00:00&lt;br /&gt;
  ok&lt;br /&gt;
Quando si elimina file, git-annex volontà ssh verso il remoto e assicurarsi che il contenuto del file è ancora lì prima di rimuoverla a livello locale:&lt;br /&gt;
  git annex drop zaghawa&lt;br /&gt;
  drop zaghawa.jpg (checking origin..) ok&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T16:03:20Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex get .&lt;br /&gt;
  get zaghawa.jpg (merging amilo/git-annex origin/git-annex into git-annex...)&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  (from amilo...) &lt;br /&gt;
  SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg&lt;br /&gt;
       56356 100%   11.25MB/s    0:00:00 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
  sent 56508 bytes  received 31 bytes  113078.00 bytes/sec&lt;br /&gt;
  total size is 56356  speedup is 1.00&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
*sincronizzazione:-&lt;br /&gt;
Si noti che nell'esempio precedente, si doveva git fetch e unire dal computer portatile prima. Ciò consente git-annex sapere cosa è cambiato nel computer portatile, e quindi conosce i file lì presenti e possono farli.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex sync&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  commit  &lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  ok&lt;br /&gt;
  pull origin &lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   e0231e2..44f655e  git-annex  -&amp;gt; origin/git-annex&lt;br /&gt;
  * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
  ok&lt;br /&gt;
  pull amilo &lt;br /&gt;
  ok&lt;br /&gt;
  push origin &lt;br /&gt;
  Counting objects: 32, done.&lt;br /&gt;
  Delta compression using up to 2 threads.&lt;br /&gt;
  Compressing objects: 100% (18/18), done.&lt;br /&gt;
  Writing objects: 100% (24/24), 2.17 KiB, done.&lt;br /&gt;
  Total 24 (delta 3), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (24/24), done.&lt;br /&gt;
  To /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex -&amp;gt; synced/git-annex&lt;br /&gt;
   * [new branch]      master -&amp;gt; synced/master&lt;br /&gt;
  ok&lt;br /&gt;
  push amilo &lt;br /&gt;
  Everything up-to-date&lt;br /&gt;
  ok&lt;br /&gt;
Dopo l'esecuzione di sincronizzazione, il repository sarà aggiornato con tutte le modifiche apportate ai propri remoto, ed eventuali cambiamenti nel repository sarà spinto fuori per i suoi remoti, dove una sincronizzazione li porterà. Ciò è particolarmente utile quando si usa git in modo distribuito, senza un repository nudo centrale. Vedere sincronizzazione per i dettagli.&lt;br /&gt;
Si noti che la sincronizzazione sincronizza solo i metadati sui file che è memorizzato in git. Non sincronizzare il contenuto dei file, che sono gestiti da git-annex.&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T16:01:24Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex get .&lt;br /&gt;
  get zaghawa.jpg (merging amilo/git-annex origin/git-annex into git-annex...)&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  (from amilo...) &lt;br /&gt;
  SHA256E-s56356--f4012fc17b574a5935e95219e9ec783deb401a70619c4c336c6dc71d0785b8a7.jpg&lt;br /&gt;
       56356 100%   11.25MB/s    0:00:00 (xfer#1, to-check=0/1)&lt;br /&gt;
&lt;br /&gt;
  sent 56508 bytes  received 31 bytes  113078.00 bytes/sec&lt;br /&gt;
  total size is 56356  speedup is 1.00&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
*sincronizzazione:-&lt;br /&gt;
Si noti che nell'esempio precedente, si doveva git fetch e unire dal computer portatile prima. Ciò consente git-annex sapere cosa è cambiato nel computer portatile, e quindi conosce i file lì presenti e possono farli.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex sync&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  commit  &lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  ok&lt;br /&gt;
  pull origin &lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   e0231e2..44f655e  git-annex  -&amp;gt; origin/git-annex&lt;br /&gt;
  * [new branch]      master     -&amp;gt; origin/master&lt;br /&gt;
  ok&lt;br /&gt;
  pull amilo &lt;br /&gt;
  ok&lt;br /&gt;
  push origin &lt;br /&gt;
  Counting objects: 32, done.&lt;br /&gt;
  Delta compression using up to 2 threads.&lt;br /&gt;
  Compressing objects: 100% (18/18), done.&lt;br /&gt;
  Writing objects: 100% (24/24), 2.17 KiB, done.&lt;br /&gt;
  Total 24 (delta 3), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (24/24), done.&lt;br /&gt;
  To /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex -&amp;gt; synced/git-annex&lt;br /&gt;
   * [new branch]      master -&amp;gt; synced/master&lt;br /&gt;
  ok&lt;br /&gt;
  push amilo &lt;br /&gt;
  Everything up-to-date&lt;br /&gt;
  ok&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:54:19Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;br /&gt;
Un repository non ha sempre tutto il contenuto del file annex disponibile. Quando è necessario il contenuto di un file, è possibile usare &amp;quot;git annex ottenere&amp;quot; per renderlo disponibile.&lt;br /&gt;
Possiamo usare questo per copiare tutto nella dependance del computer portatile per il drive USB.&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git fetch amilo; git merge amilo/master&lt;br /&gt;
  remote: Counting objects: 9, done.&lt;br /&gt;
  remote: Compressing objects: 100% (6/6), done.&lt;br /&gt;
  remote: Total 8 (delta 0), reused 0 (delta 0)&lt;br /&gt;
  Unpacking objects: 100% (8/8), done.&lt;br /&gt;
  From /home/musa/Bocs&lt;br /&gt;
   * [new branch]      git-annex  -&amp;gt; amilo/git-annex&lt;br /&gt;
   * [new branch]      master     -&amp;gt; amilo/master&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:50:33Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
Quando si aggiunge un file alla annex e commit, solo un link simbolico per il contenuto annex si impegna. Il contenuto stesso è memorizzato nel backend git-annex.&lt;br /&gt;
* ottenere il contenuto del file:&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:49:19Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex add .&lt;br /&gt;
  add zaghawa.jpg (checksum...) ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
  musa@amilo:~/Bocs$ git commit -a -m added&lt;br /&gt;
   [master (root-commit) d94ecb8] added&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
  create mode 120000 zaghawa.jpg&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
* ottenere il contenuto del file:&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:46:30Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
*aggiuntiamo un file nel directory Bocs al computer portatile amilo:&lt;br /&gt;
  musa@amilo:~/Bocs$ cp /home/musa/zaghawa.jpg zaghawa.jpg&lt;br /&gt;
* ottenere il contenuto del file:&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:38:12Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
&lt;br /&gt;
per aggiunger usb drive remoto con computer portatile amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
aggiungere computer portatile amilo remoto con il drive USB&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;br /&gt;
* ottenere il contenuto del file:&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:31:39Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
per aggiunger usb drive remoto con portable amilo&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git remote add amilo ~/Bocs&lt;br /&gt;
anche aggiungere amilo con usb drive &lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ cd ~/Bocs&lt;br /&gt;
  musa@amilo:~/Bocs$ git remote add usbdrive /media/6FFE-842D/Bocs&lt;br /&gt;
Tutto questo è la configurazione standard di repository ad hoc distribuito git. L'unica git-annex specifica parte sta dicendo che il nome del nuovo repository creato sul drive USB.&lt;br /&gt;
Si noti che entrambi i pronti contro termine sono impostati come remoto l'uno dell'altro. Ciò consente di ottenere sia annex file dall'altro. Avrai voglia di farlo, anche se si sta usando git in modo più centralizzato.&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:23:25Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel directory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D/Bocs$ git annex init &amp;quot;portable USB drive&amp;quot;&lt;br /&gt;
  init portable USB drive &lt;br /&gt;
  Detected a crippled filesystem.&lt;br /&gt;
  Enabling direct mode.&lt;br /&gt;
  Detected a filesystem without fifo support.&lt;br /&gt;
  Disabling ssh connection caching.&lt;br /&gt;
  ok&lt;br /&gt;
  (Recording state in git...)&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:20:41Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;br /&gt;
spostare nel dirctory Bocs &lt;br /&gt;
  musa@amilo:/media/6FFE-842D$cd Bocs&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:13:24Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;br /&gt;
clonare nostro directory con comando git clone  ~/Bocs&lt;br /&gt;
  musa@amilo:/media/6FFE-842D$ git clone ~/Bocs&lt;br /&gt;
  Initialized empty Git repository in /media/6FFE-842D/Bocs/.git/&lt;br /&gt;
  warning: remote HEAD refers to nonexistent ref, unable to checkout.&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:08:27Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
per spostarlo nel usb drive con il commando  cd /media/nome usb drive&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:04:54Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato, può installarlo con il commando sudo/mount/media/nome usb drive. &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:03:02Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
se il tuo drive usb non installato  &lt;br /&gt;
  musa@amilo:/$sudo mount /media/6FFE-842D&lt;br /&gt;
  musa@amilo:/$cd /media/6FFE-842D&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T15:00:22Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungere un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
  musa@amilo:/$ cd /media/6FFE-842D&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:59:52Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;br /&gt;
* aggiungendo un remoto:&lt;br /&gt;
Come qualsiasi altro repository git, git-annex repository hanno remoto. Cominciamo con l'aggiunta di un drive USB come un remoto.&lt;br /&gt;
  musa@amilo:/$ cd /media/6FFE-842D&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:55:28Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:55:03Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* Creazione di un repository&lt;br /&gt;
 Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:54:00Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;br /&gt;
* creazione di un repository&lt;br /&gt;
Questo è molto semplice. Basta dire che una descrizione del repository.&lt;br /&gt;
  musa@amilo:~$ mkdir Bocs&lt;br /&gt;
  musa@amilo:~$ cd Bocs/&lt;br /&gt;
  musa@amilo:~/Bocs$ git init &lt;br /&gt;
  Initialized empty Git repository in /home/musa/Bocs/.git/&lt;br /&gt;
  musa@amilo:~/Bocs$ git annex init &amp;quot;amilo&amp;quot;&lt;br /&gt;
  init amilo ok&lt;br /&gt;
  (Recording state in git...)&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:49:59Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
ecco come fare per arrivare dal nulla per il monitoraggio di un file con git-annex:&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:47:44Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:46:57Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;=== Git ===&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:46:37Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:46:20Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git-annex */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git ==&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:45:36Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Gentoo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:44:56Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Ubuntu */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:44:28Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Come usare un wiki */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:43:54Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Debian */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
=== Debian ===&lt;br /&gt;
&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:42:54Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Prossimo Utilizzando git per la collaborazione */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
* Prossimo Utilizzando git per la collaborazione&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:42:28Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Eliminare un ramo */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
* Eliminare un ramo&lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:41:23Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Merge */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
* Merge&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:40:47Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Creare un Repository Vuoto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
* Creare un Repository Vuoto&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:40:15Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git Branches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
* Git Branches&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:38:50Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Django */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:38:09Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git Branches */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Django ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:37:19Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Ottenere Aiuto */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Django ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
* Ottenere Aiuto&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:36:50Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Controllare le Impostazioni */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Django ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
* Controllare le Impostazioni&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
&lt;br /&gt;
== Ottenere Aiuto ==&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:36:19Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Il Proprio Diff */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Django ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Diff&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
&lt;br /&gt;
== Controllare le Impostazioni ==&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
== Ottenere Aiuto ==&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:35:47Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Il Proprio Editor */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Django ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
* Il Proprio Editor&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
&lt;br /&gt;
== Il Proprio Diff ==&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
== Controllare le Impostazioni ==&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
== Ottenere Aiuto ==&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:35:09Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* La Propria Identità */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Django ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
* La Propria Identità&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
&lt;br /&gt;
== Il Proprio Editor ==&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
== Il Proprio Diff ==&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
== Controllare le Impostazioni ==&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
== Ottenere Aiuto ==&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:33:53Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Prima Configurazione di git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Django ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
* Prima Configurazione di git &lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
&lt;br /&gt;
== La Propria Identità ==&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
== Il Proprio Editor ==&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
== Il Proprio Diff ==&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
== Controllare le Impostazioni ==&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
== Ottenere Aiuto ==&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:32:40Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* Git */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Django ==&lt;br /&gt;
&lt;br /&gt;
== Prima Configurazione di git ==&lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
== La Propria Identità ==&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
== Il Proprio Editor ==&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
== Il Proprio Diff ==&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
== Controllare le Impostazioni ==&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
== Ottenere Aiuto ==&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	<entry>
		<id>https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa</id>
		<title>Usuário:Musa</title>
		<link rel="alternate" type="text/html" href="https://wiki.mocambos.net/index.php/Usu%C3%A1rio:Musa"/>
				<updated>2013-08-09T14:31:31Z</updated>
		
		<summary type="html">&lt;p&gt;Musa: /* storia */&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;== Come usare un wiki ==&lt;br /&gt;
=== Sintassi di base ===&lt;br /&gt;
== Debian ==&lt;br /&gt;
== Ubuntu ==&lt;br /&gt;
== Gentoo ==&lt;br /&gt;
== Git ==&lt;br /&gt;
== Git-annex ==&lt;br /&gt;
git-annex/&lt;br /&gt;
git-annex è grande. Si tratta di una estensione a git che permette di gestire i file con git senza peraltro riuscire a check-in git-annex fa sostituendo ogni file con un link simbolico che punta al reale contenuto nella directory git / annex (dal nome di un checksum del file di contenuti). Solo il collegamento simbolico viene controllato in git.&lt;br /&gt;
&lt;br /&gt;
== Django ==&lt;br /&gt;
&lt;br /&gt;
== Git ==&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* Git&lt;br /&gt;
GIT è un sistema di controllo di versione distribuito il quale software viene rilasciato in maniera open source. Ma cosa significa? Significa che tramite git è possibile tenere traccia delle modifiche effettuate su un insieme di file. Modifiche ai singoli file, aggiunte e cancellazione di file vengono memorizzate in uno storico. E' possibile lavorare in più persone sugli stessi file, o su una loro copia (clonatura) e poi fondere le modifiche tramite un sistema che aiuta nella soluzione di eventuali conflitti.&lt;br /&gt;
L’idea di fondo è avere macchine in comunicazione tra loro in maniera distribuita, non c’è un server che si interfaccia con un client.&lt;br /&gt;
E’ possibile realizzare due tipi di repository: locale o remoto (GitHub o Bitbucket), entrambe le possibilità verranno delineate negli articoli successivi, oggi mi soffermo sulle basi per acquisire padronanza con questo meraviglioso sistema.&lt;br /&gt;
* storia&lt;br /&gt;
Git è stato creato nel 2005 da Linus Torvalds, l'inventore del sistema operativo Linux. Inizialmente è stato creato per la scarsa capacità di progetti datati come CVS e Subversion nel gestire grossi progetti come quello del Kernel di Linux e per problemi di diritti con il software proprietario utilizzato fino ad allora, chiamato BitKeeper.&lt;br /&gt;
&lt;br /&gt;
== Prima Configurazione di git ==&lt;br /&gt;
Prima di utilizzare Git bisogna attuare alcune configurazioni basilari: &lt;br /&gt;
Inserire l’utente è fondamentale per fare in modo che i commit non escano con nomi casuali e irriconoscibili.&lt;br /&gt;
== La Propria Identità ==&lt;br /&gt;
La prima cosa che occorrerebbe fare, quando si installa Git, è impostare il proprio nome utente e indirizzo e-mail. Ciò è importante, perché ogni commit di Git usa queste informazioni, che vengono incapsulate nei commit che si fanno:&lt;br /&gt;
  $ git config --global user.name &amp;quot;musa jedo&amp;quot;&lt;br /&gt;
  $ git config --global user.email musajedo@example.com&lt;br /&gt;
== Il Proprio Editor ==&lt;br /&gt;
Ora che è configurata la propria identità, si può configurare l'editor di testo predefinito, da usare quando Git avrà bisogno di inserire un messaggio. Per impostazione predefinita, Git usa l'editor di testo predefinito del sistema, che generalmente è Vi o Vim. Se vuoi usare un editor di testo differente, come Emacs, puoi fare come segue:&lt;br /&gt;
  $git config --global core.editor emacs&lt;br /&gt;
== Il Proprio Diff ==&lt;br /&gt;
Un'altra utile opzione, che si potrebbe voler configurare, è lo strumento diff, predefinito, da usare per risolvere i conflitti di merge (fusione, ndt). Per usare vimdiff:&lt;br /&gt;
  $git config --global merge.tool vimdiff&lt;br /&gt;
== Controllare le Impostazioni ==&lt;br /&gt;
Per controllare le proprie impostazioni, si può usare il comando git config --list, che elenca tutte le impostazioni di Git, fatte fino a questo punto:&lt;br /&gt;
  musa@amilo:~/mocambos$ git config --list&lt;br /&gt;
  user.email=musajedo@example.com&lt;br /&gt;
  user.name=Musa&lt;br /&gt;
  core.editor=emancs&lt;br /&gt;
  core.repositoryformatversion=0&lt;br /&gt;
  core.filemode=true&lt;br /&gt;
  core.bare=false&lt;br /&gt;
  core.logallrefupdates=true&lt;br /&gt;
La stessa chiave può comparire più volte, perché Git legge la stessa chiave da file differenti (/etc/gitconfig e ~/.gitconfig, per esempio). In questo caso, Git usa l'ultimo valore per ogni chiave unica che vede.&lt;br /&gt;
Per controllare quale sia il valore di una chiave, ritenuto da Git usare, git config {key}:&lt;br /&gt;
  $ git config user.name&lt;br /&gt;
  musa jedo&lt;br /&gt;
== Ottenere Aiuto ==&lt;br /&gt;
Questi comandi sono utili, perché puoi accedere ad essi da ogni dove, anche se sei offline. Se il manuale e questo libro non sono sufficienti e hai bisogno di un aiuto più diretto da una persona, puoi provare i canali #git o #github, sul server IRC di Freenode (irc.freenode.com). Questi canali sono regolarmente frequentati da centinaia di persone che conoscono molto bene Git e saranno davvero felici di aiutarti.&lt;br /&gt;
Se dovessi avere bisogno di aiuto durante l'uso di Git, ci sono tre modi per vedere le pagine del manuale di aiuto per ogni comando di Git:&lt;br /&gt;
  $ git help &lt;br /&gt;
  $ git --help&lt;br /&gt;
  $ man git&lt;br /&gt;
Per esempio, puoi avere la pagina del manuale di aiuto, per il comando config, lanciando&lt;br /&gt;
  $ git help config&lt;br /&gt;
Per controllare la versione di git&lt;br /&gt;
  $git --version&lt;br /&gt;
  $echo &amp;quot;$(git –version)&amp;quot;&lt;br /&gt;
&lt;br /&gt;
==Creare un Repository Vuoto==&lt;br /&gt;
Per comprendere git non ci servirà né Xcode né altri programmi. Ci baseremo infatti esclusivamente sul terminale. Avviamo quindi il terminale e creiamo la cartella “mocambos git” dove meglio ci piace. (ricordo che nel terminale cd è il comando per cambiare directory e mkdir quello per crearne una nuova).&lt;br /&gt;
  musa@amilo:~$ mkdir mocambos&lt;br /&gt;
  musa@amilo:~$ cd mocambos/&lt;br /&gt;
Dall’interno della cartella “mocambos” appena creata digitiamo il comando&lt;br /&gt;
  musa@amilo:~/mocambos$ git init&lt;br /&gt;
Questo inizializza un repository vuoto nella cartella in cui viene dato il comando. &lt;br /&gt;
Vedremo quindi un messaggio simile a questo:&lt;br /&gt;
  Initialized empty Git repository in /home/fasher/mocambos/.git/&lt;br /&gt;
Abbiamo appena creato il nostro primo repository. Possiamo infatti vedere che all’interno della cartella “mocambos ” è stata creata una cartella nascosta “.git”&lt;br /&gt;
  musa@amilo:~/mocambos$ ls -laF&lt;br /&gt;
  totale 12&lt;br /&gt;
  drwxr-xr-x  3 musa musa 4096 2013-08-02 14:57 ./&lt;br /&gt;
  drwxr-xr-x 43 musa musa 4096 2013-08-02 14:56 ../&lt;br /&gt;
  drwxr-xr-x  7 musa musa 4096 2013-08-02 14:57 .git/&lt;br /&gt;
Una volta che il repository è stato creato iniziamo ad aggiungere files al nostro progetto, aggiungiamo ad esempio un file di testo “file1.txt” che al suo interno abbia questo testo:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world' &amp;gt; file.txt&lt;br /&gt;
git add . Aggiungerà ogni cosa cambiata.&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
Facciamo il commit del nostro primo progetto&lt;br /&gt;
Supponiamo che il nostro lavoro sia finito qui, siamo soddisfatti della frase scritta e vogliamo che diventi un punto fermo nella storia del nostro progetto: quello che vogliamo è creare un oggetto commit o come si dice in gergo “fare il commit del progetto”.&lt;br /&gt;
Un commit è composto dai file che sono stati modificati dal precedente commit, un riferimento a tale commit e da un nome univoco.&lt;br /&gt;
Se avete studiato un pò di teoria dei grafi potete immaginare i vari commit come un grafo aciclico e diretto:&lt;br /&gt;
* ciascun commit, escluso il primo, ha un riferimento ai precedenti commit (può essere figlio di due o più commit) &lt;br /&gt;
* ciascun commit, escluse le foglie, hanno un riferimento ai commit successivi. &lt;br /&gt;
Per creare il nostro primo commit digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
Dovreste ottenere questo output:&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;initial commit&amp;quot;&lt;br /&gt;
  [master (root-commit) 81a937a] initial commit&lt;br /&gt;
   1 files changed, 1 insertions(+), 0 deletions(-)&lt;br /&gt;
   create mode 100644 file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Questa è la prima versione del progetto.&lt;br /&gt;
in cui si vede chiaramente che abbiamo aggiunto un file.&lt;br /&gt;
Creiamo altri due file sulla falsa riga del primo e creiamo un nuovo commit dopo aver creato ciascun file.&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world!' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis&amp;quot;&lt;br /&gt;
   [master c03619d] add emphasis&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
  musa@amilo:~/mocambos$ &lt;br /&gt;
Dopo aver creato due commit digitiamo $git log&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Vediamo in ordine inverso i due oggetti commit che abbiamo creato, con tanto di nome univoco SHA1, l’autore la data ed il commento.&lt;br /&gt;
  $git cat-file -t 64b2c91d&lt;br /&gt;
  $git ls-tree 64b2c91d&lt;br /&gt;
  $ git cat-file blob 64b2c91d&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $ find .git/objects/&lt;br /&gt;
  $cat .git/refs/heads/master&lt;br /&gt;
Altri comandi molto utili sono:&lt;br /&gt;
   * git status: mostra quali file sono cambiati tra lo stato attuale del progetto e lo stato corrente del repository (*) &lt;br /&gt;
   * git diff: mostra le differenze sui singoli files &lt;br /&gt;
   * git mv: marca un file come da spostare sul repository &lt;br /&gt;
   * git rm: marca un file come da rimuovere sul repository &lt;br /&gt;
(*) l’indicazione dello stato corrente necessita una spiegazione: all’interno del repository vengono mantenuti dei riferimenti ai diversi oggetti commit, il riferimento HEAD punta al commit corrente e viene portato avanti automaticamente quando si effettua un nuovo commit.&lt;br /&gt;
===Git Branches===&lt;br /&gt;
I progetti non hanno mai una vita lineare, neanche nel mondo ideale. Ci sono sempre almeno un paio di versioni “funzionanti” nelle quali si prova ad aggiungere nuove funzionalità o rimuovere vecchi problemi. git tiene conto di queste esigenze e risponde con la funzionalità chiamata branch. In un repository possono coesistere più branch contemporaneamente, il primo viene creato di default e si chiama master tutti gli altri possono essere creati successivamente dall’utente.&lt;br /&gt;
Per creare il nuovo branch 'develop'  occorre digitare:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch  develop&lt;br /&gt;
in questo modo abbiamo creato un nuovo ramo. Possiamo vedere il risultato di questo comando digitando&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
vedremo un risultato simile al seguente:&lt;br /&gt;
  musa@amilo:~/mocambos$ git branch&lt;br /&gt;
   develop&lt;br /&gt;
   * master&lt;br /&gt;
l'asterisco indica il branch attualmente selezionato per passare da un branch all'altro &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Already on 'master'&lt;br /&gt;
Per portare avanti il codice su develop, selezioniamo il branch develop &lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout develop&lt;br /&gt;
  Switched to branch 'develop'&lt;br /&gt;
Per iniziare a sviluppare sul nuovo branch dobbiamo digitare il comando:&lt;br /&gt;
  musa@amilo:~/mocambos$ echo 'hello world again' &amp;gt;file.txt&lt;br /&gt;
  musa@amilo:~/mocambos$ git add .&lt;br /&gt;
  musa@amilo:~/mocambos$ git commit -a -m &amp;quot;add emphasis2&amp;quot;&lt;br /&gt;
  [develop 41afd11] add emphasis2&lt;br /&gt;
   1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
Se guardiamo il log vediamo che non appare il tre commit, perché è stato effettuato sul branch master, mentre stiamo lavorando sul branch develop.&lt;br /&gt;
  musa@amilo:~/mocambos$ git log&lt;br /&gt;
  commit 41afd11c0d0c0ae3008ad23b2565bc038a6c58ad&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:45:13 2013 +0200&lt;br /&gt;
    add emphasis2&lt;br /&gt;
  commit c03619ddb1c07958f6052ef96110dba6b27bb8b8&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:24:18 2013 +0200&lt;br /&gt;
    add emphasis&lt;br /&gt;
  commit 81a937a86dc0215999bb76f581e6e3a6d00d1aa9&lt;br /&gt;
  Author: Musa &amp;lt;hamato_jedo@hotmail.com&amp;gt;&lt;br /&gt;
  Date:   Fri Aug 2 15:18:02 2013 +0200&lt;br /&gt;
    initial commit&lt;br /&gt;
Per avere una idea grafica di quello che sta succedendo possiamo usare questo comando (trovato su stackoverflow):&lt;br /&gt;
  musa@amilo:~/mocambos$ git log --graph --date-order -C -M --pretty=format:&amp;quot; %ad [%an] %Cgreen%d%Creset %s&amp;quot; --all --date=short&lt;br /&gt;
  *  2013-08-02 [Musa]  (HEAD, develop) add emphasis2&lt;br /&gt;
  *  2013-08-02 [Musa]  (master) add emphasis&lt;br /&gt;
  *  2013-08-02 [Musa]  initial commit&lt;br /&gt;
Da notare che il nuovo oggetto commit ottenuto con il merge ha due genitori, il quarto commit del brach master ed il quinto commit del branch nuovo_ramo.&lt;br /&gt;
Per saltare da un ramo ad un altro si usa il comando: &lt;br /&gt;
  $ git checkout master&lt;br /&gt;
===Merge===&lt;br /&gt;
Terminate le modifiche effettuate sul branch nuovo_ramo è adesso il momento riportarle sul branch master. Purtroppo non abbiamo garanzia che nessuno abbia intanto modificato i file del branch master, anzi, in uno sviluppo condiviso, questa è la norma, quindi incrociamo le dita e speriamo che non ci siano conflitti di sorta.&lt;br /&gt;
Switchiamo sul branch master e digitiamo:&lt;br /&gt;
  musa@amilo:~/mocambos$ git checkout master&lt;br /&gt;
  Switched to branch 'master'&lt;br /&gt;
  musa@amilo:~/mocambos$ git merge develop&lt;br /&gt;
  Updating c03619d..41afd11&lt;br /&gt;
  Fast-forward&lt;br /&gt;
  file.txt |    2 +-&lt;br /&gt;
  1 files changed, 1 insertions(+), 1 deletions(-)&lt;br /&gt;
will commit the result of the merge. Finally,&lt;br /&gt;
   musa@amilo:~/mocambos$ gitk&lt;br /&gt;
se un giorno decidessimo che il branch develop non ci serve più, cancelliamolo &lt;br /&gt;
  $git branch -d develop&lt;br /&gt;
===Eliminare un ramo=== &lt;br /&gt;
Dopo aver usato un ramo e dopo aver fatto il merge nel ramo principale possiamo decidere di eliminarlo dal nostro repository. &lt;br /&gt;
  $ git branch -d &amp;lt;nome_ramo_locale&amp;gt;&lt;br /&gt;
  $ git branch -d -r &amp;lt;nome_ramo_remoto&amp;gt;&lt;br /&gt;
Questa prima parte della guida all’uso di git termina qui, nella prossima puntata affronteremo la condivisione dello stesso progetto su più utenti, anche attraverso internet.&lt;br /&gt;
===Prossimo Utilizzando git per la collaborazione===&lt;/div&gt;</summary>
		<author><name>Musa</name></author>	</entry>

	</feed>