Facile controllo della versione con Git

Hai mai lavorato a un progetto così complicato, hai avuto paura di aggiornare un file o aggiungere una funzione? Forse il problema era che non stavi usando un sistema di controllo della versione. Nel tutorial di oggi, impareremo le basi di ciò che potrebbe essere il miglior VCS del mondo: Git.

Cos'è Git?

Git è uno strumento di gestione dei codici open source; è stato creato da Linus Torvalds mentre stava costruendo il kernel di Linux. A causa di quelle radici, doveva essere molto veloce; che è, e facile da imparare. Git ti consente di lavorare sul tuo codice con la massima tranquillità che tutto ciò che fai è reversibile. Rende facile sperimentare nuove idee in un progetto e non preoccuparti di rompere nulla. The Git Parable, di Tom Preston-Werner, è una grande introduzione ai termini e alle idee di Git.

Perché dovrei usare Git?

Dovresti assolutamente usare un sistema di controllo di revisione; come abbiamo già detto, questo ti dà la libertà di fare tutto ciò che vuoi con il tuo codice e non preoccuparti di romperlo. Quindi, se hai compreso i vantaggi dell'uso di un sistema di controllo di revisione, perché dovresti usare git? Perché non SVN o Perforce o un altro? Per essere onesti, non ho studiato le differenze troppo da vicino; controlla WhyGitIsBetterThanX.com per alcune informazioni utili.

Come posso ottenere istituito?

Git è abbastanza facile da ottenere: su un Mac, è probabilmente più facile usare git-osx-installer. Se hai installato MacPorts, ti consigliamo di farlo con Git; puoi trovare le istruzioni sul sito di aiuto di GitHub. (E sì, parleremo di GitHub). Su Windows, il modo più semplice per iniziare a scorrere è usare il programma di installazione di msysgit. Tuttavia, se hai Cygwin, puoi scattare Git anche da lì.

Come uso Git?

A questo punto dovresti installare Git; se sei su un Mac, apri un terminale; se sei su Windows apri Git Bash (da msysgit) o ​​il tuo prompt Cygwin. Da qui in poi, non dovrebbero esserci differenze di sistema operativo.

Configurazione

Inizieremo facendo un po 'di configurazione. Ogni commit effettuato avrà il tuo nome e il tuo indirizzo email per identificare il "proprietario" del commit, quindi dovresti iniziare assegnandogli quei valori. Per fare ciò, esegui questi comandi:

 git config --global user.name "Il tuo nome" git config --global user.email "[email protected]" 

È anche utile abilitare la colorazione del testo, solo per facilitare la lettura nel terminale.

 git config --global color.diff auto git config --global color.status auto git config --global color.branch auto

git init

Ora che Git sa chi sei, immaginiamo di creare una semplice web app PHP. (Naturalmente, più grande è il progetto, il più luminoso Git brilla, ma stiamo solo imparando gli strumenti, giusto?) Abbiamo una directory vuota chiamata "mySite". Prima concentrati su quella directory (usando il comando cd). Per iniziare con Git, devi eseguire il comando git init; come puoi immaginare, questo inizializza un repository Git in quella cartella, aggiungendo una cartella .git al suo interno. Un repository è come un libro di storia del codice. Terrà tutte le versioni precedenti del tuo codice, oltre a quella attuale.

Si noti che il percorso del terminale viene aggiunto con (master). Questo è il ramo su cui stai attualmente lavorando. Ramo? Pensa al tuo progetto come ad un albero; puoi creare diverse funzionalità su diversi rami e tutto rimarrà separato e sicuro.

aggiungi git

Abbiamo iniziato a lavorare sulla nostra applicazione.

