Differences

This shows you the differences between two versions of the page.

Link to this comparison view

eim:laboratoare:laborator01 [2018/02/18 20:02]
dragos.niculescu [Gestiunea depozitelor la distanță (obligatoriu)]
eim:laboratoare:laborator01 [2022/05/30 09:46] (current)
dragos.niculescu [Caracteristici (obligatoriu)]
Line 4: Line 4:
  
 ==== Android - Prezentare Generală ===== ==== Android - Prezentare Generală =====
 +<​spoiler>​
 Android este un SO mobil bazat pe o versiune modificată de Linux (pentru gestiunea componentelor hardware, a proceselor și a memoriei) și biblioteci Java (pentru telefonie (audio/​video),​ conectivitate,​ grafică, programarea interfețelor cu utilizatorul). Este un produs open-source (putând fi dezvoltat de producătorii de dispozitive mobile cu extensii proprietare pentru a-și particulariza platforma), dezvoltat în prezent de compania Google, conceput pe ideea transformării dispozitivelor mobile în adevărate mașini de calcul. Google încearcă totuși să realizeze tranziția de la AOSP (Android Open Source Project) către GMS (Google Mobile Services), peste care sunt construite cele mai multe aplicații, în încercarea de a-și apăra acest proiect în fața concurenței. În acest sens, a fost dezvoltat **proiectul Google One**, prin care este oferit un set de specificații (ecran de 4.5 inchi - 845x480 pixeli, procesor quad-core, memorie 1GB RAM, spațiu de stocare 4GB, suport pentru dual sim) pe care producătorii de dispozitive mai ieftine trebuie să le respecte astfel încât acestea să fie compatibile cu un sistem Android, fără a întâmpina probleme de performanță. Acesta include toate aplicațiile și serviciile Google, la care se pot adăuga și altele, furnizate de producător sau operatorul de telefonie mobilă. În acest fel, se asigură calitatea (păstrând renumele Android) și controlul asupra veniturilor. Comunitatea Android este în creștere, mai multe companii renunțând la propriul sistem de operare în favoarea acestuia, pentru a putea face față fenomenului iPhone. Android este un SO mobil bazat pe o versiune modificată de Linux (pentru gestiunea componentelor hardware, a proceselor și a memoriei) și biblioteci Java (pentru telefonie (audio/​video),​ conectivitate,​ grafică, programarea interfețelor cu utilizatorul). Este un produs open-source (putând fi dezvoltat de producătorii de dispozitive mobile cu extensii proprietare pentru a-și particulariza platforma), dezvoltat în prezent de compania Google, conceput pe ideea transformării dispozitivelor mobile în adevărate mașini de calcul. Google încearcă totuși să realizeze tranziția de la AOSP (Android Open Source Project) către GMS (Google Mobile Services), peste care sunt construite cele mai multe aplicații, în încercarea de a-și apăra acest proiect în fața concurenței. În acest sens, a fost dezvoltat **proiectul Google One**, prin care este oferit un set de specificații (ecran de 4.5 inchi - 845x480 pixeli, procesor quad-core, memorie 1GB RAM, spațiu de stocare 4GB, suport pentru dual sim) pe care producătorii de dispozitive mai ieftine trebuie să le respecte astfel încât acestea să fie compatibile cu un sistem Android, fără a întâmpina probleme de performanță. Acesta include toate aplicațiile și serviciile Google, la care se pot adăuga și altele, furnizate de producător sau operatorul de telefonie mobilă. În acest fel, se asigură calitatea (păstrând renumele Android) și controlul asupra veniturilor. Comunitatea Android este în creștere, mai multe companii renunțând la propriul sistem de operare în favoarea acestuia, pentru a putea face față fenomenului iPhone.
  
 În condițiile în care pe piața dispozitivelor mobile aplicațiile sunt cele care aduc avantajul competițional,​ beneficiul Android este reprezentat de abordarea unitară pentru dezvoltarea aplicațiilor. Cu alte cuvinte, o aplicație dezvoltată conform API-ului Android va putea rula pe mai multe dispozitive mobile pe care este instalat sistemul de operare respectiv. În condițiile în care pe piața dispozitivelor mobile aplicațiile sunt cele care aduc avantajul competițional,​ beneficiul Android este reprezentat de abordarea unitară pentru dezvoltarea aplicațiilor. Cu alte cuvinte, o aplicație dezvoltată conform API-ului Android va putea rula pe mai multe dispozitive mobile pe care este instalat sistemul de operare respectiv.
 +
 +</​spoiler>​
  
 ==== Versiuni Android ==== ==== Versiuni Android ====
  
 +<​spoiler>​
 ^ Versiune Android ^ Nivel API ^ Data Lansării ^    Nume de Cod     ^ Cota de Piață ^ ^ Versiune Android ^ Nivel API ^ Data Lansării ^    Nume de Cod     ^ Cota de Piață ^
 +|   ​10 ​     |    29     ​| ​ 03.09.2019 ​  ​| ​     ??          |      0.?%      |
 +|   ​9 ​     |    28     ​| ​ 21.08.2017 ​  ​| ​     Pie          |      0.?%      |
 +|   8.1 - 8.1      |    26-27     ​| ​ 21.08.2017 ​  ​| ​     Oreo          |      0.?%      |
 |   7.1 - 7.1.1    |    25     ​| ​ 04.10.2016 ​  ​| ​     Nougat ​       |      0.3%      | |   7.1 - 7.1.1    |    25     ​| ​ 04.10.2016 ​  ​| ​     Nougat ​       |      0.3%      |
 |       ​7.0 ​       |    24     ​| ​ 22.08.2016 ​  ​| ​     Nougat ​       |      0.9%      | |       ​7.0 ​       |    24     ​| ​ 22.08.2016 ​  ​| ​     Nougat ​       |      0.9%      |
Line 37: Line 43:
 |       ​1.1 ​       |     ​2 ​    ​| ​ 09.02.2009 ​  ​| ​                   |               | |       ​1.1 ​       |     ​2 ​    ​| ​ 09.02.2009 ​  ​| ​                   |               |
 |       ​1.0 ​       |     ​1 ​    ​| ​ 23.09.2008 ​  ​| ​                   |               | |       ​1.0 ​       |     ​1 ​    ​| ​ 23.09.2008 ​  ​| ​                   |               |
 +
 +</​spoiler>​
 +
 +{{:​eim:​laboratoare:​laborator01:​android_api_7.png?​nolink&​600|}}
 +
  
 Pentru identificarea versiunilor se folosesc, de regulă, trei sisteme: Pentru identificarea versiunilor se folosesc, de regulă, trei sisteme:
-  * un număr, ce respectă formatul major.minor[.build],​ desemnând dacă modificările aduse sunt substanțiale sau reprezintă ajustări ale unor probleme identificate anterior; versiunea curentă este 7.1.1, lansată la sfârșitul anului ​2016+  * un număr, ce respectă formatul major.minor[.build],​ desemnând dacă modificările aduse sunt substanțiale sau reprezintă ajustări ale unor probleme identificate anterior; versiunea curentă este 10, lansată la sfârșitul anului ​2019
-  * un nivel de API (același putând grupa un număr de mai multe versiuni), prin care se indică funcționalitățile expuse către programatori;​ versiunea curentă are nivelul de API 25+  * un nivel de API (același putând grupa un număr de mai multe versiuni), prin care se indică funcționalitățile expuse către programatori;​ versiunea curentă are nivelul de API 29
-  * o denumire, având un nume de cod inspirat din lumea dulciurilor;​ termenii respectivi încep cu inițiale care respectă ordinea alfabetică;​ versiunea curentă este Nougat.+  * o denumire, având un nume de cod inspirat din lumea dulciurilor;​ termenii respectivi încep cu inițiale care respectă ordinea alfabetică;​ versiunea curentă este Q.
  
 În momentul în care se ia decizia cu privire la versiunea pentru care se dezvoltă o aplicație Android, trebuie avute în vedere și cotele de piață ale dispozitivelor mobile. Dezvoltarea unei aplicații Android pentru cea mai nouă versiune are avantajul de a se putea utiliza cele mai noi funcționalități expuse prin API. Dezvoltarea unei aplicații Android pentru cea mai veche versiune are avantajul unei adresabilități pe scară largă. Un compromis în acest sens poate fi obținut prin intermediul **bibliotecilor de suport**, dezvoltate pentru fiecare versiune, prin intermediul cărora pot fi utilizate la niveluri de API mai mici funcționalități din niveluri de API mai mari (în limita capabilităților dispozitivului mobil respectiv). Utilizarea acestora reprezintă o practică recomandată în dezvoltarea aplicațiilor Android. În momentul în care se ia decizia cu privire la versiunea pentru care se dezvoltă o aplicație Android, trebuie avute în vedere și cotele de piață ale dispozitivelor mobile. Dezvoltarea unei aplicații Android pentru cea mai nouă versiune are avantajul de a se putea utiliza cele mai noi funcționalități expuse prin API. Dezvoltarea unei aplicații Android pentru cea mai veche versiune are avantajul unei adresabilități pe scară largă. Un compromis în acest sens poate fi obținut prin intermediul **bibliotecilor de suport**, dezvoltate pentru fiecare versiune, prin intermediul cărora pot fi utilizate la niveluri de API mai mici funcționalități din niveluri de API mai mari (în limita capabilităților dispozitivului mobil respectiv). Utilizarea acestora reprezintă o practică recomandată în dezvoltarea aplicațiilor Android.
  
 ==== Arhitectura Android ==== ==== Arhitectura Android ====
 +<​spoiler>​
  
 Arhitectura sistemului de operare Android cuprinde cinci secțiuni grupate pe patru niveluri: Arhitectura sistemului de operare Android cuprinde cinci secțiuni grupate pe patru niveluri:
