## page was renamed from jepessen/Prove/Git <
> <> <> = Introduzione = '''Git''' è un sistema di controllo di versione distribuito ('''[[https://it.wikipedia.org/wiki/Controllo_versione_distribuito|DVCS]]''' - '''D'''istributed '''V'''ersion '''C'''ontrol '''S'''ystem) utilizzabile da [[AmministrazioneSistema/Terminale|riga di comando]]. Gli aspetti principali riguardano: * tracciare la storia di un progetto e poter lavorare con le versioni precedenti; * permettere la collaborazione di più persone allo stesso progetto; * organizzare e semplificare l'andamento del progetto. A differenza di programmi come [[Programmazione/Cvs|CVS]] o [[Programmazione/Subversion|Subversion]], e in modo simile a [[http://mercurial.selenic.com|Mercurial]] o [[Programmazione/Bazaar|Baazar]], '''Git''' è caratterizzato da una gestione localizzata, ovvero è utilizzabile con repository locali invece che esclusivamente remoti. Sistemi come '''Subversion''' adottano un repository centrale (server o servizio web) in cui risiede il progetto. In tali sistemi, la sincronizzazione del lavoro e il salvataggio delle modifiche (''commit'') avvengono direttamente sul repository centralizzato. Ogni directory di lavoro è un repository autosufficiente. Operazioni come commit, consultazione dei log e molte altre azioni vengono eseguite localmente, senza necessità di un server esterno. La sincronizzazione con altri repository (server centrale, altri PC in rete, ecc.) avviene solo quando necessario. Ciò garantisce maggiore flessibilità e velocità d'esecuzione. {{{#!wiki note Se si utilizza '''[[Ufficio/EditorDiTesto/VisualStudioCode#Git_in_Visual_Studio_Code|Visual Studio Code]]''' per programmare, '''Git''' è integrato nativamente. }}} <> = Installazione = Sebbene l'uso del [[AmministrazioneSistema/Terminale|terminale]] sia il metodo più diretto e completo [[AmministrazioneSistema/InstallareProgrammi/Apt|Installare]] '''Git''', digitare in un [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ sudo apt install git }}} == Interfaccia grafica == '''Git''' include due strumenti storici ad interfaccia grafica basati su Tcl/Tk. Sono essenziali ma molto leggeri e funzionali, per agevolare la visualizzazione dei branch e la gestione dei commit: [[AmministrazioneSistema/InstallareProgrammi/Apt|Installare]] i pacchetti: * '''[[apt://gitk|gitk]]''': Specializzato nella visualizzazione della cronologia e dei branch. * '''[[apt://git-gui|git-gui]]''': Focalizzato sulla creazione dei commit, la gestione dell'area di staging e le operazioni di merge semplici. Essendo leggeri e funzionali '''gitk''' e '''git-gui''' richiedono l'avvio dal [[AmministrazioneSistema/Terminale|terminale]] all'interno della cartella del progetto, digitando i comandi:{{{ gitk }}} o {{{ git-gui }}} === Ottimizzazione in GNOME === Per l'ambiente desktop [[AmbienteGrafico/Gnome|GNOME]] '''Gitg''' offre una visualizzazione moderna e pulita dei [[Programmazione/Git/Commit|commit]] e permette di gestire le operazioni comuni. [[AmministrazioneSistema/InstallareProgrammi/Apt|Installare]] il pacchetto [[apt://gitg|gitg]]. ##=== GitKraken / SmartGit (Proprietari/Avanzati) === ##Esistono client molto potenti e professionali, spesso usati in ambito aziendale: ## * '''!GitKraken''': Esteticamente molto curato, disponibile come pacchetto .deb o tramite Snap. È gratuito per repository pubblici. ## * '''!SmartGit''': Molto completo, gratuito per uso non commerciale. <> = Configurazione base = Dopo l'[[#Installazione|installazione]] è necessario definire l'identità dell'utente per firmare correttamente i [[Programmazione/Git/Commit|commit]]. == Identificazione utente nei progetti == Impostare il '''nome utente''' e l''''indirizzo e-mail''' da utilizzare globalmente per l'identificazione nei progetti Git, digitare nel [[AmministrazioneSistema/Terminale|terminale]] questi comandi:{{{ git config --global user.name "NOME_UTENTE" git config --global user.email INDIRIZZO_E-MAIL }}}sostituendo le diciture `NOME_UTENTE` e `INDIRIZZO_E-MAIL` con i propri dati. Esempio per l'utente '''Mario Rossi''':{{{ git config --global user.name "Mario Rossi" git config --global user.email mario.rossi@mail.com }}} {{{#!wiki note Le configurazioni globali vengono salvate nel file nascosto `.gitconfig` nella propria directory '''Home'''.<
>Per impostare dati specifici solo per un determinato repository, è sufficiente omettere l'opzione '''--global''' mentre ci si trova all'interno della cartella del progetto. }}} == Impostazione alias lg == Il monitoraggio dell'evoluzione del progetto avviene tramite la consultazione dello storico dei [[Programmazione/Git/Commit|commit]]. '''Git''' fornisce il comando nativo `git log`, tuttavia, per facilitare la lettura dei rami e delle modifiche, è prassi comune impostare un alias '''lg''' che fornisca una rappresentazione grafica, colorata e sintetica, al fine di migliorarne la leggibilità dei rami. {{{#!wiki important Operazione da eseguire una sola volta. }}} Digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ git config --global alias.lg "log --pretty=format:'%C(yellow)%h%Cred%d%Creset - %C(cyan)%an %Creset: %s %Cgreen(%cr)' --decorate --graph --all --abbrev-commit" }}} <> == Visualizzazione della cronologia == Per visualizzare la cronologia, l'andamento dei rami in qualsiasi repository del sistema una sola volta [[#Impostazione_alias_lg|configurato l'alias]] '''lg''', digitare nel [[AmministrazioneSistema/Terminale|terminale]] il seguente comando:{{{ git lg }}} Altrimenti per visualizzare la cronologia testuale semplice, digitare nel [[AmministrazioneSistema/Terminale|terminale]] il comando:{{{ git log }}} <> = Creazione repository = Per creare un '''nuovo progetto''' o per importare (clonare) un '''progetto esistente''', vengono descritte di seguito le procedure. 0. [[AmministrazioneSistema/ComandiBase#mkdir|Creare]] la directory `gitproject` nella propria cartella '''Home''', digitare nel [[AmministrazioneSistema/Terminale|terminale]] i seguenti comandi:{{{ mkdir ~/gitproject }}} 0. [[AmministrazioneSistema/ComandiBase#cd|Spostarsi]] all'interno della cartella creata:{{{ cd ~/gitproject }}} 0. Per inizializzare un repository vuoto, digitare:{{{ git init }}}Verrà creata la cartella nascosta `.git` contenente l'intera cronologia e i dati di controllo e restituito un messaggio simile al seguente:{{{ Inizializzato repository Git vuoto in /home/mario/gitproject/.git/ }}} {{{#!wiki note Si ricorda che tutte le operazioni di gestione del repository (commit, visualizzazione cronologia, gestione branch, ecc.) devono essere eseguite posizionandosi all'interno della directory del progetto (ad esempio tramite il comando `cd ~/gitproject`). In questo modo Git può accedere alla sottocartella nascosta `.git` necessaria per il corretto funzionamento dei comandi. }}} <> = Clonazione repository = * Per scaricare un progetto già esistente su di un server, il comando da eseguire è:{{{ git clone PERCORSO/PROGETTO }}}Verrà creata nella propria '''Home''' una cartella col nome del progetto in cui saranno copiati i contenuti. * Se invece si preferisce clonare il repository in una cartella specifica, basta aggiungere il percorso al comando:{{{ git clone PERCORSO/PROGETTO PERCORSO/LOCALE }}} = Commit = Attraverso il '''commit''' è possibile aggiungere, rimuovere e modificare i file del repository. Consultare la [[Programmazione/Git/Commit|seguente pagina]]. = Branching = '''Git''' permette una gestione avanzata dei '''branch''' (rami di sviluppo). Consultare la [[Programmazione/Git/Branch|seguente pagina]]. = Repository remoti = Tramite gli strumenti '''fetch''', '''pull''' e '''push''' è possibile sincronizzare il lavoro tra diversi utenti. Consultare la [[Programmazione/Git/RepositoryRemoti|seguente pagina]]. = Risoluzioni problemi = == 'lg' is not a git command == Se si prova a digitare `git lg`, '''Git''' restituisce il seguente errore:{{{ git: 'lg' is not a git command. See 'git --help' }}} Il comando `git lg` non esiste nativamente in '''Git''' funziona solo se è stato creato l'[[#Impostazione_alias_lg|alias corrispondente]]. = Ulteriori risorse = * [[http://git-scm.com/|Sito ufficiale del progetto]] * [[http://git-scm.com/doc|Documentazione ufficiale del progetto]] * [[Programmazione|Portale sulla programmazione]] ---- CategoryProgrammazione