Prima di andare oltre, dovremmo fare il nostro primo impegno. Un commit è semplicemente un puntatore a un punto della cronologia del codice. Prima di poterlo fare, tuttavia, dobbiamo spostare tutti i file che vogliamo far parte di questo commit nell'area di staging. L'area di gestione temporanea è un punto in cui tenere i file per il prossimo commit; forse non vuoi impegnare tutte le tue modifiche attuali, quindi metti un po 'nell'area di staging. Possiamo farlo usando il comando add

 aggiungi git . 

Il . significa semplicemente aggiungere tutto. Potresti essere più specifico se lo volessi.

 git aggiungi * .js git aggiungi index.php 

Git commit

Ora che abbiamo messo in scena i nostri file, impegniamoli. Questo è fatto con il comando

 Git commit 

Questo prende tutti i file nella nostra area di staging e contrassegna quel codice come un punto nella storia del nostro progetto. Se non si aggiungono opzioni al comando precedente, si otterrà qualcosa di simile.

Ogni commit dovrebbe avere un messaggio di accompagnamento, quindi sai perché è stato eseguito il commit di quel codice. Questo editor ti consente di scrivere il tuo messaggio e di vedere cosa c'è in questo commit. Dall'immagine sopra, puoi vedere che questo commit è composto da quattro nuovi file. L'editor che stai usando per scrivere il messaggio è Vim; se non hai familiarità con vim, sappi che dovrai premere i (per Insert) prima di poter digitare il tuo messaggio. Nell'immagine sopra, ho aggiunto il messaggio "Initial Commit". Dopo aver scritto il tuo messaggio, premi Esc e scrivi: wq (per salvare e uscire). Vedrai quindi che tieni il commit.

Puoi utilizzare alcune opzioni per eseguire i commit più rapidamente. Innanzitutto, -m ti consente di aggiungere il tuo messaggio in linea.

 git commit -m "initial commit" 

Quindi, -a consente di saltare l'area di gestione temporanea; Beh, non proprio. Git metterà automaticamente in scena e commetterà tutti i file modificati quando usi questa opzione. (ricorda, non aggiungerà nuovi file). Insieme, potresti usare questi comandi in questo modo:

 git commit -am 'update to index.php' 

Quindi, come fa Git a distinguere gli impegni? Invece di numerarli, Git usa il contenuto del codice del commit per creare un hash SHA1 di 40 caratteri. La parte netta su questo è che, dal momento che sta usando il codice per creare l'hash, non ci saranno due hash nel tuo progetto, a meno che il codice nei commit sia identico.

stato git

Il stato git comando ti permette di vedere lo stato attuale del tuo codice. Abbiamo appena fatto un commit, quindi stato git ci mostrerà che non c'è niente di nuovo.

Se continuiamo a lavorare sul nostro progetto immaginario, vedrai che il nostro stato cambia. Ho intenzione di modificare il nostro index.php e aggiungere un altro file. Ora, correndo stato git ci dà questo:

L'aggiornamento è diviso in due categorie: "modificato ma non aggiornato" e "file non tracciati". Se corriamo

 git aggiungi userAuthentication.php stato git 

vedrai che ora abbiamo una sezione "modifiche da impegnare". Questo elenca i file aggiunti all'area di staging. Ho intenzione di commettere questi cambiamenti con questo:

 git commit -am 'codice di autenticazione utente aggiunto' 

Ora in esecuzione stato git ci mostra una directory di lavoro pulita.

git branch / git checkout

Ecco uno scenario: stiamo lavorando felicemente al nostro progetto quando improvvisamente avremo una grande idea. Questa idea è così rivoluzionaria che cambierà drasticamente il nostro progetto. Dobbiamo fare un tentativo, ma non vogliamo lanciare questo codice insicuro e in prima bozza con il nostro codice testato e vero. Cosa fare? Qui è dove ramo di git sarà immensamente utile. Esaminiamo il nostro progetto in modo che se la nostra grande idea non funziona, non c'è nulla di male.

 ramo di git 