Line 66: Line 78:
   - **Cadrul pentru Aplicații** expune diferitele funcționalități ale sistemului de operare Android către programatori,​ astfel încât aceștia să le poată utiliza în aplicațiile lor.   - **Cadrul pentru Aplicații** expune diferitele funcționalități ale sistemului de operare Android către programatori,​ astfel încât aceștia să le poată utiliza în aplicațiile lor.
   - La nivelul de **aplicații** se regăsesc atât produsele împreună cu care este livrat dispozitivul mobil (Browser, Calculator, Camera, Contacts, Clock, FM Radio, Launcher, Music Player, Phone, S Note, S Planner, Video Player, Voice Recorder), cât și produsele instalate de pe Play Store sau cele dezvoltate de programatori.   - La nivelul de **aplicații** se regăsesc atât produsele împreună cu care este livrat dispozitivul mobil (Browser, Calculator, Camera, Contacts, Clock, FM Radio, Launcher, Music Player, Phone, S Note, S Planner, Video Player, Voice Recorder), cât și produsele instalate de pe Play Store sau cele dezvoltate de programatori.
 +</​spoiler>​
  
 ==== Funcționalități Android ==== ==== Funcționalități Android ====
 +<​spoiler>​
 De vreme ce Android este un produs open-source,​ producătorii având posibilitatea de a-l modifica în mod gratuit, nu există configurații hardware sau software standard. Totuși, Android implementează următoarele funcționalități:​ De vreme ce Android este un produs open-source,​ producătorii având posibilitatea de a-l modifica în mod gratuit, nu există configurații hardware sau software standard. Totuși, Android implementează următoarele funcționalități:​
   * **stocare** - folosește SQLite, o bază de date relațională ce utilizează resurse puține   * **stocare** - folosește SQLite, o bază de date relațională ce utilizează resurse puține
Line 85: Line 98:
   * **suport pentru aplicații Flash** (până în versiunea 4.3)   * **suport pentru aplicații Flash** (până în versiunea 4.3)
   * **legătură la Internet** - suportă partajarea conexiunilor la Internet ca punct de distribuție cu fir / fără fir   * **legătură la Internet** - suportă partajarea conexiunilor la Internet ca punct de distribuție cu fir / fără fir
 +</​spoiler>​
  
 ==== Android vs. iPhone ==== ==== Android vs. iPhone ====
 +<​spoiler>​
  
 Piața de telefoane inteligente este dominată de Android (care - potrivit estimărilor - își va menține supremația până în 2018), cu 82.8% (peste un miliard de dispozitive vândute) pe întreg anul 2015, în timp ce Apple deține doar 13.9%, la nivel mondial. Piața de telefoane inteligente este dominată de Android (care - potrivit estimărilor - își va menține supremația până în 2018), cu 82.8% (peste un miliard de dispozitive vândute) pe întreg anul 2015, în timp ce Apple deține doar 13.9%, la nivel mondial.
