Folosind controlul versiunii cu Unity3D

Acest articol este menit să fie un ghid definitiv cu privire la modul de control al versiunii corecte a proiectelor dvs. Unity!

Controlul versiunii este unul dintre cele mai importante instrumente din arsenalul dezvoltatorului. Vă permite să răsturnați cu ușurință modificările dacă rupeți accidental ceva, comparați versiunile mai vechi și mai noi ale codului dvs. pentru a vedea ce este diferit și permite echipelor să lucreze la același cod fără a-și suprascrie lucrul celuilalt. Până de curând, numai proiectele Unity Pro au putut fi controlate în mod corespunzător. Cu toate acestea, deoarece Unitatea 3.5, este acum posibilă și proiectele de control al versiunii în versiunea gratuită a Unity.


Ce este Controlul versiunii?

Un sistem de control al versiunilor sau VCS ține evidența modificărilor aduse fișierelor în dosar, cunoscute și sub numele de "copie de lucru". Aceste modificări sunt stocate alături de dosarul dintr-o bază de date cunoscută sub denumirea de "depozit". De fiecare dată când schimbați ceva în copia de lucru, trebuie să efectuați aceste modificări în depozit. VCS compară apoi ceea ce este deja în depozit cu modificările primite și stochează doar diferențele. Aceasta păstrează depozitul cât mai mic posibil.

Pentru acest proiect, vom folosi Mercurial, care este un VCS distribuit. Spre deosebire de sistemele VCS centralizate, cum ar fi Subversion (SVN), care se bazează de obicei pe un depozit la distanță stocat pe un server, un VCS distribuit poate gazdui repozitoare locale, numite uneori "sucursale locale", direct pe calculatorul dumneavoastră. Aceasta înseamnă că puteți face schimbări, le puteți angaja în filiala locală, le puteți testa și chiar le aruncați dacă se rupe ceva, toate fără a fi nevoie să supuneți membrilor echipei modificările dvs. până când nu știți că sunt perfecte. Odată ce sunteți sigur, puteți "împinge" aceste modificări într-un depozit la distanță pentru ca echipa dvs. să "tragă" în sucursalele locale.


Pregătirea unui proiect Unity pentru controlul versiunilor

Un proiect Unity necesită anumite meta-informații pentru a-și aminti ce componente și conexiuni sunt setate pe diferitele active. În mod tradițional, această informație meta a fost stocată ca un set de fișiere binare în dosarul Bibliotecă al unui proiect Unity. Cu toate acestea, această "blanc binar" nu poate fi îmbinată corespunzător, astfel încât schimbările aduse de două persoane ar putea să se răstoarne una asupra celeilalte, făcând lucrurile să se rupă în editor, chiar dacă editează diferite active.

Soluția la aceasta este de a activa fișierele Meta în setările proiectului.

  • Dați clic pe Editați> Setări proiect> Editor
  • Sub Controlul versiunii direcționați, schimbați mod la Fișierele Meta
  • Faceți clic pe File> Save

Aceasta va determina unitatea să creeze fișiere meta în dreptul fiecărui element din folderul Proiecte proiect. Acum, când un material este modificat în editor, numai materialul și fișierul meta asociat acestuia vor raporta modificări, în loc de întregul dosar Bibliotecă.


Instalarea programului Mercurial

Atât Windows cât și OSX au instalatori Mercurial. Accesați site-ul web Mercurial și faceți clic pe butonul mare de descărcare. Site-ul va recunoaște automat ce sistem de operare utilizați și descărcați programul de instalare corespunzător.

Deschideți instalatorul și rulați-l. Dați clic pe toți pașii și ar trebui să se instaleze fără a fi necesară nicio intervenție.

Pentru a vă asigura că Mercurial este instalat corect, deschideți o linie de comandă. În Windows, apăsați start și tip cmd în caseta de căutare. Pe OSX, deschideți Reflector și căutați Terminal.

În linia de comandă, introduceți:

 hg .

O listă scurtă de informații ar trebui să apară, inclusiv ce versiune de Mercurial pe care o utilizați, precum și o listă de comenzi comune. Pentru a obține lista completă a comenzilor, introduceți:

hg ajutor

Și pentru a obține ajutor pentru o comandă specifică, introduceți pur și simplu numele comenzii după ajutor:

hg ajuta clona

NOTĂ: Comenzile Mercurial încep întotdeauna cu hg, elementul pentru mercur pe tabelul periodic. Din fericire, acest nume de nume inteligent a fost folosit pentru că este ușor de scris.


