Git (software) e Lorenzo Fazzini: differenze tra le pagine

(Differenze fra le pagine)
Contenuto cancellato Contenuto aggiunto
Recupero di 1 fonte/i e segnalazione di 0 link interrotto/i. #IABot (v2.0beta15)
 
Bibliografia: Aggiunta dati bibliografici su Malpica
 
Riga 1:
{{Bio
{{C|stile tutt'altro che enciclopediche, numerose affermazioni POV|informatica|giugno 2014}}
|Nome = Lorenzo
{{F|software|agosto 2013}}
|Cognome = Fazzini
{{Software
|NomeSesso = GitM
|LuogoNascita = Vieste
|Screenshot =
|GiornoMeseNascita = 19 gennaio
|Didascalia =
|AnnoNascita = 1787
|Sviluppatore = inizialmente [[Linus Torvalds]], attualmente [[Junio Hamano]]
|NoteNascita = <ref>I biografi di Lorenzo Fazzini hanno tradizionalmente riportato come sua data di nascita il 17 gennaio. La data corretta è stata ricavata da Raffaele Santoro in base a informazioni contenute nel registro dei Battezzati della Cattedrale di Vieste, vol. 12, p. 236 ({{Cita|Santoro}}, p. 1). Dalla stessa fonte risulta, inoltre, che Fazzini venne battezzato col nome completo di ''Laurentius Maria Antonius'' ({{Cita|Santoro}}, p. 1).</ref>
|UltimaVersioneBeta =
|LuogoMorte = Napoli
|DataUltimaVersioneBeta =
|GiornoMeseMorte = 4 maggio
|SistemaOperativo = gnu/linux
|AnnoMorte = 1837
|SistemaOperativo2 = osx
|Attività = matematico
|SistemaOperativo3 = windows
|Attività2 = fisico
|SistemaOperativoAltri = [[Solaris (sistema operativo)|Solaris]]
|Attività3 = filosofo
|Genere = Sistema di controllo versione
|Epoca = 1800
|SoftwareLibero = sì
|Nazionalità = italiano
|Lingua =
|PostNazionalità = , un divulgatore di materie scientifiche e filosofiche e il fondatore dell'omonima scuola privata, una delle più celebri nel [[Regno delle Due Sicilie]]
|Immagine = Lorenzo Fazzini.jpg
}}
'''Git''' è un [[software]] di [[controllo versione distribuito]] utilizzabile da [[interfaccia a riga di comando]], creato da [[Linus Torvalds]] nel [[2005]].
 
== Biografia ==
Git (che nello [[Slang|slang americano]] significa ''idiota''<ref>{{Cita web |https://www.wordreference.com/enit/git |Significato di git |9 giugno 2016}}</ref>) nacque per essere un semplice strumento per facilitare lo sviluppo del [[kernel]] [[Linux (kernel)|Linux]] ed è diventato uno degli strumenti di [[controllo versione]] più diffusi. La sua progettazione si ispirò a strumenti (allora [[Software proprietario|proprietari]]) analoghi come [[BitKeeper]] e [[Monotone (software)|Monotone]].
[[File:Via dedicata a Lorenzo Fazzini a Vieste.jpg|miniatura|Via dedicata a Lorenzo Fazzini a Vieste]]
Lorenzo Fazzini nacque a Vieste, in provincia di [[Foggia]], da Tommaso e Porzia Medina. La sua era all'epoca una delle famiglie agiate della città.<ref>{{Cita|Santoro}}, p. 1.</ref>. Ebbe tre fratelli minori, Gaetano,<ref>{{Cita|LaTosa}}.</ref> Antonio e Matteo, che collaborarono alla scuola da lui fondata a Napoli.
 
=== StoriaFormazione ===
Lo sviluppo di Git è iniziato dopo che molti sviluppatori del kernel di Linux sono stati costretti ad abbandonare l'accesso al [[codice sorgente]] tramite il sistema proprietario [[BitKeeper]]. La possibilità di utilizzare BitKeeper gratuitamente era stata ritirata dal detentore dei diritti d'autore [[Larry McVoy]] dopo avere sostenuto che [[Andrew Tridgell]] aveva effettuato il [[reverse engineering]] dei protocolli.
 
Lorenzo Fazzini trascorse la sua infanzia a Vieste. Il suo talento per la matematica fu però notato fin dai primi anni e i genitori decisero di fargli proseguire gli studi in ambienti che potessero garantirgli una formazione adeguata. Fazzini si trasferì così a Foggia, poi a [[Benevento]] e in ultimo nel seminario di [[Nusco]], in provincia di [[Avellino]]. Qui trascorse l'adolescenza approfondendo lo studio delle lettere latine e dei classici, materie basilari a quell'epoca per la formazione degli studenti. Terminato a diciotto anni il suo percorso in seminario, tornò a Vieste.<ref>{{Cita|Santoro}}, p. 3.</ref>
Alla conferenza [[Linux.Conf.Au]] del 2005, Tridgell dimostrò nel suo intervento che il procedimento di reverse engineering che aveva usato era semplicemente collegarsi con [[telnet]] alla porta appropriata di un server Bitkeeper e digitare "help".
 
Il rientro nella città natale fu di breve durata: desiderando continuare i suoi studi, Fazzini si trasferì infatti a Napoli.<ref>Taddei, p. 54.</ref> Lì nel 1809 venne ordinato sacerdote<ref>{{Cita|Santoro}}, p. 4.</ref> e nello stesso anno ebbe come insegnante di matematica il napoletano [[Nicola Fergola]].<ref>{{Cita|Santoro}}, pp. 8-9.</ref> La scuola di quest'ultimo era un rinomato centro per la formazione di matematici e un punto di incontro per studiosi e ricercatori del [[Mezzogiorno (Italia)|Mezzogiorno]]; Fazzini ne fu uno degli allievi più illustri.
Torvalds voleva un sistema distribuito che potesse usare come BitKeeper, ma nessuno dei sistemi disponibili gratuitamente soddisfaceva i suoi bisogni, particolarmente il suo bisogno di velocità.
Ecco un messaggio e-mail (tradotto in italiano) che scrisse il 7 aprile [[2005]] mentre stava scrivendo il primo prototipo:
 
Fazzini proseguì anche gli studi in teologia, diritto canonico, storia della Chiesa, filosofia, scienze fisico-matematiche. Nel frattempo, tuttavia, si era avvicinato alla [[Sensismo|filosofia sensista]]. Nel 1817 ottenne dalla Chiesa il permesso di acquisire testi proibiti su questa corrente filosofica, a patto che non ne divulgasse i contenuti.<ref>{{Cita|Santoro}}, p. 10.</ref> Questo aspetto della formazione filosofica di Fazzini influirà sulla sua docenza e sulla sua personalità, determinando una contraddizione che, secondo le testimonianze di allievi e amici, lo accompagnò per tutta la vita.<ref>{{Cita|De Sanctis}}, pp. 31-38.</ref>
{{citazione|Tutti i sistemi di controllo versione che ho preso in considerazione rendono [il lavoro] difficile. Una delle cose (in realtà, la cosa principale) a cui ho lavorato è rendere quel procedimento realmente ''efficiente''.
Se ci vuole mezzo minuto per applicare una patch, e ci si deve ricordare i confini delle modifiche applicate, ecc. (e francamente, si potrebbe considerare mezzo minuto ''poco'' per la maggior parte dei sistemi di controllo versione che ci sono in giro, e per un progetto della dimensione di Linux), allora una serie di 250 e-mail (che non è affatto inaudito quando mi sincronizzo con Andrew, per esempio) richiede due ore. Neanche BitKeeper si dimostrò rapido (in effetti, confrontato a qualunque altra cosa, BitKeeper ''è'' velocissimo, spesso uno o due ordini di grandezza migliore), e richiedeva circa 10–15 secondi per ogni e-mail quando facevo il merge con Andrew. Tuttavia, con BitKeeper quello non era un problema tanto grosso, dato che i merge BitKeeper<->BitKeeper sono più semplici, e non ho mai dovuto fare un più lento merge manuale con gli altri sviluppatori principali.
 
=== Attività come insegnante ===
Perciò il merge, in un sistema di controllo versione basato sull'applicazione di patch dovrebbe essere più ''veloce'' di BitKeeper. Il che è veramente difficile. E per questo sto scrivendo alcuni script per tentare di tener traccia delle cose in modo nettamente più veloce.
 
Nel 1810, Fazzini aprì una scuola privata in cui venivano insegnate filosofia, matematica e fisica. La scuola aveva sede nella Strada nuova dei Pellegrini, nel quartiere di [[Montecalvario]], e divenne uno dei centri di studio più rinomati di Napoli. Nel periodo di maggior successo la scuola arrivò a contare tra i 300 e i 400 allievi. In una data non precisabile, Fazzini dovette quindi spostare la scuola in una sede più grande, in via Magnacavallo, nello stesso quartiere.<ref>{{Cita|Santoro}}, p. 12.</ref>
Le indicazioni iniziali sono che dovrei essere in grado di farlo con la stessa velocità della sola applicazione delle patch. Ma francamente, sono al massimo a metà del lavoro, e se mi imbatterò in qualche ostacolo può darsi che non sarà affatto così.
La ragione per cui posso fare questo così velocemente è che i miei script ''non'' saranno un sistema di controllo versione, saranno un tipo di cosa molto specifica del tipo “log dello stato di Linus”.
Ciò renderà il merge tramite patch molto più veloce, e quindi fattibile.
 
Anche dopo aver aperto la propria scuola, comunque, Fazzini insegnò presso altre scuole private. Secondo diverse testimonianze del tempo, dedicava quindi all'insegnamento sei o sette ore al giorno.<ref>{{Cita|Santoro}}, pp. 12-13.</ref> Uno dei suoi allievi fu [[Francesco De Sanctis]], che nella sua autobiografia ''[[La giovinezza (De Sanctis)|La giovinezza]]'' ha lasciato una descrizione molto vivace di Fazzini e del suo insegnamento, particolarmente coinvolgente per quanto riguardava la fisica.<ref>{{Cita|De Sanctis}}, pp. 31-38.</ref>
(Se per applicare una patch ci vogliono tre secondi, anche una lunga serie di patch non è un problema: se vengo avvertito entro uno o due minuti che il merge è fallito a metà strada, va bene, in tal caso posso procedere a correggerlo a mano. Questo è il motivo per cui la latenza è critica — se dovessi fare le cose del tutto “offline”, per definizione non sarei in grado di correggere i problemi quando accadono).}}
 
Sembra comunque che la maggior parte del tempo di insegnamento di Fazzini fosse dedicata alla matematica.<ref>{{Cita|Santoro}}, p. 34.</ref> Al servizio di questa attività Fazzini pubblicò tre volumi, riediti più volte e dedicati rispettivamente all'aritmetica, alla geometria piana e alla geometria solida. Questi lavori non avevano tuttavia solo finalità didattiche: in particolare, secondo Raffaele Santoro, nei due volumi dedicati alla geometria piana e alla geometria solida, traduzione degli ''[[Elementi (Euclide)|Elementi]]'' di [[Euclide]], Fazzini tenne conto di diverse traduzioni precedenti, esaminandole in modo critico anche alla luce degli sviluppi recenti della geometria.<ref>{{Cita|Santoro}}, p. 35.</ref>
Linus aveva vari criteri di progettazione:
 
=== Laboratorio ===
# Prendi [[Concurrent Versions System|CVS]] come esempio di che cosa ''non'' fare; se hai un dubbio, fai l'esatto contrario. Per citare Linus, che parlava un po' ironicamente:
Oltre all'insegnamento della filosofia e delle materie scientifiche, Fazzini si dedicava alla ricerca e alla divulgazione . Al servizio di queste tre attività allestì anche un laboratorio scientifico, considerato all'epoca uno dei migliori di Napoli. Dopo la morte di Fazzini, le attrezzature del laboratorio vennero acquistate dall'Università di Napoli.<ref>De Sanctis, p. 529.</ref>
#: “Per i primi 10 anni di manutenzione del kernel, usavamo letteralmente tarball (archivi compressi) e patch, che è un sistema di gestione del codice sorgente molto migliore di CVS. Poi ho finito per usare CVS per 7 anni in un'azienda ''[presumibilmente [[Transmeta]]]'' e lo odio appassionatamente. Quando dico che odio CVS appassionatamente, devo anche dire che se ci sono utenti SVN ([[Subversion]]) tra il pubblico, potreste volervene andare. Perché a causa del mio odio di CVS ritengo Subversion il progetto meno sensato che sia mai cominciato. Per un po' lo slogan di Subversion era ‘CVS fatto bene', o qualcosa di simile, e se incominci con quel tipo di slogan, non puoi andare da nessuna parte. Non c'è modo di fare CVS bene.”
# Supporto di un flusso di lavoro distribuito, simile a BitKeeper. Come BitKeeper, Git non usa un server centralizzato.
#: “BitKeeper non è solamente il primo sistema di controllo dei sorgenti che abbia mai pensato che valesse la pena usare; è stato anche il sistema che mi ha fatto capire perché ce ne sia effettivamente bisogno, e come si possa operare in modo efficace. Perciò, sebbene da un punto di vista tecnico Git sia molto diverso da BitKeeper (il che era un altro obiettivo di progettazione, perché volevo rendere chiaro che non era un clone di BitKeeper), molti dei procedimenti che usiamo con Git vengono direttamente dai procedimenti che abbiamo imparato da BitKeeper.”
# Salvaguardia dalla corruzione dei dati, sia accidentale che intenzionale
# Altissime prestazioni
 
=== Morte ===
I primi tre criteri non erano soddisfatti da alcun preesistente sistema di controllo versione eccetto [[Monotone (software)|Monotone]], e il quarto ha escluso anche Monotone. Perciò, immediatamente dopo lo sviluppo della versione 2.6.12-rc2 del kernel di Linux, si è dedicato a scrivere il suo.
Il 4 maggio del 1837 Fazzini morì di colera, durante la [[Storia del colera#Il contagio in Italia|prima grande epidemia]] del morbo in [[Italia]].
 
La salma fu provvisoriamente depositata nella chiesa di [[Complesso di San Tommaso d'Aquino|S. D’Aquino]] e successivamente, al termine dell’epidemia, venne trasferita in quella di [[Chiesa di Santa Maria ad Ogni Bene dei Sette Dolori|Nostra Signora De’ Sette Dolori]]. Qui furono celebrate le solenni esequie con eccezionale partecipazione dei giovani allievi e amici che manifestarono la loro venerazione e gratitudine per il maestro; per la cerimonia venne composta una musica da [[Gaetano Donizetti]] e venne recitato un [[elogio]] del defunto dall'amico [[Basilio Puoti]]. Nei mesi successivi, numerose commemorazioni a stampa esaltarono le qualità di Fazzini come persona e come scienziato.
Lo sviluppo di Git è cominciato il 3 aprile [[2005]]. Il progetto è stato annunciato il 6 aprile [[2005]], ed è stato usato per gestire il proprio sorgente a partire dal 7 aprile [[2005]].
La prima fusione di più branch in uno è stata fatta il 18 aprile [[2005]].
Torvalds ha raggiunto i suoi obiettivi in termini di prestazioni: il 29 aprile [[2005]], Git riusciva ad applicare 6 o 7 patch a Linux in un secondo.
Il 16 giugno [[2005]] è stata pubblicata la versione 2.6.12 del kernel di Linux, la prima gestita con Git.
 
Dopo la sua morte, l'attività della sua scuola venne proseguita per un certo periodo dai fratelli Lorenzo e Gaetano.<ref>{{Cita|Santoro}}, p. 52.</ref>
Sebbene fortemente influenzato da BitKeeper, Torvalds ha deliberatamente tentato di evitare approcci convenzionali, il che ha prodotto un sistema molto innovativo.
 
== Ricerche scientifiche ==
Torvalds ha sviluppato il sistema fino a quando è diventato usabile da utenti tecnici, poi, il 26 luglio [[2005]], ha ceduto la manutenzione a Junio Hamano, un importante contributore al progetto.
Fazzini si occupò a lungo di ricerche scientifiche in vari campi della fisica. In particolare, studiò l'induzione elettromagnetica, il magnetismo e la relazione tra luce e magnetismo. Non pubblicò però nulla a proposito di queste ricerche, che sono note solo attraverso le testimonianze di Emanuele Tellini e di Gaetano Fazzini.<ref>{{Cita|Santoro}}, p. 57.</ref>
Hamano è stato il responsabile della versione 1.0, pubblicata il 21 dicembre [[2005]], e rimane oggi il manutentore.
 
Fazzini era convinto che diverse delle forze naturali allora note, e in particolare il calorico, la luce, l’elettricismo, il galvanismo e il magnetismo, fossero in realtà diverse manifestazioni di un'unica forza.<ref>{{Cita|Santoro}}, p. 63.</ref> In linea con questa idea di base, studiò quindi il [[magnetismo]], e in particolare due fenomeni che erano stati appena scoperti:
== Descrizione ==
=== Caratteristiche ===
Il progetto di Git è la sintesi dell'esperienza di Torvalds nel mantenere un grande progetto di sviluppo distribuito, della sua intima conoscenza delle prestazioni del file system, e di un bisogno urgente di produrre un sistema soddisfacente in poco tempo.
Queste influenze hanno condotto alle seguenti scelte implementative:
* Forte supporto allo sviluppo non lineare. Git supporta diramazione e fusione (branching and merging) rapide e comode, e comprende strumenti specifici per visualizzare e navigare una cronologia di sviluppo non lineare. Un'assunzione centrale in Git è che una modifica verrà fusa più spesso di quanto sia scritta, dato che viene passata per le mani di vari revisori. Torvalds stesso fa la maggior parte delle fusioni e una piccola parte delle correzioni dirette al codice, perciò egli stesso ha dimostrato che questo aspetto funziona bene.
* Sviluppo distribuito. Similmente a [[Bazaar (software)|Bazaar]], [[Darcs]], [[BitKeeper]], [[Mercurial]], [[SVK (software)|SVK]], e [[Monotone (software)|Monotone]], Git dà a ogni sviluppatore una copia locale dell'intera cronologia di sviluppo, e le modifiche vengono copiate da un tale repository a un altro. Queste modifiche vengono importate come diramazioni aggiuntive di sviluppo, e possono essere fuse allo stesso modo di una diramazione sviluppata localmente.
* I repository possono essere pubblicati facilmente tramite [[Hypertext Transfer Protocol|HTTP]], [[File Transfer Protocol|FTP]], [[Secure Shell|ssh]], [[rsync]], o uno speciale protocollo git. Git ha anche un'emulazione del server CVS, che consente di usare gli esistenti client CVS e plugin per IDE per accedere ai repository Git.
* Gestione efficiente di grandi progetti. Git è molto veloce e scalabile. È tipicamente un [[ordine di grandezza]] più veloce degli altri sistemi di controllo versione, e due ordini di grandezza più veloce per alcune operazioni<ref>{{Cita web|cognome=Dreier |nome=Roland |url=http://digitalvampire.org/blog/index.php/2006/11/16/oh-what-a-relief-it-is/ |titolo=Oh what a relief it is |data=13 novembre 2006}}, observing that "git log" is 100x faster than "svn log" because the latter has to contact a remote server.</ref>.
* Autenticazione crittografica della cronologia. La cronologia di Git viene memorizzata in modo tale che il nome di una revisione particolare (secondo la terminologia Git, una "commit") dipende dalla completa cronologia di sviluppo che conduce a tale commit. Una volta che è stata pubblicata, non è più possibile cambiare le vecchie versioni senza che ciò venga notato. (Anche [[Monotone (software)|Monotone]] ha questa proprietà.)
* Progettazione del toolkit. Git è un insieme di programmi di base scritti in [[C (linguaggio)|linguaggio C]], e molti script di shell che forniscono comodi incapsulamenti. È facile concatenare i componenti per fare altre cose utili.
* Strategie di fusione intercambiabili. Come parte della progettazione del suo toolkit, Git ha un modello ben definito di una fusione incompleta, e ha più algoritmi per tentare di completarla. Se tutti gli algoritmi falliscono, tale fallimento viene comunicato all'utente e viene sollecitata una fusione manuale. Pertanto è facile sperimentare con nuovi algoritmi di fusione.
* La spazzatura si accumula fino a quando viene raccolta. Quando si abortisce un comando o si scartano delle modifiche si lasciano degli oggetti inutilizzabili nel database. Tipicamente, questi sono solo una piccola parte della cronologia continuamente crescente degli oggetti utili, ma il comando di recupero dello spazio, <code>git gc --prune</code>, può richiedere parecchio tempo.
 
* il '''magnetismo di rotazione''', scoperto nel [[1825]] da [[François Arago|Arago]]: un ago magnetico posto sopra un disco di rame in rotazione inizia a sua volta a ruotare
Una proprietà di Git che ha prodotto considerevoli controversie è il fatto che prende istantanee di interi alberi di directory di file invece che di singoli file. I primi sistemi di controllo versione del codice sorgente, [[Source Code Control System|SCCS]] and [[Revision Control System|RCS]], lavoravano su singoli file, e vantavano il risparmio di spazio ottenibile dalla [[codifica delta]] delle versioni simili. I successivi sistemi di controllo versione mantennero questo concetto di identità dei file al variare delle revisioni di un progetto.
* l''''induzione tellurica''', scoperta nel [[1831]] da [[Faraday]]: la generazione di una corrente elettrica indotta in un circuito che si muove attraverso il [[campo geomagnetico]]
 
Per quanto riguarda il magnetismo di rotazione, Fazzini ripeté e approfondì le esperienze di Arago notando che la rotazione dell'ago magnetico si verificava anche in presenza di meteriale isolante al di sopra del disco di rame mentre non si verificava se al disco di rame veniva sostituito un disco di materiale isolante.<ref>{{Cita|Santoro}}, pp. 68-69.</ref>
Git rifiuta questo concetto e non registra esplicitamente le relazioni di revisione di file a nessun livello all'interno dell'albero del codice sorgente.
Ciò comporta conseguenze rilevanti:
* È effettivamente leggermente più costoso esaminare la cronologia di modifiche di un singolo file rispetto a quella dell'intero progetto. Per ottenere la cronologia delle modifiche che riguardano un dato file, Git deve ripercorrere la cronologia complessiva e poi determinare quali modifiche hanno riguardato quel file. Questo metodo di esaminare la cronologia, comunque, permette a Git di produrre con altrettanta efficienza una singola cronologia che mostra le modifiche a un arbitrario insieme di file. Per esempio, una sottodirectory dell'albero dei sorgenti più un file di intestazione (header) globale a loro associato.
* I cambiamenti di nome di file e directory vengono gestiti in modo implicito invece che esplicito. Una grossa lamentela degli utenti di [[Concurrent Versions System|CVS]] è che usa il nome di un file per identificare la sua cronologia di revisioni, perciò non è possibile spostare un file o cambiargli nome senza interrompere la sua cronologia, così come cambiare nome alla cronologia rendendola inaccurata. La maggior parte dei sistemi di controllo versioni successivi a CVS risolvono questo problema dando a ogni file un nome interno univoco di lunga vita che sopravvive al cambiamento di nome. Git non memorizza un identificatore di questo genere, e questo viene descritto come un vantaggio. I file di codice sorgente vengono talvolta spezzati o fusi oltre che semplicemente cambiati di nome, e memorizzare tali modifiche come un semplice cambiamento di nome congelerebbe per sempre nella cronologia una descrizione inaccurata di quello che è successo. Git affronta la questione rilevando i cambiamenti di nome mentre sfoglia la cronologia delle istantanee invece di memorizzarli quando si prende un'istantanea. (In breve, dato un file alla revisione N, un file con lo stesso nome alla revisione N-1 è il suo antenato di default. Tuttavia, quando non ci sono file dal nome simile alla versione N-1, Git cerca un file che esisteva solamente alla versione N-1 e che abbia un contenuto molto simile a quello del nuovo file.) Questo richiede più lavoro di [[CPU]] ogni volta che si esamina la cronologia, e alcune opzioni per calibrare l'euristica.
 
Per quanto riguarda l'induzione tellurica, Fazzini ne identificò con maggiore chiarezza le modalità e cercò di combinare la ricerca con quella sul magnetismo di rotazione. Descrisse inoltre una delle sue esperienze in una lettera scritta, in francese, a Faraday e datata 3 aprile 1832; pubblicata postuma,<ref>L. Pearce Williams (a cura di), ''The Selected correspondence of Michael Faraday'', Cambridge University Press, 1971. vol.1 - 1812-1848, p. 219.</ref> questa lettera è l'unica descrizione lasciata da Fazzini riguardo ai propri esperimenti.<ref>{{Cita|Santoro}}, pp. 69-81.</ref>
Inoltre, gli utenti talvolta sono turbati dal modello di immagazzinamento:
* Impacchettamento esplicito periodico degli oggetti. Git immagazzina ogni nuovo oggetto in un file distinto.
Sebbene tale file sia in un formato compresso, può occupare parecchio spazio ed essere inefficiente. Questo problema è risolto dall'uso di "impacchettamenti" ("packs") che immagazzinano molti oggetti in un solo file (o in un flusso di dati via rete), che hanno essi stessi una compressione delta. Gli impacchettamenti vengono compressi con l'euristica che i file con lo stesso nome sono probabilmente simili, funzionano correttamente anche se questa supposizione non è valida. Gli oggetti appena creati (cioè appena aggiunti alla cronologia) sono ancora immagazzinati singolarmente, e per mantenere l'efficienza si dovrebbe effettuare periodicamente un impacchettamento.
 
Fazzini eseguì inoltre esperimenti sul rapporto tra luce e magnetismo, ma le testimonianze rimaste, tutte indirette, non permettono di ricostruire chiaramente le sue intenzioni e i risultati da lui ottenuti.<ref>{{Cita|Santoro}}, pp. 82-94.</ref>
Git implementa varie strategie di fusione; in fase di fusione si può scegliere un comportamento diverso da quello di default:
* risolvi (resolve): Questo è l'algoritmo tradizionale di fusione a 3 vie.
* ricorsivo (recursive): Questo è l'algoritmo di default quando si estrae o si fonde un ramo, ed è una variante dell'algoritmo di fusione a 3 vie. "Quando ci sono più antenati comuni che possono esser usati per una fusione a 3 vie, crea un albero di fusione degli antenati comuni e lo utilizza come albero di riferimento per la fusione a 3 vie. Questo risulta produrre meno conflitti di fusione senza provocare mal-fusioni dalle prove effettuate su effettive fusioni di rilascio prese dalla cronologia di sviluppo del kernel Linux 2.6. Inoltre, questo può rivelare e gestire i cambiamenti di nome."
* piovra (octopus): questo è l'algoritmo di default quando si fondono più di due teste.
 
=== ImplementazioneOpere ===
* ''I primi sei libri degli elementi di Euclide tradotti in Italiano dall'abate Fazzini'' (''Geometria piana''), Napoli, dalla stamperia francese, 1825 (ripubblicato nel 1828 presso la stessa stamperia e nel 1834 presso la stamperia del Fibreno).
Le primitive di Git non costituiscono inerentemente a un sistema di controllo della versione. Per esempio, git non fornisce una numerazione progressiva delle revisioni del software.
* ''I libri undecimo, e duodecimo degli elementi di Euclide tradotti in italiano dall'abate Fazzini ed i teoremi scelti di Archimede sulla sfera e sul cilindro, e la misura del cerchio aggiunti dal medesimo'' (''Geometria solida''), Napoli, dalla stamperia di C. Cataneo, 1825 (ripubblicato nel 1829 presso la stamperia francese e nel 1843 presso la stamperia di Gennaro Agrelli).
* [https://books.google.it/books?id=Id9yIQA0aUIC&pg=PP5&lpg=PP5&dq=abate+lorenzo+fazzini&source=bl&ots=2i92A5zb9b&sig=ACfU3U1ERQ0cfJzradGPrIMRlQUyfNnF3g&hl=it&sa=X&ved=2ahUKEwje-62PxpviAhWO2KQKHQFcClYQ6AEwD3oECBAQAQ#v=onepage&q=abate%20lorenzo%20fazzini&f=false ''Elementi di aritmetica''], Napoli, dalla stamperia francese, 1827 (ripubblicato nel 1829 presso la stessa stamperia e nel 1834 presso la stamperia del Fibreno).
 
== Bibliografia ==
Torvalds spiega che, {{citazione|in molti modi si può considerare git come un filesystem — è indirizzabile in base al contenuto, e include il concetto di ''versione'', ma io in realtà l'ho progettato guardando il problema dal punto di vista di una persona esperta di ''filesystem'' (beh, i kernel sono quello che faccio), e effettivamente ho assolutamente ''zero'' interesse nel creare un sistema tradizionale di gestione della configurazione software.
 
* {{Cita libro
|titolo = La giovinezza. Ricordi
|autore = Francesco De Sanctis
|wkautore =
|curatore = Gennaro Savarese
|traduttore =
|illustratore =
|altri =
|url = https://books.google.it/books?id=nk6I4zcyaVoC&pg=PA32&lpg=PA32&dq=abate+lorenzo+fazzini&source=bl&ots=GjhMD-dPUN&sig=ACfU3U2wJ6bFSPY3MscS-eHCiYX2Gg-qZA&hl=it&sa=X&ved=2ahUKEwjMkKjfmKPiAhXK0KQKHd8nCnEQ6AEwEXoECA0QAQ#v=onepage&q=abate%20lorenzo%20fazzini&f=false
|via =
|editore = Guida editori
|città = Napoli
|anno = 1983
|lingua = italiano
|annooriginale = 1889
|volume =
|opera =
|edizione =
|capitolo =
|url_capitolo =
|p =
|pp =
|posizione =
|ISBN = 88-7042-129-5
|LCCN =
|DOI =
|OCLC =
|id =
|cid = DeSanctis
|citazione =
|accesso = 24 luglio 2019
|urlarchivio =
|dataarchivio =
|urlmorto =
}}
*{{Cita libro
|titolo = Elogi
|autore = [[Basilio Puoti]]
|wkautore =
|curatore =
|traduttore =
|illustratore =
|altri =
|url = https://play.google.com/store/books/details?id=XLqkC-bsj28C&rdid=book-XLqkC-bsj28C&rdot=1
|via =
|editore = Giunti Editore
|città = Firenze
|anno = 1846
|lingua = italiano
|annooriginale =
|volume =
|opera =
|edizione =
|capitolo = L'elogio di Lorenzo Fazzini
|url_capitolo = https://play.google.com/books/reader?id=XLqkC-bsj28C&hl=it&pg=GBS.PA78
|p =
|pp = 77-91
|posizione =
|ISBN =
|LCCN =
|DOI =
|OCLC =
|id =
|cid =
|citazione =
|accesso =
|urlarchivio =
|dataarchivio =
|urlmorto =
}}
*{{Cita pubblicazione
|titolo = Necrologia di Lorenzo Fazzini
|autore = Emanuele Taddei
|curatore =
|wkautore =
|rivista = Annali Civili del Regno delle Due Sicilie
|volume = XIX
|numero =
|editore =
|città =
|data =
|anno = 1837
|mese =
|p =
|pp = XVIII-XIX
|lingua = italiano
|ISSN =
|doi =
|PMID =
|id =
|cid =
|url =
|formato =
|accesso =
|abstract =
|urlarchivio =
|dataarchivio =
|urlmorto =
}}
* {{Cita pubblicazione
|titolo = Necrologia di Lorenzo Fazzini
|autore = Carlo Tortora Brayda
|curatore =
|wkautore =
|rivista = [[Il progresso delle scienze, delle lettere e delle arti]]
|volume = XVI
|numero = 32
|editore =
|città =
|data = marzo-aprile
|anno = 1837
|mese =
|p =
|pp = 298-302
|lingua = italiano
|ISSN =
|doi =
|PMID =
|id =
|cid =
|url =
|formato =
|accesso =
|abstract =
|urlarchivio =
|dataarchivio =
|urlmorto =
}}
* {{Cita pubblicazione
|titolo = Necrologia di Lorenzo Fazzini
|autore = Cesare Malpica
|curatore =
|wkautore =
|rivista = [[Poliorama pittoresco]]
|volume = II
|numero = 41
|editore =
|città =
|data =
|anno = 1837
|mese =
|p =
|pp = 317-391
|lingua = italiano
|ISSN =
|doi =
|PMID =
|id =
|cid =
|url = http://www.internetculturale.it/jmms/iccuviewer/iccu.jsp?id=oai%3Awww.internetculturale.sbn.it%2FTeca%3A20%3ANT0000%3ATO00191174_190916&mode=all&teca=MagTeca+-+ICCU&fulltext=1&viewType=onepage&mediaType=image&objectIndex=0
|formato =
|accesso = 28 luglio 2019
|abstract =
|urlarchivio =
|dataarchivio =
|urlmorto =
}}
* Guido Oldrini, ''La cultura filosofica napoletana dell'Ottocento'', Bari, Laterza, 1973. Domenico Simeone Oliva, ''Sonetto alla memoria dell'egregio professore D. Lorenzo Fazzini'' in [[Poliorama Pittoresco]], II (1837), p.343.
* Luigi Valpolicella, in De Tipaldo Emilio (a cura di): ''Biografie degli Italiani illustri nelle Scienze, Lettere ed Arti, del secolo XVIII, e de' contemporanei - Compilata da Letterati Italiani di ogni provincia'', Venezia, dalla Tipografia di Alvisopoli, 1841, Vol. 8.
* [[Alfredo Zazo]], ''L'istruzione pubblica e privata nel napoletano'' (1767-1860), Il Solco, Città di Castello, 1923, p.182. - ''Le scuole private unviersitarie a Napoli dal 1799 al 1860'', Napoli, ITEA, 1926.
* Gaetano Fazzini, ''Bibliografia degli elementi di fisica sperimentale...del sig. Puoillet voltati in italiano e annotati dal professore Gaetano Fazzini'', in ''Il lucifero'', anno II, pp. 22-23.
* [http://www.treccani.it/enciclopedia/lorenzo-fazzini_(Dizionario-Biografico) Dizionario biografico italiano Treccani].
* {{Cita libro
|titolo = Lorenzo Fazzini
|autore = Raffaele Santoro
|wkautore =
|curatore =
|traduttore =
|illustratore =
|altri =
|url =
|via =
|editore = Vecchiarelli Editore
|città = Bologna
|anno = 2017
|lingua =
|annooriginale =
|volume =
|opera =
|edizione =
|capitolo =
|url_capitolo =
|p =
|pp =
|posizione =
|ISBN = 978-1521338636
|LCCN =
|DOI =
|OCLC =
|id =
|cid = Santoro
|citazione =
|accesso =
|urlarchivio =
|dataarchivio =
|urlmorto =
}}
* {{DBI|nome = |volume = |anno = |autore= Raffaele Santoro}}
* {{DBI
|nome = Fazzini, Gaetano Emanuele
|nomeurl = gaetano-emanuele-fazzini
|autore = Giuseppe La Tosa
|anno = 1995
|pagine =
|volume = 45
|accesso = 23 luglio 2019
|citazione =
|cid = LaTosa
}}
(Si noti che in seguito la sua opinione è cambiata.)
 
Git ha due [[strutture dati]], un ''indice'' modificabile che mantiene le informazioni sul contenuto della prossima revisione, e un ''database di oggetti'' a cui si può solo aggiungere e che contiene quattro tipi di oggetti:
* Un oggetto ''[[binary large object|blob]]'' è il contenuto di un [[file]]. Gli oggetti blob non hanno nome, data, ora, né altri metadati. Git memorizza ogni revisione di un file come un oggetto blob distinto.
* Un oggetto ''albero'' è l'equivalente di una directory: contiene una lista di nomi di file, ognuno con alcuni bit di tipo e il nome di un oggetto blob o albero che è il file, il link simbolico, o il contenuto di directory. Questo oggetto descrive un'istantanea dell'albero dei sorgenti.
* Un oggetto ''commit'' (revisione) collega gli oggetti albero in una cronologia. Contiene il nome di un oggetto albero (della directory dei sorgenti di livello più alto), data e ora, un messaggio di archiviazione (log message), e i nomi di zero o più oggetti di commit genitori. Le relazioni tra i blob si possono trovare esaminando gli oggetti albero e gli oggetti commit.
* Un oggetto ''tag'' (etichetta) è un contenitore che contiene riferimenti a un altro oggetto, può tenere meta-dati aggiuntivi riferiti a un altro oggetto. Il suo uso più comune è memorizzare una firma digitale di un oggetto commit corrispondente a un particolare rilascio dei dati gestiti da Git.
 
I blob sono file binari "non parlanti" che conservano informazioni eterogenee, quali: file testuali o binari, immagini, [[codice sorgente]], [[File archivio|archivi]]. Qualsiasi tipo di file è compresso in un file binario prima di essere salvato in repository Git. Git ne calcola l'hash con l'algoritmo [[SHA-1]].<br />
L'[[Funzione di hash#Algoritmo di hash|hash]] è una sequenza di 40 caratteri alfanumerici, che rappresentano un numero [[esadecimale]], ed è utilizzato da Git per identificare in modo univoco qualsiasi commit nel repository, tracciando il file al suo interno e le eventuali modifiche effettuate. L'hash SHA-1 di un oggetto è unico, risultando lo stesso a prescindere dal repository e dal computer utilizzato.
Git calcola tale codice hash, e usa questo codice come nome dell'oggetto e come identificatore del suo contenuto: file con nomi e/o percorsi diversi, ma con identico contenuto (blob), condividono lo stesso hash.<ref>{{cita libro | autore = Ferdinando Santacroce | url = https://books.google.it/books?id=pf2RDwAAQBAJ&pg=PT52&lpg=PT52#v=onepage&q&f=false | titolo = Git: Guida per imparare a gestire, distribuire e versionare codice | pagine = pp. 47, 52-53 | editore = Apogeo | città = Milano | anno = 2017 | isbn = 9788850334759 | oclc = 1065376849 | accesso = 10 luglio 2019 | urlarchivio = https://archive.today/20190710172448/https://books.google.it/books?id=pf2RDwAAQBAJ&pg=PT47&lpg=PT47&dq=%22ferdinando+santacroce%22&source=bl&ots=P5BQMwWjg9&sig=ACfU3U3gs2n-DPiPOw-xrDZC5IDou7HORg&hl=it&sa=X&ved=2ahUKEwiOop-i6qrjAhXE2aQKHa7lAYM4FBDoATALegQICRAB%23v=onepage&q=hash&f=false#v=onepage&q&f=false | dataarchivio = 10 luglio 2019 | urlmorto = no }}</ref>
 
L'''indice'' è uno strato intermedio che serve da punto di collegamento fra il database di oggetti e l'albero di lavoro.
 
Il database ha una struttura semplice. L'oggetto viene messo in una directory che corrisponde ai primi due caratteri del suo codice hash; Il resto del codice costituisce il nome del file che contiene tale oggetto. Quando si aggiunge un nuovo oggetto, questo viene memorizzato per intero dopo averlo compresso con [[zlib]].
 
Questo fatto può far sì che in poco tempo venga occupato molto spazio sul [[disco fisso]], perciò gli oggetti possono essere combinati in '''pack''', che usano la [[compressione delta]] (memorizzando solo le modifiche tra un blob e un altro blob) per risparmiare spazio.
 
<!-- == Uso di Git ==
Git è facile da usare.
Dapprima, le (relativamente poche) modifiche vengono scaricate e spacchettate, poi avviene un chiacchierio sulla procedimento di fusione, riguardante gli hash SHA-1 degli oggetti che vengono fusi, e i file che hanno richiesto una fusione non banale.
Infine, c'è il sommario delle modifiche che sono state fatte, e quanto sono grandi.
Le modifiche vengono automaticamente inserite nella versione corrente (check-in), ma possono essere facilmente annullate se non sono desiderate.
 
Gli aspetti rilevanti sono:
* Dopo lo scaricamento in massa iniziale, le comunicazioni per la fusione sono poche ed efficienti.
* Non sono richiesti permessi né contributi dall'albero del repository originale.
* La versione ottenuta dalla fusione ha, non solo tutte le modifiche fatte nel corso dello sviluppo (come potrebbe risultare da una pezza), ma l'intera cronologia di sviluppo di tali modifiche.
* Potrebbe essere stato fatto equivalentemente in ordine inverso. L'unica differenza risultante sarebbe stata quale antenato era elencato come il "primo genitore" della fusione.
-->
 
=== Portabilità ===
Git è pensato per funzionare in tutti i [[Sistema operativo|sistemi operativi]] basati su [[GNU/Linux]], ma funziona anche in altri sistemi [[unix-like]], tra cui [[Berkeley Software Distribution|BSD]], [[Solaris (sistema operativo)|Solaris]] e [[Apple Darwin|Darwin]]. Git è estremamente veloce su sistemi basati su [[POSIX]] come i suddetti.
 
Git può essere portato anche in ambiente [[Windows]].
Ci sono in effetti due possibilità per farlo: quella "ufficiale" richiede di installare e usare l'ambiente [[Cygwin]] (che è una emulazione [[POSIX]]); l'alternativa è un port nativo, cioè una modifica del codice sorgente per adattarlo a Windows.
Git su Windows è sensibilmente più lento, a causa del massiccio uso da parte di Git di funzionalità [[POSIX]] del file system che devono essere emulate in ambiente Windows.
Inoltre, molta gente trova che l'installazione di [[Cygwin]] sia troppo grande e invasiva per un tipico utente di Windows.
 
Esistono molti progetti open source che per ora hanno esplicitamente rinunciato a usare Git a causa della sua poca compatibilità con Windows, tra cui [[Mozilla]] e [[Ruby (linguaggio di programmazione)|Ruby]].
 
Un port nativo per Windows, con il nome di "WinGit" divenuto poi "Git on MSys", si avvicina al completamento utilizzando il compilatore [[MinGW]].
 
In alcuni casi (particolarmente per l'accesso remoto anonimo), si possono ammettere gli utenti Windows tramite il git-cvsserver (che emula un server CVS, consentendo l'uso di client CVS per Windows). Altre alternative sono:
* Un client GIT basato su EclipseIDE, che usa un'implementazione in puro Java delle funzioni interne di GIT
* Un'estensione di Windows Explorer basata su libgit + cygwin.dll (è già iniziato un progetto per un software simile a TortoiseCVS)
 
Incapsulare in una libreria le operazioni di git a livello più basso in teoria consentirebbe la re-implementazione delle componenti di livello più basso per Windows senza dover riscrivere il resto.
 
Questi sforzi in generale dovrebbero aiutare a migliorare le prestazioni e la facilità di installazione su Windows; non è chiaro però se aiuteranno a risolvere la questione dei diversi modelli di autorizzazione.
 
== Progetti correlati ==
=== Progetti che si basano su Git ===
* [http://repo.or.cz/w/git-gui.git git-gui] è una GUI basata su Tk per le operazioni più comuni di Git. Questo progetto è incorporato in Git versione 1.5.0 e successive. (Si lancia con il comando "git gui").
* [[Cogito (software)|Cogito]] ([https://www.kernel.org/pub/software/scm/cogito/ homepage]) - Petr Baudiš ha mantenuto un insieme di script chiamato Cogito (precedentemente git-pasky), che formano un sistema di controllo versione che usa Git come backend. Lo sviluppo di Cogito è stato interrotto nell'aprile 2007 quando la sua funzionalità è stata ritenuta ridondante con gli strumenti di frontend di Git, comunemente chiamati "porcellana" ("porcelain").
* [[StGIT]] ([http://www.procode.org/stgit/ homepage]) - Stacked GIT è un'applicazione [[Python]] che fornisce funzionalità simili a Quilt ([https://savannah.nongnu.org/projects/quilt/ homepage]) (cioè aggiungere/togliere patch a/da uno stack) appoggiandosi a Git, per gestire le patch fino a quando vengono fuse.
* [https://web.archive.org/web/20070928034916/http://www.spearce.org/category/projects/scm/pg/ pg (Patchy GIT)] è un'interfaccia a Git costituita da script di shell per aiutare l'utente a gestire un insieme di patch ai file. pg è in un certo senso simile a Quilt o a StGIT, ma ha un insieme di caratteristiche leggermente diverso. pg non viene più mantenuto dal 29 aprile, 2007
* [http://wiki.darcs.net/DarcsWiki/DarcsGit DarcsGit] {{Webarchive|url=https://web.archive.org/web/20070929093501/http://wiki.darcs.net/DarcsWiki/DarcsGit |date=29 settembre 2007 }} è un'estensione di [[Darcs]] che gli consente di interagire con i repositori Git.
* [https://launchpad.net/products/bzr-git bzr-git] è un plugin per [[Bazaar (software)|Bazaar]] per leggere gli alberi di Git. Sebbene sia ancora in fase alpha, fornisce abbastanza supporto per [https://www.webcitation.org/66UOgZ4UX?url=http://wiki.bazaar.canonical.com/ForeignBranches/Git?action=show la visualizazione bzrk].
 
=== Interfacce Web ===
* [https://gogs.io/ Gogs]: Un frontend git con gestione degli utenti, delle segnalazioni, dei fork e molte altre funzionalità, scritto in [[Go_(linguaggio_di_programmazione)|go]].
* [https://gitea.io Gitea]: Un fork comunitario di Gogs.
* {{collegamento interrotto|1=[https://www.kernel.org/git/gitweb.cgi?p=linux/kernel/git/torvalds/linux-2.6.git;a=log gitweb] |date=marzo 2018 |bot=InternetArchiveBot }} – un'implementazione in [[Perl]] mantenuta da Kay Sievers. Usata dal sito kernel.org
* [http://www.grmso.net:8090/ wit] {{Webarchive|url=https://web.archive.org/web/20080119122646/http://grmso.net:8090/ |date=19 gennaio 2008 }} – un'implementazione [[Python]] mantenuta da Christian Meder.
* [https://www.flameeyes.eu/projects/#gitarella gitarella] – un'implementazione [[Ruby (linguaggio di programmazione)|Ruby]] mantenuta da Diego Elio Pettenò
* [https://code.google.com/p/git-php/ git-php] – un'implementazione [[PHP]] di Zack Bartel
* [https://web.archive.org/web/20071218144652/http://hjemli.net/git/ cgit] - un'implementazione [[C (linguaggio di programmazione)|C]] di Lars Hjemli
* [[Bitbucket]] usa i sistemi di controllo versione Git dall'ottobre 2011.
 
=== Visualizzazione della cronologia ===
* [https://web.archive.org/web/20070927232025/http://ozlabs.org/~paulus/gitk/ Gitk] è una semplice GUI [[Tcl/Tk]] per consultare facilmente la cronologia dei repository Git, distribuita con Git.
* [http://digilander.libero.it/mcostalba/ QGit] (SourceForge [https://sourceforge.net/projects/qgit project page]) è una GUI [[Qt (toolkit)|Qt]] per consultare la cronologia dei repository, simile a Gitk.
* [https://web.archive.org/web/20071209104517/http://developer.imendio.com/projects/giggle Giggle] è una GUI [[GTK+]] ispirata da Gitk.
* {{collegamento interrotto|1=[https://git.kernel.org/?p=git/git.git;a=tree;f=contrib/gitview gitview] |date=marzo 2018 |bot=InternetArchiveBot }} è una GUI [[Python]] e Gtk+, distribuita con Git.
* [http://jonas.nitro.dk/tig/ tig] è un'interfaccia testuale a pieno schermo basata su [[ncurses]] per Git".
* git-browser è un programma di consultazione della cronologia scritto in [[JavaScript]] che è utilizzabile in un browser web. (Pare che non consenta di esaminare le modifiche al codice, ma solo le descrizioni.)
 
== Note ==
<references/>
 
== Voci correlate ==
* [[BazaarMichael (software)Faraday]]
* [[ControlloFrancesco versioneDe Sanctis]]
*[[Interazione elettromagnetica]]
* [[Controllo versione distribuito]]
* [[Gerrit]]
* [[Subversion]]
 
==Note==
== Altri progetti ==
<references />
{{interprogetto}}
 
== Collegamenti esterni ==
* {{Collegamenti esterni}}
* {{cita web|http://web.tiscali.it/itcvieste/viestani/fazzini.htm|Pagina dedicata a Lorenzo Fazzini}}
* {{Cita web|url=https://www.youtube.com/watch?v=4XpnKHJAok8|titolo=Tech Talk: Linus Torvalds su Git|20 luglio 2014|lingua=en}}
* {{cita web|http://www.retegargano.it/index.php/notizie/cultura/item/25889|Vieste - LORENZO FAZZINI, IL PIU' FAMOSO DEI VIESTANI ILLUSTRI}}
 
{{Controllo di autorità}}
{{Portale|Informaticabiografie|Software liberofilosofia|fisica|matematica}}