Line 97: Line 112:
  
 Așadar, dacă pentru utilizare personală nu se poate stabili un câștigător clar între Android și iPhone (deși produsul celor de la Apple pare să aibă un ușor avantaj printr-un număr mai mare de aplicații și prin loialitatea clienților),​ în cazul aplicațiilor dezvoltate de corporații situația este inversă, date fiind posibilitățile de instalare și limbajul de programare folosit. Așadar, dacă pentru utilizare personală nu se poate stabili un câștigător clar între Android și iPhone (deși produsul celor de la Apple pare să aibă un ușor avantaj printr-un număr mai mare de aplicații și prin loialitatea clienților),​ în cazul aplicațiilor dezvoltate de corporații situația este inversă, date fiind posibilitățile de instalare și limbajul de programare folosit.
 +</​spoiler>​
  
 ==== Comunitatea programatorilor Android ==== ==== Comunitatea programatorilor Android ====
 +<​spoiler>​
 Ajunsă deja la a șaptea versiune, Android este o platformă care beneficiază de experiența a numeroși dezvoltatori ce poate fi exploatată:​ Ajunsă deja la a șaptea versiune, Android este o platformă care beneficiază de experiența a numeroși dezvoltatori ce poate fi exploatată:​
   * [[http://​developer.android.com/​training/​index.html|Google Android Training]] conține o serie de tutoriale și exemple de clase grupate în funcție de diferite subiecte, utile pentru deprinderea cunoștințelor de bază pentru dezvoltarea aplicațiilor Android.   * [[http://​developer.android.com/​training/​index.html|Google Android Training]] conține o serie de tutoriale și exemple de clase grupate în funcție de diferite subiecte, utile pentru deprinderea cunoștințelor de bază pentru dezvoltarea aplicațiilor Android.
   * [[http://​www.stackoverflow.com/​questions/​tagged/​android|Stack Overflow]] este un forum pentru programatori editat în mod colaborativ,​ conținând întrebări și răspunsuri la acestea (cele mai bune putând fi identificate cu ușurință prin voturile primite de la participanți). Este destul de probabil ca o întrebare să își găsească deja răspunsul pe acestă resursă.   * [[http://​www.stackoverflow.com/​questions/​tagged/​android|Stack Overflow]] este un forum pentru programatori editat în mod colaborativ,​ conținând întrebări și răspunsuri la acestea (cele mai bune putând fi identificate cu ușurință prin voturile primite de la participanți). Este destul de probabil ca o întrebare să își găsească deja răspunsul pe acestă resursă.
   * [[http://​groups.google.com/​group/​android-discuss|Android Discuss]] este o listă de discuții monitorizată îndeaproape de echipa Android de la Google astfel încât reprezintă un loc unde pot fi clarificate numeroase nelămuriri putând fi însușite diferite sfaturi și trucuri.   * [[http://​groups.google.com/​group/​android-discuss|Android Discuss]] este o listă de discuții monitorizată îndeaproape de echipa Android de la Google astfel încât reprezintă un loc unde pot fi clarificate numeroase nelămuriri putând fi însușite diferite sfaturi și trucuri.
 +</​spoiler>​
  
 ===== Cerințe pentru dezvoltarea unei aplicații Android (obligatoriu) ===== ===== Cerințe pentru dezvoltarea unei aplicații Android (obligatoriu) =====
Line 111: Line 128:
   - [[eim:​tutoriale:​sdk_android|SDK-ul de Android]], pentru care se descarcă definițiile corespunzătoare unuia sau mai multor niveluri de API   - [[eim:​tutoriale:​sdk_android|SDK-ul de Android]], pentru care se descarcă definițiile corespunzătoare unuia sau mai multor niveluri de API
   - un mediu integrat de dezvoltare (IDE)   - un mediu integrat de dezvoltare (IDE)
-    - [[eim:​tutoriale:​eclipse|Elipse]],​ cu plugin-ul ADT (Android Developer Tools) 
     - [[eim:​tutoriale:​android_studio|Android Studio]]     - [[eim:​tutoriale:​android_studio|Android Studio]]
   - un dispozitiv pe care să se ruleze aplicațiile   - un dispozitiv pe care să se ruleze aplicațiile
Line 122: Line 138:
  
 <​code>​ <​code>​
-student@eim2017:~$ sudo bash  +student@eim-lab:~$ sudo bash  
-student@eim2017:~# lsusb+student@eim-lab:~# lsusb
 </​code>​ </​code>​
  
Line 129: Line 145:
  
 <​code>​ <​code>​
-student@eim2017:~# gedit /​etc/​udev/​rules.d/​51-android.rules+student@eim-lab:~# gedit /​etc/​udev/​rules.d/​51-android.rules
 </​code>​ </​code>​
  
Line 139: Line 155:
  
 <​code>​ <​code>​
-student@eim2017:~# /​etc/​init.d/​udev restart+student@eim-lab:~# /​etc/​init.d/​udev restart
 </​code>​ </​code>​
  
-Mai multe informații sunt disponibile și la [[http://blog.janosgyerik.com/adding-udev-rules-for-usb-debugging-android-devices/]].+ 
 +Fie că ați instalat un emulator, fie un telefon conectat prin cablu USB, puteti verifica că el este pornit si este vizibil  
 + 
 +<​code>​ 
 +/​opt/​Android/​SDK/​platform-tools/​adb devices 
 +</​code>​ 
 + 
 +Dacă dispozitivul este listat, va puteti conecta ​la prompt 
 + 
 +<​code>​ 
 +/opt/Android/SDK/​platform-tools/adb shell 
 +</code> 
 + 
 + 
 +  
 + 
  
 ===== Sisteme de control a versiunilor ===== ===== Sisteme de control a versiunilor =====
 +
  
 ==== Ce este un sistem de control al versiunilor?​ ==== ==== Ce este un sistem de control al versiunilor?​ ====
 +<​spoiler>​
 Un sistem de control al versiunilor (//eng.// VCS - Version Control System) este un mecanism prin intermediul căruia sunt gestionate fișiere / proiecte în dinamică (pe măsură ce sunt modificate),​ în scopul de a se putea realiza revenirea la o anumită stare în caz de eroare (restaurarea unei versiuni stabile) și pentru a permite colaborarea între mai multe echipe care lucrează concomitent la diferite funcționalități ale unui același proiect. Un sistem de control al versiunilor (//eng.// VCS - Version Control System) este un mecanism prin intermediul căruia sunt gestionate fișiere / proiecte în dinamică (pe măsură ce sunt modificate),​ în scopul de a se putea realiza revenirea la o anumită stare în caz de eroare (restaurarea unei versiuni stabile) și pentru a permite colaborarea între mai multe echipe care lucrează concomitent la diferite funcționalități ale unui același proiect.
  
 Deși în mod curent astfel de produse sunt folosite pentru dezvoltarea de aplicații (urmărindu-se o gestionare eficientă a codului sursă și a utilizatorilor care implementează anumite funcționalități sau corectează defecte), ele pot fi folosite și pentru alte tipuri de proiecte, ce implică lucrul cu fișiere binare, pentru care diferențele între diferite versiuni se realizează mai dificil. ​ Deși în mod curent astfel de produse sunt folosite pentru dezvoltarea de aplicații (urmărindu-se o gestionare eficientă a codului sursă și a utilizatorilor care implementează anumite funcționalități sau corectează defecte), ele pot fi folosite și pentru alte tipuri de proiecte, ce implică lucrul cu fișiere binare, pentru care diferențele între diferite versiuni se realizează mai dificil. ​
 +</​spoiler>​
  
 ==== Clasificarea sistemelor de control al versiunilor ==== ==== Clasificarea sistemelor de control al versiunilor ====
 +<​spoiler>​
 În prezent, sunt folosite trei tipuri de sisteme de control a versiunilor,​ fiecare dintre acestea fiind adecvate unei anumite situații: În prezent, sunt folosite trei tipuri de sisteme de control a versiunilor,​ fiecare dintre acestea fiind adecvate unei anumite situații:
   - **sisteme locale de control a versiunilor**,​ în cazul în care se dorește monitorizarea variantelor unui fișier exclusiv pe discul local; în baza de date, versiunile sunt reținute sub forma diferențelor (rezultatul comenzii ''​diff''​) dintre versiuni succesive, astfel că se poate reveni oricând la o stare anterioară (exemplu: rcs);   - **sisteme locale de control a versiunilor**,​ în cazul în care se dorește monitorizarea variantelor unui fișier exclusiv pe discul local; în baza de date, versiunile sunt reținute sub forma diferențelor (rezultatul comenzii ''​diff''​) dintre versiuni succesive, astfel că se poate reveni oricând la o stare anterioară (exemplu: rcs);
Line 158: Line 194:
     * dezavantaje:​ în cazul când serverul dedicat pe care găsește baza de date cu tot istoricul versiunilor se defectează,​ există riscul de a se pierde toate aceste informații (dacă nu există copii de siguranță),​ păstrându-se doar versiunile salvate pe mașinile utilizatorilor;​ mai mult, într-o astfel de situație utilizatorii se află în incapacitatea de a mai transmite propriile modificări și de a consulta modificările celorlalți;​     * dezavantaje:​ în cazul când serverul dedicat pe care găsește baza de date cu tot istoricul versiunilor se defectează,​ există riscul de a se pierde toate aceste informații (dacă nu există copii de siguranță),​ păstrându-se doar versiunile salvate pe mașinile utilizatorilor;​ mai mult, într-o astfel de situație utilizatorii se află în incapacitatea de a mai transmite propriile modificări și de a consulta modificările celorlalți;​
   - **sisteme distribuite de control a versiunilor** în care consultarea stării actuale a unui fișier presupune și descărcarea,​ pe discul local, a întregului istoric de modificări astfel încât acesta să poată fi reconstituit în situații precum defectarea serverului; de asemenea, acestea au capacitatea de a gestiona mai multe depozite aflate la distanță, chiar în cazul în care acestea conțin același proiect, permițând stabilirea unor anumite fluxuri de transmitere a informației (exemple: Git, Mercurial, Bazaar, Darcs);   - **sisteme distribuite de control a versiunilor** în care consultarea stării actuale a unui fișier presupune și descărcarea,​ pe discul local, a întregului istoric de modificări astfel încât acesta să poată fi reconstituit în situații precum defectarea serverului; de asemenea, acestea au capacitatea de a gestiona mai multe depozite aflate la distanță, chiar în cazul în care acestea conțin același proiect, permițând stabilirea unor anumite fluxuri de transmitere a informației (exemple: Git, Mercurial, Bazaar, Darcs);
 +</​spoiler>​
 ===== GIT ===== ===== GIT =====
  
 ==== Istoric ==== ==== Istoric ====
 +<​spoiler>​
 Apariția Git în 2005 este strâns legată de dezvoltarea kernelului pentru Linux, proiect open-source la care lucra o comunitate destul de numeroasă de programatori. Dacă anterior actualizările erau distribuite sub forma unor arhive ce conțineau modificările (1991-2002),​ respectiv prin intermediul unui sistem distribuit de control al versiunilor denumit BitKeeper (2002-2005),​ pe măsură ce proiectul a devenit mai complex și din ce în ce mai multe persoane și-au exprimat disponibilitatea de a contribui la dezvoltarea acestuia, s-a pus problema conceperii unui produs care să satisfacă cerințele legate de viteză, arhitectură scalabilă, suport pentru dezvoltare non-liniară (numeroase ramificații la care se lucrează concomitent),​ distribuire totală, capacitate de a gestiona proiecte de dimensiuni mari. Apariția Git în 2005 este strâns legată de dezvoltarea kernelului pentru Linux, proiect open-source la care lucra o comunitate destul de numeroasă de programatori. Dacă anterior actualizările erau distribuite sub forma unor arhive ce conțineau modificările (1991-2002),​ respectiv prin intermediul unui sistem distribuit de control al versiunilor denumit BitKeeper (2002-2005),​ pe măsură ce proiectul a devenit mai complex și din ce în ce mai multe persoane și-au exprimat disponibilitatea de a contribui la dezvoltarea acestuia, s-a pus problema conceperii unui produs care să satisfacă cerințele legate de viteză, arhitectură scalabilă, suport pentru dezvoltare non-liniară (numeroase ramificații la care se lucrează concomitent),​ distribuire totală, capacitate de a gestiona proiecte de dimensiuni mari.
 +</​spoiler>​
  
 ==== Caracteristici (obligatoriu) ==== ==== Caracteristici (obligatoriu) ====
Line 183: Line 221:
   - consemnarea propriu-zisă a datelor din zona de așteptare înapoi în directorul Git.   - consemnarea propriu-zisă a datelor din zona de așteptare înapoi în directorul Git.
  
 +<note important>​
 +Git [[https://​ndpsoftware.com/​git-cheatsheet.html|cheatsheet]] - doar o mica parte dintre comenzile din cheatsheet sunt necesare pentru laboratorul de EIM. 
 +</​note>​
 ==== Instalare & Configurare (obligatoriu) ==== ==== Instalare & Configurare (obligatoriu) ====
 Instrucțiunile pentru instalarea și configurarea Git sunt disponibile [[eim:​tutoriale:​git|aici]]. Instrucțiunile pentru instalarea și configurarea Git sunt disponibile [[eim:​tutoriale:​git|aici]].
 Informații suplimentare cu privire la comenzile Git și sintaxa acestora pot fi obținute folosind paginile de manual: Informații suplimentare cu privire la comenzile Git și sintaxa acestora pot fi obținute folosind paginile de manual:
 <​code>​ <​code>​
-student@eim2017:~$ git help <​command>​ +student@eim-lab:~$ git help <​command>​ 
-student@eim2017:~$ git <​command>​ --help +student@eim-lab:~$ git <​command>​ --help 
-student@eim2017:~$ man git-<​command>​+student@eim-lab:~$ man git-<​command>​
 </​code>​ </​code>​
  
Line 197: Line 238:
 În cazul în care se dorește monitorizarea unui proiect nou / existent prin sistemul de control al versiunilor Git, directorul în care se găsește acesta va trebui inițializat folosind comanda: În cazul în care se dorește monitorizarea unui proiect nou / existent prin sistemul de control al versiunilor Git, directorul în care se găsește acesta va trebui inițializat folosind comanda:
 <​code>​ <​code>​
-student@eim2017:~$ git init+student@eim-lab:~$ git init
 </​code>​ </​code>​
 Astfel, se creează un director ''​.git''​ în care vor fi plasate toate versiunile fișierelor care sunt monitorizate. Inițial, acesta este vid. Astfel, se creează un director ''​.git''​ în care vor fi plasate toate versiunile fișierelor care sunt monitorizate. Inițial, acesta este vid.
Line 215: Line 256:
   * ''​URL''​ - reprezintă adresa serverului la distanță care găzduiește proiectul, putând fi utilizate în acest sens mai multe protocoale pentru transferul de informație   * ''​URL''​ - reprezintă adresa serverului la distanță care găzduiește proiectul, putând fi utilizate în acest sens mai multe protocoale pentru transferul de informație
     * git <​code>​     * git <​code>​
-student@eim2017:~$ git clone git://​github.com/​eim2017/​Laborator01.git+student@eim-lab:~$ git clone git://​github.com/​eim-lab/​Laborator01.git
 </​code>​ </​code>​
     * https <​code>​     * https <​code>​
-student@eim2017:~$ git clone https://​github.com/​eim2017/​Laborator01+student@eim-lab:~$ git clone https://​github.com/​eim-lab/​Laborator01
 </​code>​ </​code>​
     * ssh <​code>​     * ssh <​code>​
-student@eim2017:~$ git clone git@github.com:​eim2017/​Laborator01.git+student@eim-lab:~$ git clone git@github.com:​eim-lab/​Laborator01.git
 </​code>​ </​code>​
   * ''​local_directory''​ (opțional) - denumirea directorului local în care va fi stocată versiunea curentă a proiectului (precum și istoricul din directorul Git), în cazul în care se dorește schimbarea acestuia   * ''​local_directory''​ (opțional) - denumirea directorului local în care va fi stocată versiunea curentă a proiectului (precum și istoricul din directorul Git), în cazul în care se dorește schimbarea acestuia
Line 236: Line 277:
 O astfel de comandă poate întoarce mai multe rezultate: O astfel de comandă poate întoarce mai multe rezultate:
   * toate fișierele din directorul de lucru se regăsesc întocmai și în directorul Git (nu au fost realizate modificări <​code>​   * toate fișierele din directorul de lucru se regăsesc întocmai și în directorul Git (nu au fost realizate modificări <​code>​
-student@eim2017:~$ git status+student@eim-lab:~$ git status
 On branch master On branch master
 Your branch is up-to-date with '​origin/​master'​. Your branch is up-to-date with '​origin/​master'​.
Line 243: Line 284:
 </​code>​ </​code>​
   * există date în zona de lucru care nu sunt monitorizate (nu au făcut parte dintr-un instantaneu anterior), care vor fi consemnate numai în situația în care se specifică acest lucru în mod explicit; acest mecanism urmărește ca fișierele generate să nu fie incluse în mod eronat în directorul Git <​code>​   * există date în zona de lucru care nu sunt monitorizate (nu au făcut parte dintr-un instantaneu anterior), care vor fi consemnate numai în situația în care se specifică acest lucru în mod explicit; acest mecanism urmărește ca fișierele generate să nu fie incluse în mod eronat în directorul Git <​code>​
-student@eim2017:~$ git status+student@eim-lab:~$ git status
 On branch master On branch master
 Your branch is up-to-date with '​origin/​master'​. Your branch is up-to-date with '​origin/​master'​.
Line 255: Line 296:
 </​code>​ Monitorizarea acestor date se face prin intermediul comenzii **''​git add <​files/​directory>''​**,​ care suportă specificarea de expresii regulate desemnând măști pentru indicarea mai multor fișiere/​directoare. </​code>​ Monitorizarea acestor date se face prin intermediul comenzii **''​git add <​files/​directory>''​**,​ care suportă specificarea de expresii regulate desemnând măști pentru indicarea mai multor fișiere/​directoare.
   * există informații în zona de așteptare care vor fi incluse în următorul instantaneu în momentul în care se va realiza consemnarea (trecute în secțiunea ''​Changes to be committed''​);​ eventualele fișiere care au existat în instantanee anterioare și au fost modificate în directorul de lucru nu vor fi marcate ca făcând parte din zona de așteptare (trecute în secțiunea ''​Changes not staged for commit''​) dacă versiunile respective nu vor fi incluse în mod explicit prin comanda **''​git add <​files/​directory>''​** <​code>​   * există informații în zona de așteptare care vor fi incluse în următorul instantaneu în momentul în care se va realiza consemnarea (trecute în secțiunea ''​Changes to be committed''​);​ eventualele fișiere care au existat în instantanee anterioare și au fost modificate în directorul de lucru nu vor fi marcate ca făcând parte din zona de așteptare (trecute în secțiunea ''​Changes not staged for commit''​) dacă versiunile respective nu vor fi incluse în mod explicit prin comanda **''​git add <​files/​directory>''​** <​code>​
-student@eim2017:~$ git status+student@eim-lab:~$ git status
 On branch master On branch master
 Your branch is up-to-date with '​origin/​master'​. Your branch is up-to-date with '​origin/​master'​.
Line 300: Line 341:
  
 <​code>​ <​code>​
-student@eim2017:~$ git add MyFirstAndroidApplication/​*+student@eim-lab:~$ git add MyFirstAndroidApplication/​*
 </​code>​ </​code>​
  
Line 312: Line 353:
  
 <note tip>​Comanda ''​git mv <​source>​ <​target>''​ este echivalentă cu aceeași succesiune de operații: <​code>​ <note tip>​Comanda ''​git mv <​source>​ <​target>''​ este echivalentă cu aceeași succesiune de operații: <​code>​
-student@eim2017:~$ mv <​source>​ <​target>​ +student@eim-lab:~$ mv <​source>​ <​target>​ 
-student@eim2017:~$ git rm <​source>​ +student@eim-lab:~$ git rm <​source>​ 
-student@eim2017:~$ git add <​target>​+student@eim-lab:~$ git add <​target>​
 </​code></​note>​ </​code></​note>​
  
 <​code>​ <​code>​
-student@eim2017:~$ git mv README.md README.txt+student@eim-lab:~$ git mv README.md README.txt
 </​code>​ </​code>​
  
Line 328: Line 369:
  
 <​code>​ <​code>​
-student@eim2017:~$ git rm LICENSE+student@eim-lab:~$ git rm LICENSE
 rm '​LICENSE'​ rm '​LICENSE'​
 </​code>​ </​code>​
Line 379: Line 420:
 === Vizualizarea modificărilor === === Vizualizarea modificărilor ===
 Prin intermediul comenzii **''​git diff''​**,​ utilizatorul are posibilitatea de a vizualiza în ce constau actualizările pentru fiecare fișier în parte. Prin intermediul comenzii **''​git diff''​**,​ utilizatorul are posibilitatea de a vizualiza în ce constau actualizările pentru fiecare fișier în parte.
-  * rulată fără parametri, comanda indică diferențele pentru fișierele care au fost modificate, dar nu au fost marcate pentru a fi incluse în următorul instantaneu (cu alte cuvinte, sunt indicate diferențele dintre zona de lucru și zona de așteptare) <​code>​student@eim2017:~$ git diff+  * rulată fără parametri, comanda indică diferențele pentru fișierele care au fost modificate, dar nu au fost marcate pentru a fi incluse în următorul instantaneu (cu alte cuvinte, sunt indicate diferențele dintre zona de lucru și zona de așteptare) <​code>​student@eim-lab:~$ git diff
  
 diff --git a/README.md b/README.md diff --git a/README.md b/README.md
Line 393: Line 434:
  
 <​note>​Dacă toate fișierele din zona de lucru au fost fie marcate pentru a fi incluse în următorul instantaneu,​ fie sunt ignorate, rezultatul comenzii ''​git diff''​ va fi vid.</​note>​ <​note>​Dacă toate fișierele din zona de lucru au fost fie marcate pentru a fi incluse în următorul instantaneu,​ fie sunt ignorate, rezultatul comenzii ''​git diff''​ va fi vid.</​note>​
-  * rulată cu parametrul ''​%%--cached%%''​ sau ''​%%--staged%%''​ (disponibil din versiunea 1.6.1, efectul este identic), comanda indică diferențele pentru fișierele care au fost marcate pentru a fi incluse în următorul instantaneu,​ față de situația existentă în directorul Git (cu alte cuvinte, sunt indicate diferențele dintre zona de așteptare și directorul Git) <​code>​student@eim2017:~$ git diff --staged+  * rulată cu parametrul ''​%%--cached%%''​ sau ''​%%--staged%%''​ (disponibil din versiunea 1.6.1, efectul este identic), comanda indică diferențele pentru fișierele care au fost marcate pentru a fi incluse în următorul instantaneu,​ față de situația existentă în directorul Git (cu alte cuvinte, sunt indicate diferențele dintre zona de așteptare și directorul Git) <​code>​student@eim-lab:~$ git diff --staged
  
 diff --git a/​MyFirstAndroidApplication/​.classpath b/​MyFirstAndroidApplication/​.classpath diff --git a/​MyFirstAndroidApplication/​.classpath b/​MyFirstAndroidApplication/​.classpath
Line 421: Line 462:
  
 <​code>​ <​code>​
-student@eim2017:~$ git commit -m "​initial commit: graphical user interface, some code to handle the button click"+student@eim-lab:~$ git commit -m "​initial commit: graphical user interface, some code to handle the button click"
 [master 95fa0b2] initial commit: graphical user interface, some code to handle the button click [master 95fa0b2] initial commit: graphical user interface, some code to handle the button click
  21 files changed, 300 insertions(+)  21 files changed, 300 insertions(+)
Line 448: Line 489:
 Se observă că în rezultatul acestei comenzi sunt indicate ramificația pe care se face consemnarea (''​master''​),​ suma de control SHA-1 a consemnării (''​95fa0b2''​),​ numărul de fișiere modificate (''​21''​) precum și statistici cu privire la numărul de linii adăugate (''​300''​),​ respectiv eliminate (''​0''​). Se observă că în rezultatul acestei comenzi sunt indicate ramificația pe care se face consemnarea (''​master''​),​ suma de control SHA-1 a consemnării (''​95fa0b2''​),​ numărul de fișiere modificate (''​21''​) precum și statistici cu privire la numărul de linii adăugate (''​300''​),​ respectiv eliminate (''​0''​).
 <note tip>​Consemnarea va transfera în directorul Git numai acele fișiere care au fost marcate în acest sens, existând în zona de așteptare. Dacă se dorește să se realizeze transferul direct din zona de lucru în directorul Git, fără a mai trece în zona de așteptare (doar pentru fișierele monitorizate care au fost modificate),​ comanda ''​%%git commit -m "<​message>"​%%''​ trebuie rulată și cu parametrul ''​-a''​. <​code>​ <note tip>​Consemnarea va transfera în directorul Git numai acele fișiere care au fost marcate în acest sens, existând în zona de așteptare. Dacă se dorește să se realizeze transferul direct din zona de lucru în directorul Git, fără a mai trece în zona de așteptare (doar pentru fișierele monitorizate care au fost modificate),​ comanda ''​%%git commit -m "<​message>"​%%''​ trebuie rulată și cu parametrul ''​-a''​. <​code>​
-student@eim2017:~$ git commit -a -m "​initial commit: graphical user interface, some code to handle the button click"+student@eim-lab:~$ git commit -a -m "​initial commit: graphical user interface, some code to handle the button click"
 </​code>​ Într-un astfel de caz, nu mai este necesar ca în prealabil să se ruleze comanda ''​git add''​.</​note>​ </​code>​ Într-un astfel de caz, nu mai este necesar ca în prealabil să se ruleze comanda ''​git add''​.</​note>​
  
Line 454: Line 495:
  
 === Etichetarea versiunilor === === Etichetarea versiunilor ===
 +<​spoiler>​
 Unei versiuni consemnate în directorul Git îi poate fi asociată o etichetă (//eng.// tag) prin care se desemnează,​ de regulă, o anumită funcționalitate. ​ Unei versiuni consemnate în directorul Git îi poate fi asociată o etichetă (//eng.// tag) prin care se desemnează,​ de regulă, o anumită funcționalitate. ​
  
 Git oferă posibilitatea de a defini două tipuri de etichete, prin intermediul comenzii **''​git tag''​**:​ Git oferă posibilitatea de a defini două tipuri de etichete, prin intermediul comenzii **''​git tag''​**:​
   * **etichete '​ușoare'​** (//eng.// lightweight) pentru care nu se rețin informații suplimentare,​ cu excepția sumei de control asociate consemnării respective; de regulă, sunt folosite pentru resurse temporare sau în situația în care informațiile asociate nu sunt necesare <​code>​   * **etichete '​ușoare'​** (//eng.// lightweight) pentru care nu se rețin informații suplimentare,​ cu excepția sumei de control asociate consemnării respective; de regulă, sunt folosite pentru resurse temporare sau în situația în care informațiile asociate nu sunt necesare <​code>​
-student@eim2017:~$ git tag v1.0+student@eim-lab:~$ git tag v1.0
 </​code>​ </​code>​
   * **etichete adnotate** care sunt stocate ca obiecte de sine stătătoare în directorul Git, reținându-se numele și adresa de poștă electronică a utilizatorului care a realizat-o, un mesaj asociat (informații distincte de cele ale consemnării asociate etichetei) precum și suma de control <​code>​   * **etichete adnotate** care sunt stocate ca obiecte de sine stătătoare în directorul Git, reținându-se numele și adresa de poștă electronică a utilizatorului care a realizat-o, un mesaj asociat (informații distincte de cele ale consemnării asociate etichetei) precum și suma de control <​code>​
-student@eim2017:~$ git tag -a v1.0 -m 'an annotated tag for the first release version'​+student@eim-lab:~$ git tag -a v1.0 -m 'an annotated tag for the first release version'​
 </​code>​ Etichetele de acest tip pot fi **semnate** folosind GPG (GNU Privacy Guard), dacă utilizatorul dispune de o cheie privată, acestea având avantajul că pot fi verificate <​code>​ </​code>​ Etichetele de acest tip pot fi **semnate** folosind GPG (GNU Privacy Guard), dacă utilizatorul dispune de o cheie privată, acestea având avantajul că pot fi verificate <​code>​
-student@eim2017:~$ git tag -s v1.0 -m 'a signed tag for the first release version'​+student@eim-lab:~$ git tag -s v1.0 -m 'a signed tag for the first release version'​
 </​code>​ Verificarea unei etichete semnate se face prin intermediul comenzii **''​git tag -v <​tag_name>''​**,​ fiind necesară existența cheii publice a utilizatorului care a semnat-o.\\ Așadar, opțiunile cu care se poate rulează comanda ''​git tag''​ în cazul unei etichete adnotate sunt: </​code>​ Verificarea unei etichete semnate se face prin intermediul comenzii **''​git tag -v <​tag_name>''​**,​ fiind necesară existența cheii publice a utilizatorului care a semnat-o.\\ Așadar, opțiunile cu care se poate rulează comanda ''​git tag''​ în cazul unei etichete adnotate sunt:
     * ''​-a'':​ specifică faptul că este vorba despre o etichetă nesemnată     * ''​-a'':​ specifică faptul că este vorba despre o etichetă nesemnată
Line 472: Line 514:
 Lista tuturor etichetelor asociate unui proiect poate fi consultată dacă se rulează comanda **''​git tag''​** fără nici un parametru: Lista tuturor etichetelor asociate unui proiect poate fi consultată dacă se rulează comanda **''​git tag''​** fără nici un parametru:
 <​code>​ <​code>​
-student@eim2017:~$ git tag+student@eim-lab:~$ git tag
 v1.0 v1.0
 </​code>​ </​code>​
Line 479: Line 521:
 Dacă se dorește consultarea conținutului unei etichete, se poate utiliza comanda **''​git show <​tag>''​**,​ prin care sunt listate toate informațiile asociate versiunii respective. Dacă se dorește consultarea conținutului unei etichete, se poate utiliza comanda **''​git show <​tag>''​**,​ prin care sunt listate toate informațiile asociate versiunii respective.
 <​code>​ <​code>​
-student@eim2017:~$ git show v1.0+student@eim-lab:~$ git show v1.0
 commit 5e4b82a0783e5841e5c5241d44104e8b15e4270f commit 5e4b82a0783e5841e5c5241d44104e8b15e4270f
-Author: ​eim2017 ​<​informaticamobila2017@gmail.com>​+Author: ​eim-lab ​<​informaticamobila2017@gmail.com>​
 Date:   Sun Feb 22 18:00:00 2015 +0300 Date:   Sun Feb 22 18:00:00 2015 +0300
  
Line 489: Line 531:
 În situația în care o versiune a fost consemnată fără a i se asocia o etichetă, o astfel de operație poate fi realizată și ulterior, adăugând la comanda ''​git tag''​ suma de control asociată respectivei versiuni (obținută ca rezultat al comenzii ''​git log''​). În situația în care o versiune a fost consemnată fără a i se asocia o etichetă, o astfel de operație poate fi realizată și ulterior, adăugând la comanda ''​git tag''​ suma de control asociată respectivei versiuni (obținută ca rezultat al comenzii ''​git log''​).
 <​code>​ <​code>​
-student@eim2017:~$ git tag -a v1.1 -m '​version 1.1' e71c1c4b1b9818292b4cda084e47e25bfb573507+student@eim-lab:~$ git tag -a v1.1 -m '​version 1.1' e71c1c4b1b9818292b4cda084e47e25bfb573507
 </​code>​ </​code>​
  
Line 497: Line 539:
   * pentru o singură etichetă, se specifică denumirea acesteia ''​git push <​remote_name>​ <​tag>'';​   * pentru o singură etichetă, se specifică denumirea acesteia ''​git push <​remote_name>​ <​tag>'';​
   * pentru toate etichetele, se folosește comanda ''​%%git push <​remote_name>​ --tags%%''​.   * pentru toate etichetele, se folosește comanda ''​%%git push <​remote_name>​ --tags%%''​.
 +</​spoiler>​
  
 === Vizualizarea istoricului de versiuni === === Vizualizarea istoricului de versiuni ===
Line 536: Line 579:
  
 <​code>​ <​code>​
-student@eim2017:~$ git log --pretty=format:"​%h - %an [%ae] - %ar -> %s" --graph+student@eim-lab:~$ git log --pretty=format:"​%h - %an [%ae] - %ar -> %s" --graph
 *   ​df5829c - andreirosucojocaru [andrei.rosucojocaru@gmail.com] - 5 minutes ago -> resolved conflicts among customized_message and fade_effect branches *   ​df5829c - andreirosucojocaru [andrei.rosucojocaru@gmail.com] - 5 minutes ago -> resolved conflicts among customized_message and fade_effect branches
 |\  ​ |\  ​
Line 543: Line 586:
 |/  ​ |/  ​
 * 839f14e - andreirosucojocaru [andrei.rosucojocaru@gmail.com] - 42 minutes ago -> initial commit: graphical user interface, some code to handle the button click * 839f14e - andreirosucojocaru [andrei.rosucojocaru@gmail.com] - 42 minutes ago -> initial commit: graphical user interface, some code to handle the button click
-* e2594f8 - eim2017 ​[informaticamobila2017@gmail.com] - 2 days ago -> Initial commit+* e2594f8 - eim-lab ​[informaticamobila2017@gmail.com] - 2 days ago -> Initial commit
 </​code>​ </​code>​
 ==== Gestiunea depozitelor la distanță (obligatoriu) ==== ==== Gestiunea depozitelor la distanță (obligatoriu) ====
 Mai mulți utilizatori pot colabora în cadrul unui proiect Git aflat pe un server la distanță (//eng.// remote repository),​ pe care pot avea fie doar drepturi de citire fie atât drepturi de citire cât și de scriere. Operațiile pe care le pot realiza sunt descărcarea de cod sursă, respectiv încărcarea (în situația în care au drepturi suficiente). Mai mulți utilizatori pot colabora în cadrul unui proiect Git aflat pe un server la distanță (//eng.// remote repository),​ pe care pot avea fie doar drepturi de citire fie atât drepturi de citire cât și de scriere. Operațiile pe care le pot realiza sunt descărcarea de cod sursă, respectiv încărcarea (în situația în care au drepturi suficiente).
  
-=== Vizualizarea referințelor către depozitele la distanță (git remote) ===+=== Vizualizarea referințelor către depozitele la distanță (git remote) ​Obligatoriu ​===
 Prin intermediul comenzii **''​git remote''​**,​ pot fi consultate depozitele la distanță cu care se lucrează în mod curent. În mod implicit, sunt afișate doar denumirile scurte asociate acestora. În cazul în care se dorește să se afișeze și URL-ul locației corespunzătoare fiecărui depozit la distanță, se va folosi opțiunea ''​-v''​. Prin intermediul comenzii **''​git remote''​**,​ pot fi consultate depozitele la distanță cu care se lucrează în mod curent. În mod implicit, sunt afișate doar denumirile scurte asociate acestora. În cazul în care se dorește să se afișeze și URL-ul locației corespunzătoare fiecărui depozit la distanță, se va folosi opțiunea ''​-v''​.
  
Line 554: Line 597:
  
 <​code>​ <​code>​
-student@eim2017:~$ git remote -v+student@eim-lab:~$ git remote -v
 Laborator01_andreirosucojocaru ​ git@github.com:​andreirosucojocaru/​Laborator01.git (fetch) Laborator01_andreirosucojocaru ​ git@github.com:​andreirosucojocaru/​Laborator01.git (fetch)
 Laborator01_andreirosucojocaru ​ git@github.com:​andreirosucojocaru/​Laborator01.git (push) Laborator01_andreirosucojocaru ​ git@github.com:​andreirosucojocaru/​Laborator01.git (push)
-origin ​ https://​github.com/​eim2017/​Laborator01 (fetch) +origin ​ https://​github.com/​eim-lab/​Laborator01 (fetch) 
-origin ​ https://​github.com/​eim2017/​Laborator01 (push)+origin ​ https://​github.com/​eim-lab/​Laborator01 (push)
 </​code>​ </​code>​
  
 Utilizatorul va avea drepturi de scriere numai pe depozitele la distanță pentru care dispune de cheile SSH corespunzătoare. Utilizatorul va avea drepturi de scriere numai pe depozitele la distanță pentru care dispune de cheile SSH corespunzătoare.
  
-=== Adăugarea unei referințe către un depozit la distanță ===+=== Adăugarea unei referințe către un depozit la distanță ​(Obligatoriu) ​===
 Pentru a putea referi un depozit la distanță prin intermediul unei denumiri (mai scurte) se va rula comenda ''​git remote add'':​ Pentru a putea referi un depozit la distanță prin intermediul unei denumiri (mai scurte) se va rula comenda ''​git remote add'':​
  
Line 573: Line 616:
  
 <​code>​ <​code>​
-student@eim2017:~$ git remote add Laborator01_andreirosucojocaru git@github.com:​andreirosucojocaru/​Laborator01.git+student@eim-lab:~$ git remote add Laborator01_andreirosucojocaru git@github.com:​andreirosucojocaru/​Laborator01.git
 </​code>​ </​code>​
  
-=== Descărcarea de cod sursă de pe un depozit la distanță ===+=== Descărcarea de cod sursă de pe un depozit la distanță ​(Obligatoriu) ​===
 Pentru a descărca cod sursă aflat într-un depozit găzduit de un server la distanță pe discul local există trei posibilități:​ Pentru a descărca cod sursă aflat într-un depozit găzduit de un server la distanță pe discul local există trei posibilități:​
   * comanda **''​git clone <​URL>''​** realizează o copie a datelor aflate la locația indicată de URL, inclusiv a tuturor ramificațiilor (//eng.// branches), ramificația ''​master''​ (în situația în care există) de pe server fiind monitorizată pentru modificări,​ astfel încât acestea să fie integrate automat (//eng.// merged) în codul sursă din directorul de lucru <​code>​   * comanda **''​git clone <​URL>''​** realizează o copie a datelor aflate la locația indicată de URL, inclusiv a tuturor ramificațiilor (//eng.// branches), ramificația ''​master''​ (în situația în care există) de pe server fiind monitorizată pentru modificări,​ astfel încât acestea să fie integrate automat (//eng.// merged) în codul sursă din directorul de lucru <​code>​
-student@eim2017:~$ git clone https://​github.com/​eim2017/​Laborator01.git+student@eim-lab:~$ git clone https://​github.com/​eim-lab/​Laborator01.git
 Cloning into '​Laborator01'​... Cloning into '​Laborator01'​...
 remote: Counting objects: 5, done. remote: Counting objects: 5, done.
Line 588: Line 631:
 </​code>​ </​code>​
   * comanda **''​git fetch <​remote_name>''​** descarcă toate informațiile din depozitul de pe serverul la distanță care nu se regăsesc pe discul local, creându-se referințe către ramificația de la locația respectivă,​ care pot fi consultate pentru ca ulterior să fie integrate <​code>​   * comanda **''​git fetch <​remote_name>''​** descarcă toate informațiile din depozitul de pe serverul la distanță care nu se regăsesc pe discul local, creându-se referințe către ramificația de la locația respectivă,​ care pot fi consultate pentru ca ulterior să fie integrate <​code>​
-student@eim2017:~$ git fetch Laborator01_andreirosucojocaru+student@eim-lab:~$ git fetch Laborator01_andreirosucojocaru
 remote: Counting objects: 39, done. remote: Counting objects: 39, done.
 remote: Compressing objects: 100% (19/19), done. remote: Compressing objects: 100% (19/19), done.
Line 603: Line 646:
  
 <​code>​ <​code>​
-student@eim2017:~$ git push origin master+student@eim-lab:~$ git push origin master
 Counting objects: 47, done. Counting objects: 47, done.
 Delta compression using up to 2 threads. Delta compression using up to 2 threads.
Line 609: Line 652:
 Writing objects: 100% (45/45), 891.37 KiB | 0 bytes/s, done. Writing objects: 100% (45/45), 891.37 KiB | 0 bytes/s, done.
 Total 45 (delta 2), reused 0 (delta 0) Total 45 (delta 2), reused 0 (delta 0)
-To https://​github.com/​eim2017/​Laborator01+To https://​github.com/​eim-lab/​Laborator01
    ​e2594f8..839f14e ​ master -> master    ​e2594f8..839f14e ​ master -> master
 </​code>​ </​code>​
Line 624: Line 667:
  
 <​code>​ <​code>​
-student@eim2017:~$ git remote show origin+student@eim-lab:~$ git remote show origin
 * remote origin * remote origin
-  Fetch URL: https://​github.com/​eim2017/​Laborator01 +  Fetch URL: https://​github.com/​eim-lab/​Laborator01 
-  Push  URL: https://​github.com/​eim2017/​Laborator01+  Push  URL: https://​github.com/​eim-lab/​Laborator01
   HEAD branch: master   HEAD branch: master
   Remote branch:   Remote branch:
Line 641: Line 684:
  
 <​code>​ <​code>​
-student@eim2017:~$ git remote rename Laborator01_andreirosucojocaru Lab01_arc+student@eim-lab:~$ git remote rename Laborator01_andreirosucojocaru Lab01_arc
 </​code>​ </​code>​
  
Line 650: Line 693:
  
 <​code>​ <​code>​
-student@eim2017:~$ git remote rm Lab00_arc+student@eim-lab:~$ git remote rm Lab00_arc
 </​code>​ </​code>​
  
Line 673: Line 716:
  
 <​code>​ <​code>​
-student@eim2017:~$ git branch+student@eim-lab:~$ git branch
   customized_message   customized_message
   fade_effect   fade_effect
Line 691: Line 734:
 <note warning>​Sistemul Git nu va permite ștergerea ramificațiilor al căror conținut nu a fost încă integrat decât în situația în care se rulează comanda ''​git branch -D <​branch_name>'',​ cu pierderea modificărilor realizate în cadrul acesteia.</​note>​ <note warning>​Sistemul Git nu va permite ștergerea ramificațiilor al căror conținut nu a fost încă integrat decât în situația în care se rulează comanda ''​git branch -D <​branch_name>'',​ cu pierderea modificărilor realizate în cadrul acesteia.</​note>​
  
-=== Crearea unei ramificații ​===+ ​** ​Crearea unei ramificații ​**
 Comanda **''​git branch <​branch_name>''​** are rolul de a crea o nouă ramificație în cadrul proiectului,​ având o denumirea dată. Inițial, aceasta va fi o referință către aceeași versiune ca și ''​master'',​ urmând ca pe măsură ce sunt realizate noi consemnări,​ să indice obiectele de tip ''​commit''​ corespunzătoare acestora. Comanda **''​git branch <​branch_name>''​** are rolul de a crea o nouă ramificație în cadrul proiectului,​ având o denumirea dată. Inițial, aceasta va fi o referință către aceeași versiune ca și ''​master'',​ urmând ca pe măsură ce sunt realizate noi consemnări,​ să indice obiectele de tip ''​commit''​ corespunzătoare acestora.
  
 <​code>​ <​code>​
-student@eim2017:~$ git branch customized_message +student@eim-lab:~$ git branch customized_message 
-student@eim2017:~$ git branch fade_effect+student@eim-lab:~$ git branch fade_effect
 </​code>​ </​code>​
  
Line 703: Line 746:
  
 <​code>​ <​code>​
-student@eim2017:~$ git checkout customized_message+student@eim-lab:~$ git checkout customized_message
 Switched to branch '​customized_message'​ Switched to branch '​customized_message'​
 </​code>​ </​code>​
Line 714: Line 757:
  
 <​code>​ <​code>​
-student@eim2017:~$ git checkout -b customized_message+student@eim-lab:~$ git checkout -b customized_message
 Switched to a new branch '​customized_message'​ Switched to a new branch '​customized_message'​
 </​code>​ </​code>​
Line 728: Line 771:
  
 <​code>​ <​code>​
-student@eim2017:~$ git checkout master+student@eim-lab:~$ git checkout master
 Switched to branch '​master'​ Switched to branch '​master'​
-student@eim2017:~$ git merge customized_message+student@eim-lab:~$ git merge customized_message
 Updating 839f14e..e1a9a2e Updating 839f14e..e1a9a2e
 Fast-forward Fast-forward
  ​.../​src/​ro/​pub/​cs/​systems/​eim/​lab01/​MainActivity.java ​                  | 1 +  ​.../​src/​ro/​pub/​cs/​systems/​eim/​lab01/​MainActivity.java ​                  | 1 +
  1 file changed, 1 insertion(+)  1 file changed, 1 insertion(+)
-student@eim2017:~$ git merge fade_effect+student@eim-lab:~$ git merge fade_effect
 Auto-merging MyFirstAndroidApplication/​src/​ro/​pub/​cs/​systems/​eim/​lab01/​MainActivity.java Auto-merging MyFirstAndroidApplication/​src/​ro/​pub/​cs/​systems/​eim/​lab01/​MainActivity.java
 CONFLICT (content): Merge conflict in MyFirstAndroidApplication/​src/​ro/​pub/​cs/​systems/​eim/​lab01/​MainActivity.java CONFLICT (content): Merge conflict in MyFirstAndroidApplication/​src/​ro/​pub/​cs/​systems/​eim/​lab01/​MainActivity.java
Line 754: Line 797:
  
 <​code>​ <​code>​
-student@eim2017:~$ git checkout customized_message +student@eim-lab:~$ git checkout customized_message 
-student@eim2017:~$ git rebase master+student@eim-lab:~$ git rebase master
 First, rewinding head to replay your work on top of it... First, rewinding head to replay your work on top of it...
 Applying: added staged command Applying: added staged command
-student@eim2017:~$ git checkout master+student@eim-lab:~$ git checkout master
 Switched to branch '​master'​ Switched to branch '​master'​
-student@eim2017:~$ git merge customized_message+student@eim-lab:~$ git merge customized_message
 </​code>​ </​code>​
  
Line 767: Line 810:
 Astfel, Astfel,
 <​code>​ <​code>​
-student@eim2017:~$ git rebase master customized_message+student@eim-lab:~$ git rebase master customized_message
 </​code>​ </​code>​
 este echivalentă cu este echivalentă cu
 <​code>​ <​code>​
-student@eim2017:~$ git checkout customized_message +student@eim-lab:~$ git checkout customized_message 
-student@eim2017:~$ git rebase master+student@eim-lab:~$ git rebase master
 </​code>​ </​code>​
  
Line 785: Line 828:
  
 <​code>​ <​code>​
-student@eim2017:~$ git branch -d customized_message+student@eim-lab:~$ git branch -d customized_message
 Deleted branch customized_message (was 477dcd6). Deleted branch customized_message (was 477dcd6).
-student@eim2017:~$ git branch -d fade_effect+student@eim-lab:~$ git branch -d fade_effect
 Deleted branch fade_effect (was 30fe2f3). Deleted branch fade_effect (was 30fe2f3).
 </​code>​ </​code>​
Line 960: Line 1003:
     - kit de dezvoltare pentru limbajul de programare Java;     - kit de dezvoltare pentru limbajul de programare Java;
     - SDK pentru Android;     - SDK pentru Android;
-    - mediu integrat de dezvoltare ​Eclipse sau Android Studio cu plugin-uri pentru Android, Genymotion;​ +    - mediu integrat de dezvoltare Android Studio cu plugin-uri pentru Android, Genymotion;​ 
-    - emulator Genymotion în care se configurează un dispozitiv virtual ​Nexus S 4.1.1 - API 16 400x800;+    - emulator Genymotion în care se configurează un dispozitiv virtual ​Phone 7.- API 24 960x540;
   - Să se instaleze Git, în cazul în care nu există deja.   - Să se instaleze Git, în cazul în care nu există deja.
   - Să se acceseze [[http://​www.github.com|GitHub]] și să se creeze un cont.   - Să se acceseze [[http://​www.github.com|GitHub]] și să se creeze un cont.
   - Să se realizeze configurațiile globale, specificând informații precum ''​user.name'',​ ''​user.email'',​ ''​core.editor'',​ ''​merge.tool''​. Verificați faptul că informațiile au fost introduse corect, prin două metode diferite. <​code>​   - Să se realizeze configurațiile globale, specificând informații precum ''​user.name'',​ ''​user.email'',​ ''​core.editor'',​ ''​merge.tool''​. Verificați faptul că informațiile au fost introduse corect, prin două metode diferite. <​code>​
-student@eim2017:~$ git config --global user.name "​Perfect Student"​ +student@eim-lab:~$ git config --global user.name "​Perfect Student"​ 
-student@eim2017:~$ git config --global user.email "​perfect_student@cti.pub.ro"​ +student@eim-lab:~$ git config --global user.email "​perfect_student@cti.pub.ro"​ 
-student@eim2017:~$ git config --global core.editor gedit +student@eim-lab:~$ git config --global core.editor gedit 
-student@eim2017:~$ git config --global merge.tool diff+student@eim-lab:~$ git config --global merge.tool diff
 </​code>​ Verificarea valorii pe care o au variabilele de configurare poate fi realizată în mai multe moduri: <​code>​ </​code>​ Verificarea valorii pe care o au variabilele de configurare poate fi realizată în mai multe moduri: <​code>​
-student@eim2017:~$ git config --list+student@eim-lab:~$ git config --list
 </​code>​ <​code>​ </​code>​ <​code>​
-student@eim2017:~$ cat .git/config+student@eim-lab:~$ cat .git/config
 </​code>​ <​code>​ </​code>​ <​code>​
-student@eim2017:~$ git config user.name +student@eim-lab:~$ git config user.name 
-student@eim2017:~$ git config user.email +student@eim-lab:~$ git config user.email 
-student@eim2017:~$ git config core.editor +student@eim-lab:~$ git config core.editor 
-student@eim2017:~$ git config merge.tool+student@eim-lab:~$ git config merge.tool
 </​code>​ </​code>​
   - Să se creeze un depozit pe contul Github creat, denumit '​Laborator01'​. Inițial, acesta trebuie să fie gol (nu trebuie să bifați nici adăugarea unui fișier ''​README.md'',​ nici a fișierului ''​.gitignore''​ sau a a fișierului ''​LICENSE''​).   - Să se creeze un depozit pe contul Github creat, denumit '​Laborator01'​. Inițial, acesta trebuie să fie gol (nu trebuie să bifați nici adăugarea unui fișier ''​README.md'',​ nici a fișierului ''​.gitignore''​ sau a a fișierului ''​LICENSE''​).
-  - Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​eim2017/​Laborator01|]]. În urma acestei operații, directorul Laborator01 va trebui să se conțină un director ''​labtaks''​ care conține proiectele ​Eclipse și AndroidStudio denumite ''​MyFirstAndroidApplication'',​ fișierele ''​README.md''​ și ''​LICENSE''​ și un fișier ''​.gitignore''​ care indică tipurile de fișiere (extensiile) ignorate. <​code>​ +  - Să se cloneze în directorul de pe discul local conținutul depozitului la distanță de la [[https://​www.github.com/​eim-lab/​Laborator01|]]. În urma acestei operații, directorul Laborator01 va trebui să se conțină un director ''​labtaks''​ care conține proiectele AndroidStudio denumite ''​MyFirstAndroidApplication'',​ fișierele ''​README.md''​ și ''​LICENSE''​ și un fișier ''​.gitignore''​ care indică tipurile de fișiere (extensiile) ignorate. <​code>​ 
-student@eim2017:~$ git clone https://​www.github.com/​eim2017/​Laborator01.git+student@eim-lab:~$ git clone https://​www.github.com/​eim-lab/​Laborator01.git
 </​code>​ </​code>​
   - Să se încarce conținutul descărcat în cadrul depozitului '​Laborator01'​ de pe contul Github personal. ​ <​code>​   - Să se încarce conținutul descărcat în cadrul depozitului '​Laborator01'​ de pe contul Github personal. ​ <​code>​
-student@eim2017:~$ cd Laborator01 +student@eim-lab:~$ cd Laborator01 
-student@eim2017:​~/​Laborator01$ git remote add Laborator01_perfectstudent https://​github.com/​perfectstudent/​Laborator01 +student@eim-lab:​~/​Laborator01$ git remote add Laborator01_perfectstudent https://​github.com/​perfectstudent/​Laborator01 
-student@eim2017:​~/​Laborator01$ git push Laborator01_perfectstudent master+student@eim-lab:​~/​Laborator01$ git push Laborator01_perfectstudent master
 </​code>​ </​code>​
   - Să se ruleze aplicația schelet:   - Să se ruleze aplicația schelet:
-    - în Eclipse: //File// → //New// → //Project// → //Android Project from existing code// SAU //File// → //Import// → //Android// → //Existing Android Code Into Workspace// și se indică directorul Laborator01/​labtasks/​eclipse;​ 
     - în Android Studio: //Open an existing Android Studio project// și se indică directorul Laborator01/​labtasks/​androidstudio;​     - în Android Studio: //Open an existing Android Studio project// și se indică directorul Laborator01/​labtasks/​androidstudio;​
   - În fișierul ''​MainActivity.java''​ din pachetul ''​ro.pub.cs.systems.eim.lab01''​ (directorul ''​src''​),​ să se modifice metoda ''​onClick''​ a clasei interne ''​ButtonClickListener''​ astfel încât:   - În fișierul ''​MainActivity.java''​ din pachetul ''​ro.pub.cs.systems.eim.lab01''​ (directorul ''​src''​),​ să se modifice metoda ''​onClick''​ a clasei interne ''​ButtonClickListener''​ astfel încât:
Line 1002: Line 1044:
 </​code>​ </​code>​
   - Să se încarce modificările realizate în cadrul depozitului '​Laborator01'​ de pe contul Github personal, folosind un mesaj sugestiv. ​ <​code>​   - Să se încarce modificările realizate în cadrul depozitului '​Laborator01'​ de pe contul Github personal, folosind un mesaj sugestiv. ​ <​code>​
-student@eim2017:​~/​Laborator01$ git add MyFirstAndroidApplication/​src/​ro/​pub/​cs/​systems/​eim/​lab01.MainActivity.java +student@eim-lab:​~/​Laborator01$ git add MyFirstAndroidApplication/​src/​ro/​pub/​cs/​systems/​eim/​lab01.MainActivity.java 
-student@eim2017:​~/​Laborator01$ git commit -m "​implemented functionality for customized message and fade effect"​ +student@eim-lab:​~/​Laborator01$ git commit -m "​implemented functionality for customized message and fade effect"​ 
-student@eim2017:​~/​Laborator01$ git push Laborator01_perfectstudent master+student@eim-lab:​~/​Laborator01$ git push Laborator01_perfectstudent master
 </​code>​ </​code>​
   - Să se ruleze un exemplu de proiect Android, dintre cele disponibile,​ folosind dispozivitul virtual instalat în cadrul emulatorului Genymotion. Să se simuleze un eveniment de tipul rotirea ecranului și să se observe modul în care se comportă aplicația.   - Să se ruleze un exemplu de proiect Android, dintre cele disponibile,​ folosind dispozivitul virtual instalat în cadrul emulatorului Genymotion. Să se simuleze un eveniment de tipul rotirea ecranului și să se observe modul în care se comportă aplicația.
-    ​- în Eclipse, ''​AccelerometerPlay''​ din cadrul exemplelor corespunzătoare nivelului de API 16 (legacy); +    - în Android Studio, ''​AccelerometerPlay''​ , din cadrul categoriei //Getting Started//​. ​(sau https://​github.com/​googlearchive/​android-AccelerometerPlay)
-    ​- în Android Studio, ''​Action Bar Compat - Basic'',​ din cadrul categoriei //Getting Started//.+
  
 ===== Resurse Utile ===== ===== Resurse Utile =====
Line 1019: Line 1060:
 [[http://​git-scm.com/​book|Scott CHACON, Pro Git, Apress, 2009]] - capitolele 1-3\\  [[http://​git-scm.com/​book|Scott CHACON, Pro Git, Apress, 2009]] - capitolele 1-3\\ 
 [[https://​github.com/​|GitHub]] [[https://​github.com/​|GitHub]]
 +
eim/laboratoare/laborator01.1518976973.txt.gz · Last modified: 2018/02/18 20:02 by dragos.niculescu
CC Attribution-Share Alike 3.0 Unported
www.chimeric.de Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0