This shows you the differences between two versions of the page.
so:teme:folosire-gitlab [2019/02/25 10:09] mbarbulescu |
so:teme:folosire-gitlab [2022/03/11 20:00] (current) ionut.mihalache1506 |
||
---|---|---|---|
Line 78: | Line 78: | ||
- Adăugați URL-ul specific repo-ului de teme de SO ce va conține scheletele de cod pentru fiecare temă și testele: | - Adăugați URL-ul specific repo-ului de teme de SO ce va conține scheletele de cod pentru fiecare temă și testele: | ||
- click pe ''Import existing repository by URL'' | - click pe ''Import existing repository by URL'' | ||
- | - adăugați link-ul https://github.com/systems-cs-pub-ro/so-assignments.git | + | - adăugați link-ul https://github.com/systems-cs-pub-ro/so.git |
+ | - în directorul assignments vor fi toate fișierele de care aveți nevoie | ||
- Click ''Create project''. | - Click ''Create project''. | ||
- După ce proiectul a fost creat, selectați tab-ul ''Members'' din cadrul acestui proiect (left side) | - După ce proiectul a fost creat, selectați tab-ul ''Members'' din cadrul acestui proiect (left side) | ||
- | - adăugați următorii useri: Mihai Bărbulescu (3172), Adrian Șendroiu (1701), Răzvan Tudor Crainea, Vladimir Diaconescu, Costin Lupu, Iustin Dumitrescu, Alexandru Jercăianu, George Muraru, Alex Morega, Bogdan Purcăreață (2086) | + | <hidden>- adăugați useri corespunzători: Mihai Bărbulescu (3172), Adrian Șendroiu (1701), Răzvan Tudor Crainea, George Muraru, Adrian-Mirel LUŢAN, Gabriel BERCARU (78505), Ionuț MIHALACHE (87724)</hidden> |
- | - dați-le dreptul de access ''Reporter'' | + | - adăugați useri corespunzători(cineva din subechipa de teme pe baza username-ului de pe Microsoft Teams) |
+ | - dați-le dreptul de access ''Maintainer'' | ||
- click pe ''Add users to project'' | - click pe ''Add users to project'' | ||
Line 97: | Line 99: | ||
Dacă aveți doar 1-multi în acest repo, pentru a adăuga 2-minishell puteți proceda astfel: | Dacă aveți doar 1-multi în acest repo, pentru a adăuga 2-minishell puteți proceda astfel: | ||
- | <code> | + | <code bash> |
- | $ git clone ... | + | git clone ... |
- | $ cd l3-so-assignments | + | cd l3-so-assignments |
- | $ mkdir -p 2-minishell/ | + | mkdir -p 2-minishell/ |
- | $ cd 2-minishell/ | + | cd 2-minishell/ |
- | $ wget http://ocw.cs.pub.ro/courses/_media/so/teme/2-skel-linux.zip | + | wget http://ocw.cs.pub.ro/courses/_media/so/teme/2-skel-linux.zip |
- | $ unzip 2-skel-linux.zip | + | unzip 2-skel-linux.zip |
- | $ rm -fr 2-skel-linux.zip | + | rm -fr 2-skel-linux.zip |
- | $ wget http://elf.cs.pub.ro/so/res/teme/tema2-checker-lin.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/ | + | unzip tema2-checker-lin.zip # testele sunt dezarhivate în folderul tema2-checker-lin/ |
- | $ rm -fr tema2-checker-lin.zip | + | rm -fr tema2-checker-lin.zip |
- | $ mkdir checker-lin | + | mkdir checker-lin |
- | $ mv tema2-checker-lin/* checker-lin/ | + | mv tema2-checker-lin/* checker-lin/ |
- | $ rmdir tema2-checker-lin | + | rmdir tema2-checker-lin |
- | $ cd ../ | + | cd ../ |
- | $ git add 2-minishell/ | + | git add 2-minishell/ |
- | $ git commit -m "add Linux skeleton and tests" | + | git commit -m "add Linux skeleton and tests" |
- | $ git push | + | git push |
</code> | </code> | ||
Line 174: | Line 176: | ||
<note tip> | <note tip> | ||
- | Dacă vreți să faceți și ceva practic și să învățați //"git by doing"// cea mai bună resursă este | + | Dacă vreți să faceți și ceva practic și să învățați //"git by doing"// cea mai bună resursă este http://gitimmersion.com/ |
+ | |||
+ | Pentru ce vă trebuie la SO primele 26 de laboratoare sunt cele mai bune. | ||
</note> | </note> | ||
Line 184: | Line 188: | ||
Este important să setăm numele și email-ul nostru în git deoarece fiecare commit va conține aceste informații. Pentru a face acest lucru urmărim următorii pași: | Este important să setăm numele și email-ul nostru în git deoarece fiecare commit va conține aceste informații. Pentru a face acest lucru urmărim următorii pași: | ||
- | <code> | + | <code bash> |
- | $ git config --global user.name "Mr. Perfect" | + | student@vagrant:~$ git config --global user.name "Mr. Perfect" |
- | $ git config --global user.email mr@perfect.com | + | student@vagrant:~$ git config --global user.email mr@perfect.com |
</code> | </code> | ||
Line 193: | Line 197: | ||
=== Simple tutorial === | === Simple tutorial === | ||
- | Acum că avem numele și email-ul setate, putem trece mai departe. Primul pas în lucrul cum git este să inițializăm un repository local în directorul în care vom păstra toate fișierele din temă. | + | Acum că avem numele și email-ul setate, putem trece mai departe. Primul pas în lucrul cu git este să inițializăm un repository local în directorul în care vom păstra toate fișierele din temă. |
- | <code> | + | <code bash> |
- | $ git init | + | student@vagrant:~$ git init |
</code> | </code> | ||
Vrem să asociem repository-ul nostru local cu unul pe server. Fie că folosim Gitlab, Github, Bitbucket sau orice altă variantă, pașii de urmat sunt neschimbați. Repository-ul precizat trebuie să existe de dinainte. | Vrem să asociem repository-ul nostru local cu unul pe server. Fie că folosim Gitlab, Github, Bitbucket sau orice altă variantă, pașii de urmat sunt neschimbați. Repository-ul precizat trebuie să existe de dinainte. | ||
- | <code> | + | <code bash> |
- | $ git remote add origin link_to_online_repo | + | student@vagrant:~$ git remote add origin link_to_online_repo |
</code> | </code> | ||
Line 211: | Line 215: | ||
După ce am terminat de editat fișierul, îl adăugăm în repository folosind comanda ''add''. E util ca fiecare schimbare pe care o comitem să fie asociată cu un mesaj **scurt și la obiect** pentru a ști ulterior **exact** ce schimbare a fost produsă cu acel commit. | După ce am terminat de editat fișierul, îl adăugăm în repository folosind comanda ''add''. E util ca fiecare schimbare pe care o comitem să fie asociată cu un mesaj **scurt și la obiect** pentru a ști ulterior **exact** ce schimbare a fost produsă cu acel commit. | ||
- | <code> | + | <code bash> |
- | $ touch .gitignore | + | student@vagrant:~$ touch .gitignore |
- | + | # evităm adăugarea fișierelor obiect | |
- | $ echo "*.o" >> .gitignore # evităm adăugarea fișierelor obiect | + | student@vagrant:~$ echo "*.o" >> .gitignore |
- | + | student@vagrant:~$ git add .gitignore | |
- | $ git add .gitignore | + | student@vagrant:~$ git commit -m "added .gitignore file to repo" |
- | + | ||
- | $ git commit -m "added .gitignore file to repo" | + | |
</code> | </code> | ||
Pentru a publica schimbările locale și pe server, folosim comanda ''push''. | Pentru a publica schimbările locale și pe server, folosim comanda ''push''. | ||
- | <code> | + | <code bash> |
- | $ git push origin master | + | student@vagrant:~$ git push origin master |
</code> | </code> | ||
Line 233: | Line 235: | ||
În momentul în care ne apucăm de temă, ne vom gândi întotdeauna care sunt milestone-urile pe care le atingem pe parcursul ei. Spre exemplu, putem împărți o tema noastră în următoarele etape: | În momentul în care ne apucăm de temă, ne vom gândi întotdeauna care sunt milestone-urile pe care le atingem pe parcursul ei. Spre exemplu, putem împărți o tema noastră în următoarele etape: | ||
- | * definirea structurilor necesare rezolvării temei (cel puțin în faza preliminară, putem face modificări asupra lor ulterior) | + | * definirea structurilor necesare rezolvării temei (cel puțin în faza preliminară, putem face modificări asupra lor ulterior) |
- | + | * citirea și parsarea datelor de intrare (citirea operațiilor care trebuie efectuate asupra listei, pe rând) | |
- | * citirea și parsarea datelor de intrare (citirea operațiilor care trebuie efectuate asupra listei, pe rând) | + | * rezolvarea primelor 5 teste (toate acoperă diverse cazuri legate de adăugarea unui element în listă: la început, la mijloc, la final) |
- | + | * rezolvarea următoarelor 5 teste (toate acoperă diverse cazuri în care se șterg elemente din listă: primul element, ultimul element, element după valoare) | |
- | * rezolvarea primelor 5 teste (toate acoperă diverse cazuri legate de adăugarea unui element în listă: la început, la mijloc, la final) | + | * rezolvarea următoarelor 5 teste (referitoare la sortarea unei liste simplu înlănțuite) |
- | * rezolvarea următoarelor 5 teste (toate acoperă diverse cazuri în care se șterg elemente din listă: primul element, ultimul element, element după valoare) | + | * rezolvarea următoarelor 3 teste (mixte, adăugări, ștergeri, sortări, iar adăugări etc) |
- | * rezolvarea următoarelor 5 teste (referitoare la sortarea unei liste simplu înlănțuite) | + | * rezolvarea următoarelor 2 teste (referitoare la eliberarea corectă a memoriei în momentul ștergerii unuia sau mai multor elemente din listă) |
- | * rezolvarea următoarelor 3 teste (mixte, adăugări, ștergeri, sortări, iar adăugări etc) | + | * eventuale modificări de coding-style (după nevoie) |
- | * rezolvarea următoarelor 2 teste (referitoare la eliberarea corectă a memoriei în momentul ștergerii unuia sau mai multor elemente din listă) | + | |
- | * eventuale modificări de coding-style (după nevoie) | + | |
Este bine ca după fiecare pas enumerat să salvăm versiunea de cod din mai multe motive: | Este bine ca după fiecare pas enumerat să salvăm versiunea de cod din mai multe motive: | ||
- | 1. putem, din neatenție, oboseală sau grabă, să stricăm ce avem până în momentul de față și să ne vină prea greu să revenim la varianta bună de cod | + | - Putem, din neatenție, oboseală sau grabă, să stricăm ce avem până în momentul de față și să ne vină prea greu să revenim la varianta bună de cod |
- | 2. organizare mai bună | + | - Organizare mai bună |
- | 3. [În cazul lucrului în echipă] se poate vedea cine a făcut o anumită schimbare a codului | + | - **În cazul lucrului în echipă**: se poate vedea cine a făcut o anumită modificare a codului |
Așadar, după fiecare pas trebuie să publicăm schimbările. Vom folosi următoarele comenzi: | Așadar, după fiecare pas trebuie să publicăm schimbările. Vom folosi următoarele comenzi: | ||
- | <code> | + | <code bash> |
- | $ git add changed_file1 changed_file2 # toate fișierele modificate | + | # toate fișierele modificate |
- | $ git commit -m "first 5 tests working" # să zicem că am trecut de primele 5 teste | + | student@vagrant:~$ git add changed_file1 changed_file2 |
- | $ git push origin master | + | # să zicem că am trecut de primele 5 teste |
+ | student@vagrant:~$ git commit -m "first 5 tests working" | ||
+ | student@vagrant:~$ git push origin master | ||
</code> | </code> | ||
Line 261: | Line 264: | ||
Am continuat cu rezolvarea temei și mi-am dat seama că ceva nu e în regulă și aș vrea să revin la o versiunea în care mergeau doar primele 5 teste. Vom folosim mai întâi comanda git log | Am continuat cu rezolvarea temei și mi-am dat seama că ceva nu e în regulă și aș vrea să revin la o versiunea în care mergeau doar primele 5 teste. Vom folosim mai întâi comanda git log | ||
- | <code> | + | <code bash> |
- | $ git log | + | student@vagrant:~$ git log |
commit ca82a6dff817ec66f44342007202690a93763949 | commit ca82a6dff817ec66f44342007202690a93763949 | ||
Author: Mr. Perfect <mr@perfect.com> | Author: Mr. Perfect <mr@perfect.com> | ||
Line 295: | Line 298: | ||
Pentru a ne întoarce la această variantă folosim comanda: | Pentru a ne întoarce la această variantă folosim comanda: | ||
- | <code> | + | <code bash> |
- | $ git revert ca82a6dff817ec66f44342007202690a93763969 | + | student@vagrant:~$ git revert ca82a6dff817ec66f44342007202690a93763969 |
</code> | </code> | ||
Line 305: | Line 308: | ||
Până acum am vorbit de ''commit'' ca fiind modul prin care diferențiem o versiune de cod de alta. Acest lucru este de regulă folosit în contextul unui branch. Pentru un întreg repository folosim ''tags'' pentru a versiona codul. Pentru mai multe detalii în ceea ce privește tag-urile folosite în lumea git, tipuri de tag-uri și modul în care pot fi create și gestionate, consultați pagina de aici [[https://git-scm.com/book/en/v2/Git-Basics-Tagging|aici]]. | Până acum am vorbit de ''commit'' ca fiind modul prin care diferențiem o versiune de cod de alta. Acest lucru este de regulă folosit în contextul unui branch. Pentru un întreg repository folosim ''tags'' pentru a versiona codul. Pentru mai multe detalii în ceea ce privește tag-urile folosite în lumea git, tipuri de tag-uri și modul în care pot fi create și gestionate, consultați pagina de aici [[https://git-scm.com/book/en/v2/Git-Basics-Tagging|aici]]. | ||
- | </hidden> | ||
===== Resurse ===== | ===== Resurse ===== | ||
* [[https://docs.joyent.com/jpc/getting-started-with-your-joyent-cloud-account/generating-an-ssh-key/generating-an-ssh-key-manually/manually-generating-your-ssh-key-in-windows|Generare cheie SSH Windows Putty]] | * [[https://docs.joyent.com/jpc/getting-started-with-your-joyent-cloud-account/generating-an-ssh-key/generating-an-ssh-key-manually/manually-generating-your-ssh-key-in-windows|Generare cheie SSH Windows Putty]] |