Inițializarea depozitului

Primul lucru pe care trebuie să-l facem este să dăm folderul proiectului nostru un depozit.

În linia de comandă introduceți:

hg init

Asta e. Dosarul nostru are acum un depozit și este pregătit pentru controlul versiunii. Dacă ați ascuns fișierele activate, veți observa a .hg a fost creat în folderul proiectului. Aici locuiește depozitul. Dacă, din anumite motive, vreți să eliminați controlul versiunii, pur și simplu ștergeți .hg pliant. Copia dvs. de lucru a fișierelor va fi nevătămată.


Verificați starea

Acum că dosarul nostru de proiect are un depozit, să verificăm starea depozitului pentru a vedea ce sa schimbat. Mercurial va accepta nume de comenzi scurtate, astfel încât oricare dintre următoarele va funcționa:

 hg stare hg stat hg st

Un raport de stare ar trebui să vină cu o listă de fișiere, fiecare cu o singură literă lângă ele. În acest caz, toate fișierele vor avea semne de întrebare lângă ele. Semnul de întrebare indică faptul că fișierul nu este încă controlat în versiune.

? Un fișier care se află în copia de lucru, dar nu este urmărit de depozit.
! Un fișier care este urmărit de depozit, dar lipsește în copia de lucru.
A Un fișier care a fost adăugat în repozitoriu de la ultimul angajament.
M Un fișier care a fost modificat de la ultimul angajament.
R Un fișier care este programat să fie eliminat din depozit la următoarea comitere.

Adăugarea de fișiere în depozit

Trebuie să adăugăm în mod explicit fișiere în depozitul nostru pentru a permite companiei Mercurial să știe că vrem să fie controlată versiunea.

Se pot adăuga fișiere individuale:

 hg add myfile.txt

Pot fi adăugate întregi dosare:

hg adăugați script-uri /

Să adăugăm fiecare fișier fără versiuni (cu ? semn de întrebare în raportul de stare) într-o singură lovitură, fără a specifica vreun nume de fișier:

hg add

Efectuați o verificare de stare.

stare hg

Orice fișiere care au fost adăugate ar trebui să aibă acum o scrisoare A alături de ei, indicând că au fost adăugați la depozit și că sunt acum urmăriți de Mercurial.


Modificarea comitetului

Acum că i-am spus lui Mercurial care fișiere vrem să fie versiunea controlată, trebuie să le angajăm în depozit. Fiecare comitere este ca o instantanee cunoscută sub numele de revizuire, care ține evidența diferențelor dintre revizuirile anterioare și cea actuală.

Există două părți la orice comitere, un mesaj și numele dvs. de utilizator. Mesajul este locul unde puteți descrie ceea ce ați făcut, dar păstrați-l scurt și dulce. Numele de utilizator este doar un identificator pentru a permite oricui altcineva care ar putea folosi depozitul să știe cine a făcut anumite schimbări. Numele de utilizator este setat cu -u și mesajul este setat cu -m steag:

hg commit -u ian -m "inițial"

Pentru a vă asigura că comitetul a avut succes, trebuie să verificați jurnalul:

hg log

Pentru a fi sigur de două ori, verificați starea pentru a vă asigura că nu sunt lăsate modificări.

stare hg

Un raport de stare gol înseamnă că totul a fost angajat în mod corespunzător.

NOTĂ: Se recomandă să vă comiteți frecvent. Fiecare comitere ar trebui să fie cât mai "atomică" posibil. Adică, ar trebui să fie ușor descris printr-o simplă expresie precum "creșterea înălțimii jucătorului". Dacă găsiți că este necesar să utilizați "și" sau virgulele în mesajele de comitere, atunci este probabil timpul să faceți două comitete separate. Motivul pentru aceasta este să ușurați redarea anumitor modificări pe care le-ați făcut atunci când întâmpinați probleme.


Fixarea greșelilor

Există două modalități-cheie pentru a remedia greșelile: o revocare sau o revenire. O revocare va anula ultima comandă pe care ați introdus-o, care este ideală pentru a corecta greșelile de scriere în mesajele dvs. de comitere sau pentru a adăuga zelos.

 hg rollback

Efectuați o verificare a stării pentru a vă asigura că totul sa întors corect.

 stare hg

