This is an old revision of the document!
Atunci când colaborăm cu alte persoane la un același proiect este necesară folosirea unui sistem de versionare a surselor. Acesta ajută pentru a putea colabora la distanță și rezolvă problemele de partajare ale acelorași surse. Chiar și în cazurile în care suntem singurul dezvoltator al unui proiect, versionarea este indicată pentru că:
Câteva exemple de sisteme de versionare sunt:
O scurtă analiză a acestora găsiți Version control systems.
Pentru SO propunem folosirea git
din varii motive:
Așa cum am precizat anterior, Facultatea de Automatică și Calculatoare pune la dispoziție instanța GitLab, accesibilă tuturor studenților și membrilor facultății. Autentificarea se face pe baza contului de pe site-ul de cursuri.
Dashboard-ul
user-ului autentificat.Profile settings
(dreapta-sus)Profile
. Lăsați-le pe cele de pe curs.cs (adresa de e-mail fiind cea de stud.acs.upb.ro
)Design
)
Profile settings
foarte important este adăugarea unei chei SSH.
$ ssh-keygen
Profile settings
, pagina SSH keys
de pe GitLab va trebui să adăugați această cheie astfel:Add key
.Key
Odată autentificați pe GitLab, din Dashboard
în partea stângă apare următorul meniu:
Projects
: aceasta este pagina de gestionare a proiectelor. Aici puteți vedea toate proiectele în care sunteți implicat: fie ca owner, fie ca viewer/guest, fie ca developer.Activity
: care arată activitatea voastră: dacă v-ați alăturat unui nou proiect, dacă ați creat un nou proiect etc.Groups
: gestionarea grupurilor și vizualizarea grupurilor existente.Milestones
: gestionarea pașilor importanți ce țin de proiectele în care sunteți implicat.Issues
: posibile probleme active într-unul din proiectele voastre.Merge Requests
: oferă posibilitatea combinării branch-ului default (master-ului) cu un altul (în cazul rezolvării unui bug sau adăugării unui feature).Snippets
: bucăți de text ce pot fi făcute private sau publice.Help
: documentație GitLab.Pentru crearea unui nou proiect:
New project
(este un +
în dreapta-sus, lângă butonul de Profile settings
). Import existing repository by URL
Create project
.Members
din cadrul acestui proiect (left side)Reporter
Add users to project
Acum puteți naviga prin fișierele existente în proiect și prin commit-urile din proiect: Files
și Commits
.
Pentru toate temele de la SO se va folosi proiectul l3-so-assignments. Astfel, în acest proiect se vor găsi în final:
Dacă aveți doar 1-multi în acest repo, pentru a adăuga 2-minishell puteți proceda astfel:
$ git clone ... $ cd l3-so-assignments $ mkdir -p 2-minishell/ $ cd 2-minishell/ $ wget http://ocw.cs.pub.ro/courses/_media/so/teme/2-skel-linux.zip $ unzip 2-skel-linux.zip $ rm -fr 2-skel-linux.zip $ wget http://elf.cs.pub.ro/so/res/teme/tema2-checker-lin.zip $ unzip tema2-checker-lin.zip # testele sunt dezarhivate în folderul tema2-checker-lin/ $ rm -fr tema2-checker-lin.zip $ mkdir checker-lin $ mv tema2-checker-lin/* checker-lin/ $ rmdir tema2-checker-lin $ cd ../ $ git add 2-minishell/ $ git commit -m "add Linux skeleton and tests" $ git push
Echipa de SO pune la dispozție un script pentru automatizarea etapelor prezentate în secțiunea anterioară. Astfel, un student nu va trebui să-și creeze singur proiectul în GitLab și să realizeze toate acele operații pentru a-și clona repo-ul, ci doar va rula acest script.
Scriptul este disponibil pe GitHub, în repo-ul public dedicat temelor de SO. Îl puteți descărca local folosind comanda:
wget https://raw.githubusercontent.com/systems-cs-pub-ro/so-assignments/master/so-create-repo.sh
Imaginea următoare prezintă pe scurt entitățile gestionate și acțiunile realizate de către script:
La prima rulare, scriptul va crea un repo privat pe GitLab și o clonă în directorul curent al mașinii unde a fost rulat. În acest moment repo-ul privat al studentului și clona de pe mașina sa vor fi copii fidele ale repo-ului public al temelor de SO.
Inițial scriptul va instala pachetele necesare pentru a rula și va realiza autentificarea cu serverul de GitLab, cerând utilizatorului credențialele de pe curs.cs.pub.ro. Următorul pas este să ofere posibilitatea de a încărca pe GitLab o cheie publică pentru SSH; în cazul în care nu există vreuna pe mașina locală, scriptul va genera o pereche de chei RSA. La final, va adăuga asistenții de SO responsabili de teme ca observatori ai proiectului de pe GitLab.
La următoarele rulări scriptul va încerca să sincronizeze clona locală cu repo-ul public. Astfel, dacă echipa de SO face unele modificări în repo-ul public voi vă puteți actualiza clona locală rulănd scriptul.
Mai departe, puteți interacționa cu repo-ul vostru privat prin git: o operație push va trimite modificările voastre în repo-ul de pe GitLab.
Pentru mai multe informații despre script, urmăriți README-ul asociat repo-ului public de pe GitHub.
Acum vă puteți clona local (puteți clona pe mai multe mașini, însă trebuie să aveți cheia privată corespunzătoare cheii publice de pe GitLab) acest repo folosind link-ul pentru SSH. Exemplu:
$ git clone git@gitlab.cs.pub.ro:nume.prenume/l3-so-assignments.git $ cd l3-so-assignments
Puteți adăuga fișiere noi:
$ vim test.c $ git add test.c $ git commit -m "my first C file" $ git push
Câteva tutoriale pentru folosirea Git sunt: