Controlul Versiunilor

Glosar:

Repository (repo): Locația centrală unde se păstrează versiunile fișierelor.

Repo Server: Serverul care găzduiește un repository.

Client: Calculatorul care se conectează la serverul repo și execută operațiuni gen checkout/add/remove/commit.

Working Copy: Copia locală (pe calculatorul client) a unui proiect, de obicei descărcată de pe repository.

Revision: O versiune a unui document. (v1, v2, v3...).

Trunk/Main: Directorul rădăcină de pe serverul repo.

Head: Cea mai nouă versiune din repository.

Add: Adaugă un fișier în repository, încarcă un fișier în repository.

Check out: Descarcă un fișier/proiect de pe repository.

Commit: Înregistrează o nouă versiune în repository a unui fișier (colecție de fișiere) modificat(ă).

Commit Message: Un mesaj asociat unei acțiuni commit care descrie schimbările făcute în noua versiune "commit-uită".

Changelog: O listă a versiunilor(commit-urilor) unui fișier/proiect de obicei însoțită de mesajele asociate fiecărui commit.

Diff: Afișează diferențele dintre două versiuni a unui fișier sau dintre fișierul modificat local (pe working copy) și o versiune de pe repository.

Update/Pull: O sincronizare a fișierelor din working copy cu ultima versiune descărcată de pe repository. Update-ul nu "urcă" nimic pe repository, doar aduce ultimele modificări de pe server;

Revert: Renunțarea la ultimele modificări (locale) făcute într-un fișier din working copy, și revenirea la ultima versiune aflată în repository sau la o versiune la alegere.

Branch: Creează o “copie” a unui fișier/proiect pentru modificări “în paralel” fără a afecta starea actuală a unui proiect.

Merge: Aplică ultimele modificări dintr-o versiune a unui fișier peste alt fișier (de obicei se întâmplă la “update” când se descarcă ultimele modificări de pe repository).

Conflict: Situația în care un “merge” nu se poate executa automat și modificările locale sunt în conflict cu modificările de pe repository.

Resolve: Rezolvarea (de obicei manuală) a conflictelor apărute într-un fișier după un merge.

Scurt ghid git (cu github.com)

Pasul de inițializare:

Descărcați fișierul shell din atașamentul paginii:

wget https://sites.google.com/site/besixtwofour/retele-intranet/laboratoare/controlul-versiunilor/init-the-git.sh

chmod +x init-the-git.sh

sh init-the-git.sh

Pasul 1:

După logarea pe site-ul github.com apasați

și alegeți un nume pentru noul vostru proiect.

Pasul 2:

Deschideți un Terminal (apăsați tasta Windows (

) apoi tastați "Terminal")

Pasul 3:

Creați un subdirector în directorul /home/student cu numele proiectului pe care l-ați ales la Pasul 1.

mkdir Proiect1

cd Proiect1/

Pasul 4:

Inițializați un nou proiect git:

git init

Initialized empty Git repository in /home/student/School/Proiect1/.git/

Pasul 5:

Creați și editați un nou fișier (sau mai multe fișiere) pentru noul vostru proiect:

touch README

gedit README

Pasul 6:

Verificați starea repository-ului git utilizând comanda git status:

git status

# On branch master

#

# Initial commit

#

# Untracked files:

# (use "git add <file>..." to include in what will be committed)

#

# README

nothing added to commit but untracked files present (use "git add" to track)

Observați că fișierul README nu este încă adăugat la secțiunea "Tracked files", adică fișiere pentru care git va ține o evidență.

Pasul 7:

Adăugați fișierul nou creat in repository-ul git și verificați din nou starea repository-ului:

git add README

git status

# On branch master

#

# Initial commit

#

# Changes to be committed:

# (use "git rm --cached <file>..." to unstage)

#

# new file: README

#

Observați că fișierul nu se mai află în starea "Untracked". El este pregătit pentru primul "commit", adică prima înregistrare in repository-ul git al proiectului vostru.

Pasul 8:

Salvați modificările (commit) în repository-ul git:

git commit -m "Initial commit" README

[master (root-commit) 2621cd5] Initial commit

1 files changed, 1 insertions(+), 0 deletions(-)

create mode 100644 README

Pasul 9:

Agăugați o "originie", un repository din internet spre care veți trimite ultimele modificări, starea actuală a proiectului, etc. Acest repository "origin" se afla pe domeniul github.com.

Atenție: doar link-ul HTTP va funcționa în rețeaua laboratorului deoarece protocolul SSH nu este accesibil.

git remote add origin https://student@github.com/student/Proiect1.git

Normal după această operațiune nu urmează niciun mesaj de confirmare. Pentru a verifica adăugarea corectă folosiți:

git remote show origin

Password:

* remote origin

Fetch URL: https://student@github.com/student/Proiect1.git

Push URL: https://student@github.com/student/Proiect1.git

HEAD branch: (unknown)

Pasul 10:

Trimiteți ultimele modificări locale înspre repository-ul remote:

git push origin master

Password:

Counting objects: 3, done.

Writing objects: 100% (3/3), 244 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

To https://student@github.com/student/Proiect1.git

* [new branch] master -> master

Pasul 11:

Verificați site-ul github.com apasănd butonul "Source"

Pasul 12:

Introduceți o nouă modificare în fișierul README și apoi verificați din nou starea repository-ului local:

git status

# On branch master

# Changes not staged for commit:

# (use "git add <file>..." to update what will be committed)

# (use "git checkout -- <file>..." to discard changes in working directory)

#

# modified: README

#

no changes added to commit (use "git add" and/or "git commit -a")

Verificați modificările făcute utilizând comanda git diff:

git diff README

diff --git a/README b/README

index bccdfbd..b018eec 100644

--- a/README

+++ b/README

@@ -1 +1,2 @@

This is the README file.

+Nobody cares about the README file. Ever !

Pasul 13:

Salvați și această modificare și trimiteți modificările pe repository-ul github.com:

git add README

git commit -m "Added some wisdom lines" README

[master a4761b9] Added some wisdom lines

1 files changed, 1 insertions(+), 0 deletions(-)

git push origin master

Password:

Counting objects: 5, done.

Delta compression using up to 2 threads.

Compressing objects: 100% (2/2), done.

Writing objects: 100% (3/3), 309 bytes, done.

Total 3 (delta 0), reused 0 (delta 0)

To https://student@github.com/student/Proiect1.git

2621cd5..a4761b9 master -> master

Pasul 14:

Pentru a descărca proiectul de pe site-ul/repository-ul github.com folosiți comanda git clone:

mkdir -p ~/tmp

cd ~/tmp

git clone https://student@github.com/student/Proiect1.git

Cloning into Proiect1...

Password:

remote: Counting objects: 6, done.

remote: Compressing objects: 100% (3/3), done.

remote: Total 6 (delta 0), reused 6 (delta 0)

Unpacking objects: 100% (6/6), done.

cd Proiect1/

ls

README

Info:

https://sites.google.com/site/besixtwofour/retele-intranet/documentatie-unelte