O revenire este mai puternică, permițându-vă să călătoriți înapoi în timp prin mai multe revizuiri, în cazul în care trebuie să renunțați la mai multe schimbări pe care le-ați făcut. Pentru a afla ce revizie doriți să vă reîntoarceți, trebuie mai întâi să verificați jurnalul:

 hg log

Fie numărul, fie hash-ul pot fi folosite pentru a se referi la o anumită revizie în timp ce se revin. Numărul este specific depozitului dvs., deoarece sucursala altcuiva ar putea avea mai multe modificări, astfel încât numerele acestora să fie diferite. Hash-ul este universal, aceasta înseamnă că oricine ar putea reveni la o revizie specifică dintr-un depozit comun, folosind șirul hash.

Pentru a reveni la o revizuire specifică, trebuie să specificăm numărul de revizie folosind -r steag. Trebuie, de asemenea, să îi spunem lui Mercurial să "revină pe toate" folosind -A steag. În cele din urmă, trebuie să le spunem companiei Mercurial că nu vrem să creeze fișiere de rezervă utilizând --no-copie de rezervă steag.

 hg revert -r 0 -a - fără backup

Efectuați o verificare a stării pentru a vă asigura că totul a revenit corect.

 stare hg

NOTĂ: Dacă omiteți --no-copie de rezervă flag, Mercurial va crea fișiere de rezervă pentru toate fișierele afectate de procedura de returnare. Aceste fișiere de rezervă vor avea toate .orig extensie. Asigurați-vă că nu adăugați .orig fișiere.


Ignorarea fișierelor nedorite

Acum că ne-am desființat greșeala, să ne asigurăm că nu se va întâmpla din nou. Vrem să ignorăm permanent folderele Bibliotecă și Temp, astfel încât să nu poată fi adăugate accidental data viitoare când vom primi declanșatorul mulțumit de comanda add.

Mercurial utilizează un fișier special numit .hgignore pentru a stoca numele fișierelor și dosarelor pe care vreți să le ignorați definitiv. Acest fișier merge direct în dosarul proiectului dvs. și este controlat în versiune la fel ca orice altceva. Acest lucru asigură că toată lumea care utilizează repo-ul nu poate să o polueze accidental cu fișiere nedorite.

Utilizând editorul de text preferat pentru a introduce următoarele:

 sintaxa: Glob Temp Template * .pidb * .sln * .userprefs * .csprog * .orig

Acest lucru îi spune lui Mercurial că dorim să folosim sintaxa în stil shell (cunoscută sub numele de "glob") pentru a ignora dosarele Bibliotecă și Temp, pentru a ignora mai multe fișiere temporare create de MonoDevelop și pentru a ignora .orig fișiere doar în cazul în care le creăm accidental când revenim.

Salvați fișierul în rădăcina folderului proiectului ca .hgignore (notarea punctului la început). Apoi efectuați un alt test de stare:

stare hg

.hgignore fișierul ar trebui să figureze acum în raportul de stare, dar folderul Bibliotecă, dosarul Temp și alte fișiere ignorate nu ar trebui să fie. Așadar, putem folosi în siguranță comanda de adăugare fără a fi nevoie să folosim nume exacte de fișiere și apoi să angajăm rezultatele.

 hg adăugați hg commit -u ian -m "Initial"

Verificați jurnalul pentru a vă asigura că comitetul a avut succes.

hg log

NOTĂ: Mai multe informații despre fișierele hgignore pot fi găsite aici.


Împingerea modificărilor către un depozit la distanță

Dacă doriți să partajați depozitul dvs. cu alți dezvoltatori, cel mai simplu mod este să creați un depozit la distanță de pe un server și să împingeți modificările dvs..

Primul lucru pe care trebuie să-l faci este să găsești o gazdă Mercurial. Mai multe există, inclusiv BitBucket și Kiln; Ambele au conturi gratuite pentru echipe mici. În cazul nostru, vom folosi BitBucket, dar ambele servicii funcționează în esență la fel. Odată ce v-ați înscris pentru un cont la oricare dintre aceste servicii, asigurați-vă că ați creat un depozit nou utilizând interfața web.

Odată creat, căutați "calea clonării". Ar trebui să arate ceva de genul:

hg clona https://bitbucket.org/username/reponame

În mod normal, această comandă va fi utilizată pentru a crea o copie locală a depozitului. Dar avem deja un depozit local și dorim să trimitem schimbări de la acesta la depozitul la distanță. Pentru a face acest lucru, putem lua adresa URL la sfârșitul șirului de clone și îl putem folosi ca destinație pentru comanda push.