Basta eseguire il comando branch sans le opzioni elencheranno i nostri rami; in questo momento, abbiamo solo il ramo master, che è ciò che inizia con ogni repository git. Per creare effettivamente un nuovo ramo, aggiungi il nome del tuo nuovo ramo dopo il comando.

 git branch bigIdea 

Quando si crea un nuovo ramo, non si passa automaticamente ad esso. Si noti che il nostro terminale dice ancora (master). Questo è il punto in cui usiamo il comando comba branch git checkout.

 git checkout bigIdea 

(Suggerimento: puoi creare un ramo e passare ad esso in un colpo solo con questo comando: git checkout -b nome del ramo.) Come puoi vedere, siamo ora nella sezione bigIdea. Risolviamo una tempesta. Stato Git mostrerà il nostro lavoro.

Apportiamo le nostre modifiche:

 aggiungi git. git commit -m 'Aggiunta la caratteristica di Kiler' 

Va bene, abbastanza di questa funzionalità per ora; torniamo al nostro ramo principale; ma prima di farlo, voglio mostrarti la nostra cartella di progetto corrente.

Ora, torna al ramo principale; tu sai come:git checkout master. Guarda di nuovo la nostra cartella del progetto.

No, non ho fatto niente; quei due file sono solo una parte del ramo bigIdea, quindi non sappiamo nemmeno che esistano dal ramo master. Questo non funziona solo per i file completi, ma anche per i più piccoli cambiamenti all'interno dei file.

git si fondono

Ok, quindi abbiamo lavorato duramente su quel ramo bigIdea nel nostro tempo libero. In effetti, dopo un altro commit, sembra così dolce che abbiamo deciso che è sufficiente per entrare nel master branch. Quindi come lo facciamo?

Il git si fondono il comando è fatto esattamente per questo scopo. Mentre sei nel ramo principale, prova questo:

 git unire bigIdea 

È così facile; ora, tutto sul ramo bigIdea fa parte del ramo principale. Se vuoi, puoi sbarazzarti della filiale BigIdea adesso.

 git branch -d bigIdea

Devo dire che se non hai unito un ramo, Git non ti permetterà di cancellarlo con questo comando; dovrai usare una D maiuscola nell'opzione. Questa è solo una misura di sicurezza.

git log / gitk

Probabilmente vorrai guardare la cronologia dei tuoi commit in qualche momento durante il tuo progetto. Questo può essere fatto facilmente con il comando di registro.

 log git 

Questo mostrerà un elenco di tutti i commit che hai fatto in un progetto, mostrandoli in ordine inverso. È possibile ottenere un bel po 'di informazioni qui:

  • l'autore del commit
  • l'hash del commit
  • la data e l'ora
  • il messaggio

Decisamente informativo, ma piuttosto asciutto, no? Possiamo illuminare un po 'le cose con l'opzione del grafico.

 git log --graph 

Ora possiamo vedere la struttura ad albero, una specie di. Anche se non otteniamo i loro nomi, possiamo vedere ciascuno dei rami e quali sono stati fatti i commit su di essi. Se sei abituato a lavorare in un terminale, potresti stare bene con questo. Tuttavia, se (precedente a questa esperienza) la parola terminale ti colpisce prima come qualcosa di mortale, facile da respirare: c'è un'app per questo. Prova questo:

 gitk: tutti 

Questo è il browser grafico del repository. Puoi sfogliare i tuoi commit, vedere esattamente cosa è stato cambiato in ogni file durante un commit e molto altro ancora. (Noterai che ho aggiunto alcuni commit prima di unirli, solo per rendere più riconoscibile la struttura ad albero).

GitHub

Ora che hai una conoscenza ragionevole di Git sotto la tua cintura, diamo un'occhiata ad alcune delle parti collaborative di Git. Git è un ottimo modo per condividere il codice con gli altri e lavorare insieme ai progetti. Ci sono un certo numero di repository Git che ospitano siti. Ne vedremo uno: GitHub.