hg push https://bitbucket.org/username/reponame

Mercurial va compara depozitul local cu depozitul de la distanță pentru a vedea cum diferă acestea. Se va vedea că magazia noastră locală are modificări mai recente pe care refuzatorul de la distanță le lipsește și le va trimite la depozitul de la distanță.

Cu toate acestea, va solicita mai întâi un nume de utilizator și o parolă. Acestea ar trebui să corespundă cu numele de utilizator / adresa de e-mail și parola pe care le-ați înscris la serviciul gazdă cu.

Mercurial ar trebui să raporteze că toate modificările au fost împinse cu succes, iar asta înseamnă că oricine depinde de depozitul dvs. poate acum "trage" de la acesta pentru a primi modificările. În primul rând, vor trebui să cloneze depozitul pentru a face o copie locală.

hg clona https://bitbucket.org/username/reponame

Și apoi trageți orice schimbări pe care le faceți sau pe oricine altcineva pe măsură ce trece timpul:

hg trageți

Apoi va trebui să faceți o "actualizare" pentru a vă asigura că actualizarea copiei dvs. de lucru:

hg update

Dar pentru a economisi timp, puteți face tragerea și actualizarea toate dintr-o dată folosind -u steag:

hg pull -u

NOTĂ: Mercurial vă va solicita ori de câte ori un fișier binar este actualizat sau fuzionat. Dacă nu sunteți sigur că ați făcut modificări în fișierele binare locale, alegeți întotdeauna "(O) alte" opțiune în loc de "(Local" opțiune.


Setări pentru a face viața mai ușoară

Există câteva aspecte plictisitoare de a emite aceleași comenzi mereu, cum ar fi faptul că trebuie să vă amintiți să furnizați un nume de utilizator când efectuați comiterea, să introduceți o parolă la fiecare apăsare etc. Multe dintre aceste setări pot fi stocate în așa-numitele un hgrc fişier. Pentru a crea un hgrc fișier, utilizați editorul de text preferat și introduceți următoarele:

 [paths] default = https://bitbucket.org/username/reponame

Aceasta spune Mercurial ce cale să utilizeze implicit pentru comenzi push și pull. Asigurați-vă că înlocuiți această adresă falsă cu adresa reală la depozitul dvs. la distanță. Apoi, introduceți următoarele:

 [ui] username = Prenume Nume

Acest lucru îi spune lui Mercurial ce nume de utilizator să utilizeze implicit când se angajează. Încă o dată, înlocuiți-l cu acreditările dvs. corecte și asigurați-vă că adresa de e-mail se potrivește cu cea la care v-ați înscris. În cele din urmă, introduceți:

 [auth] host.prefix = bitbucket.org host.username = nume de utilizator host.password = parola host.schemes = http https

Acest lucru îi spune lui Mercurial ce acreditări să folosească atunci când împingeți la un depozit securizat de la distanță, astfel încât să nu fie necesar să introduceți un nume de utilizator și o parolă de fiecare dată când împingeți sau trageți. Asigurați-vă că înlocuiți prefixul cu cea mai scurtă parte a adresei gazdei dvs. și nu includeți http: // protocol în prefixul fie. Apoi, înlocuiți numele de utilizator și parola cu cea pe care ați semnat-o cu gazda dvs. Schema spune Mercurial care protocoale să încerce să se conecteze.

În cele din urmă, salvați fișierul ca hgrc (fără punct sau extensie la sfârșit) interior .hg folder din depozit. Nu trebuie să mai aveți nevoie să dați manual nume de utilizator, parole sau căi atunci când emiteți comenzi de acum încolo.


Concluzie

Controlul versiunii poate părea un pic cam descurajator pentru cei neinițiați, dar efortul merită să fie. Vă dă liniște pentru a ști că, în orice moment, puteți rula un proiect rupt înapoi până la un punct în care a funcționat înainte. De asemenea, utilizarea depozitelor de la distanță înseamnă că acest cod nu poate fi împărțit doar cu membrii echipei, ci recuperarea proiectului după ce se întâmplă ceva catastrofal (cum ar fi un defect al unității de hard disk) este ușor.

Pentru a afla mai multe despre controlul versiunilor distribuite și despre Mercurial, recomand foarte mult vizitarea companiei Hg Init. Ea are o serie de articole care explică practicile de control al versiunilor și caracteristicile Mercurial în profunzime. Este scurtă, foarte informativă, ușor de citit, ușor de înțeles și chiar puțină amuzantă.

Cod