Vai alla pagina di registrazione di GitHub e crea un account. Avrai bisogno di una chiave pubblica SSH, quindi creandola subito! (Nota: non hai bisogno della chiave durante la registrazione, puoi aggiungerla in seguito).

Apri il tuo terminale e digita questo:

 ssh-keygen -t rsa -C "[email protected]" 

L'opzione t assegna un tipo e l'opzione C aggiunge un commento, tradizionalmente il tuo indirizzo email. Ti verrà quindi chiesto dove salvare la chiave; basta premere invio per fare (che salva il file nella posizione predefinita). Quindi, inserisci una passphrase, due volte. Ora hai una chiave; Diamo a GitHub.

Per prima cosa, prendi la tua chiave dal file; il terminale ti avrà detto dove è stata memorizzata la chiave; apri il file, copia la chiave (fai attenzione a non aggiungere nessuna nuova riga o spazio bianco). Aprire la pagina dell'account GitHub, scorrere fino a SSH Public Keys e fare clic su "Aggiungi un'altra chiave pubblica". Incollare la chiave e salvarla. Sei a posto! Puoi testare la tua autenticazione eseguendo questo:

 ssh [email protected] 

Ti verrà richiesta la tua pass-frase; per evitare di dover digitare questo ogni volta che ti connetti a GitHub, puoi automatizzarlo. Potrei dirti come farlo, ma probabilmente avrei inavvertitamente plagiato: l'Aiuto GitHub ha un semplice articolo in inglese su come farlo.

Git Clone

Quindi ora sei impostato con GitHub; prendiamo un progetto. Che ne dici di jQuery? Se vai al progetto jQuery GitHub, troverai l'URL clone clone. Esegui questo:

 git clone git: //github.com/jquery/jquery.git 

Questo crea una cartella jquery e copia l'intero repository jQuery sul tuo computer. Ora hai una storia completa del progetto; controllalo con gitk -all.

spingere

Quindi diciamo che hai lavorato su un progetto, gestendolo con git localmente. Ora vuoi condividerlo con un amico o il mondo. Accedi a GitHub e crea un nuovo repository. GitHub ti fornirà un URL clone pubblico (per gli altri che vogliono scaricare il tuo progetto) e un URL clone personale (per te).

Quindi, torna al tuo progetto nel terminale e fai un vortice:

 git remote add origin [email protected]: andrew8088 / Shazam.git 

Un telecomando è un repository di progetto in una posizione remota. In questo caso, stiamo dando a questo telecomando un nome di origine e consegnandolo al nostro URL clone privato. (Ovviamente, dovrai sostituire il mio URL per il tuo.) Ora che il progetto sa dove sta andando ...

 git push origin master 

Questo spinge il ramo master verso il telecomando di origine. Ora il tuo progetto è disponibile per il mondo! Torna alla pagina del tuo progetto e guarda il tuo progetto.

tira fuori

Potresti essere dall'altra parte di un progetto: sei un contributore invece del proprietario. Quando il proprietario inserisce un nuovo commit nel repository, puoi utilizzare tira fuori per ottenere gli aggiornamenti. Tirare Git è in realtà uno strumento combo: funziona git fetch (ottenendo i cambiamenti) e git si fondono (unendoli con la tua copia attuale).

 tira fuori 

Sei Set!

Bene, c'è molto di più che puoi imparare su Git; spero che tu abbia imparato abbastanza comandi per aiutarti a gestire il tuo prossimo progetto in modo più intelligente. Ma non fermarti qui; controlla queste risorse per diventare un maestro Git!

  • Git, GitHub e Social Coding (Teatro YUI)
  • Centro di apprendimento GitHub
  • Gitcasts.com: screencast su Git
  • Il sito Git
  • Il mio Git Evernote-book pubblico
  • Seguici su Twitter o iscriviti al feed Nettuts + RSS per i migliori tutorial di sviluppo web sul web.