Getting Started/Sources/Subversion (ro): Difference between revisions

From KDE TechBase
No edit summary
({{Proposed_deletion|reason=This is a translated page, but the English version of this page does not have content anymore.}})
 
(5 intermediate revisions by 3 users not shown)
Line 1: Line 1:
{{Template:I18n/Language Navigation Bar|Getting Started/Sources/Using Subversion with KDE}}
{{Proposed_deletion|reason=This is a translated page, but the English version of this page does not have content anymore.}}


{{TutorialBrowser|
{{TutorialBrowser|
Line 134: Line 134:
=== Dosarul principal <tt>/branches</tt> ===
=== Dosarul principal <tt>/branches</tt> ===


In acest dosar se afla ramificaţiile create după fiecare versiune oficială.
În acest dosar se află ramificaţiile create după fiecare versiune oficială.


Cele mai multe aplicaţii KDE urmează principiul de a adăuga noi abilităţi (şi chiar şi texte vizibile) doar în versiunea aflată în dezvoltare &#8212;
Cele mai multe aplicaţii KDE urmează principiul de a adăuga noi abilităţi (şi chiar şi texte vizibile) doar în versiunea aflată în dezvoltare &#8212;
Line 143: Line 143:
Spre exemplu, ramificaţia KDE 3.4.x se află în <tt>/branches/KDE/3.4/</tt>
Spre exemplu, ramificaţia KDE 3.4.x se află în <tt>/branches/KDE/3.4/</tt>


Dosarele din <tt>/branches</tt> apartin fiecarei aplicatii in parte, cum ar fi <tt>akregator/</tt>, <tt>amarok/</tt>,
Dosarele din <tt>/branches</tt> sunt asociate fiecărei aplicaţii în parte, cum ar fi <tt>akregator/</tt>, <tt>amarok/</tt>,
<tt>arts/</tt>, <tt>k3b/</tt>, etc. Tot aici veti gasi dosarul <tt>KDE/</tt>, continand toate versiunile oficiale ale KDE.
<tt>arts/</tt>, <tt>k3b/</tt>, etc. Tot aici veţi găsi dosarul <tt>KDE/</tt>, conţinând toate versiunile oficiale ale KDE.


Un dosar mai special aflat in <tt>/branches</tt> este <tt>work/</tt>. Acest dosar contine asa-numitele "ramificatii de test", adica ramificatii continand cod sursa aflat in teste, uneori chiar experimental. Ramificatiile de test care afecteaza mai multe aplicatii sunt pastrate in <tt>/branches/work/</tt>, dar ramificatiile care afecteaza doar o singura aplicatie pot fi pastrate in dosarul asociat cu aplicatia respectiva. Dezvoltatorii aplicatiei respective sunt cei care iau decizia folosirii uneia dintre aceste locatii.
Un dosar mai special aflat în <tt>/branches</tt> este <tt>work/</tt>. Acest dosar conţine aşa-numitele "ramificaţii de test", adică ramificaţii conţinând cod sursă aflat în teste, uneori chiar cod experimental. Ramificaţiile de test care afectează mai multe aplicaţii sunt păstrate în <tt>/branches/work/</tt>, dar ramificaţiile care afectează doar o singură aplicaţie pot fi păstrate în dosarul asociat cu aplicaţia respectivă. Dezvoltatorii aplicaţiei respective sunt cei care iau decizia folosirii uneia dintre aceste locaţii.






== Descarcarea modulelor si actualizarea copiei locale ==
== Descărcarea modulelor şi actualizarea copiei locale ==


=== Descarcarea modulelor ===
=== Descărcarea modulelor ===
Comanda Subversion <tt>checkout</tt> poate fi folosita pentru a descarca orice modul din depozitul KDE.
Comanda Subversion <tt>checkout</tt> poate fi folosită pentru a descărca orice modul din depozitul KDE.


'''Atentie!''' Daca descarcati trunk/KDE/ sau branches/KDE/foo/ veti constata ca ati descarcat intreg modulul kde-i18n!
'''Atenţie!''' Dacă descărcaţi trunk/KDE/ sau branches/KDE/foo/ veţi constata că aţi descărcat întreg modulul kde-i18n!


Spre exemplu, daca doriti sa descarcati doar modulul KDevelop din depozit, folositi comenzile:
Spre exemplu, dacă doriţi să descărcaţi doar modulul KDevelop din depozit, folosiţi comenzile:


pentru CVS:
pentru CVS:
Line 165: Line 165:
pentru Subversion:
pentru Subversion:


Utilizatorii CVS care acceseaza depozitul prin intermediul SSH ar trebui sa foloseasca protocolul svn+ssh, iar utilizatorii CVS care acceseaza depozitul folosind o parola ar trebui sa foloseasca protocolul https in comenzile urmatoare.
Utilizatorii CVS care accesau depozitul prin intermediul SSH ar trebui să folosească protocolul svn+ssh, iar utilizatorii CVS care accesau depozitul folosind o parola ar trebui să folosească protocolul https în comenzile următoare.


  svn checkout &lt;protocol&gt;://&lt;utilizator&gt;@svn.kde.org/home/kde/trunk/KDE/kdevelop
  svn checkout &lt;protocol&gt;://&lt;utilizator&gt;@svn.kde.org/home/kde/trunk/KDE/kdevelop
Line 171: Line 171:
=== Actualizarea copiei locale ===
=== Actualizarea copiei locale ===


Pentru a actualiza copia dumneavoastra, folositi comanda <tt>update</tt>.
Pentru a actualiza copia dumneavoastră, folosiţi comanda <tt>update</tt>.


Aceasta comanda functioneaza la fel ca in CVS: schimbati dosarul curent cu cel al copiei locale (pentru cei neexperimentati in folosirea Subversion, copia locala ar trebui sa se afle in dosarul personal) si tastati comanda <tt>svn update</tt> (sau, mai scurt, <tt>svn up</tt>).
Această comandă funcţionează la fel ca în CVS: schimbaţi dosarul curent cu cel al copiei locale (pentru cei neexperimenţati în folosirea utilitarului Subversion, copia locală ar trebui se afle în dosarul personal) şi tastaţi comanda <tt>svn update</tt> (sau, mai scurt, <tt>svn up</tt>).


== Cum puteti afla daca un fisier a fost modificat in depozit ==
== Cum puteţi afla dacă un fişier a fost modificat în depozit ==


Pentru a afla care dintre fisierele locale au fost modificate in depozit, majoritatea utilizatorilor CVS foloseau comanda:
Pentru a afla care dintre fişierele locale au fost modificate în depozit, majoritatea utilizatorilor CVS foloseau comanda:
  cvs up
  cvs up
si cautau marcajul '''M'''; in Subversion puteti afla starea fisierelor locale cu comanda:
şi căutau marcajul '''M'''; în Subversion puteţi afla starea fişierelor locale cu comanda:
  svn status
  svn status
.
.


== Inglobarea modificarilor facute de dumneavoastra in depozit ==
== Înglobarea modificărilor dumneavoastră în depozit ==


La fel ca in CVS, inglobarea modificarilor in depozit se realizeaza cu una dintre comenzile <tt>commit</tt> sau <tt>checkin</tt> (<tt>ci</tt> pe scurt).
La fel ca în CVS, înglobarea modificărilor în depozit se realizează cu una dintre comenzile <tt>commit</tt> sau <tt>checkin</tt> (<tt>ci</tt> pe scurt).


comenzile CVS:
comenzile CVS:
Line 201: Line 201:
  svn ci numefisier.cpp
  svn ci numefisier.cpp


<tt>svn</tt> va porni editorul de text specificat in variabila de mediu <tt>$SVN_EDITOR</tt> pentru a va permite sa introduceti un mesaj asociat cu modificarile dumneavoastra. Alternativ, puteti folosi optiunea <tt>-m</tt> alaturi de textul mesajului:
<tt>svn</tt> va porni editorul de text specificat în variabila de mediu <tt>$SVN_EDITOR</tt> pentru a permite să introduceţi un mesaj asociat cu modificările dumneavoastră. Alternativ, puteţi folosi opţiunea <tt>-m</tt> alături de textul mesajului:


  svn ci -m "Actualizarea protocolului de comunicatie conform cu standardul HTTP/1.1"
  svn ci -m "Actualizarea protocolului de comunicatie conform cu standardul HTTP/1.1"


== Fisiere ignorate ==
== Fişiere ignorate ==


Subversion pastreaza lista fisierelor ignorate in interiorul fiecarui dosar in parte. Pentru a edita lista fisierelor ignorate din dosarul curent, folositi comanda:
Subversion păstrează lista fişierelor ignorate în interiorul fiecarui dosar în parte. Pentru a edita lista fişierelor ignorate din dosarul curent, folosiţi comanda:
   svn propedit svn:ignore .
   svn propedit svn:ignore .
<tt>svn</tt> va deschide lista in editorul de texte; scrieti numele fisierelor care doriti sa fie ignorate, cate unul pe linie. Cand ati terminat de modificat lista, tastati o comanda de inglobare pentru a trimite modificarea facuta la depozitul KDE.
<tt>svn</tt> va deschide lista în editorul de texte; scrieţi numele fişierelor care doriţi să fie ignorate, câte unul pe linie. Când aţi terminat de modificat lista, executaţi o comandă de înglobare pentru a trimite modificarea facută la depozitul KDE.


In CVS, dar nu si in Subversion inca, fisierele ignorate puteau fi specificate intr-o lista globala. Subversion 1.3 va adauga suport pentru aceasta lista globala, dar pana atunci puteti adauga lista de fisiere ignorate la grupul [miscellany] din fisierul {{path|~/.subversion/config}} (totul pe o singura linie):
În CVS, spre deosebire de versiunea actuală a Subversion, fişierele ignorate puteau fi specificate într-o listă globală. Subversion 1.3 va adăuga suport pentru această listă globală, dar până atunci puteţi adăuga lista de fişiere ignorate la grupul [miscellany] din fişierul {{path|~/.subversion/config}} (totul pe o singură linie):


  global-ignores = *.o *.lo *.la .*.rej *.rej .*~ *~ .#* #*# .DS_Store *.moc
  global-ignores = *.o *.lo *.la .*.rej *.rej .*~ *~ .#* #*# .DS_Store *.moc
Line 221: Line 221:
  Makefile.rules Makefile.calls autom4te.cache *.kidl
  Makefile.rules Makefile.calls autom4te.cache *.kidl


== Lucrul cu mai multe revizii si ramificatii ==
== Lucrul cu mai multe revizii şi ramificaţii ==


Spre deosebire de CVS, Subversion nu genereaza un numar de revizie pentru fiecare fisier modificat, ci pentru intreg depozitul. Astfel, un numar de revizie va reprezenta continutul depozitului in momentul in care a fost creata revizia. Cu alte cuvinte, un numar de revizie seamana foarte mult cu o amprenta temporala (de fapt, serverul Subversion foloseste acest fapt pentru a cauta dupa data mai repede).
Spre deosebire de CVS, Subversion nu generează un număr de revizie pentru fiecare fişier modificat, ci pentru întreg depozitul. Astfel, un numar de revizie reprezintă conţinutul depozitului în momentul în care a fost creată revizia. Cu alte cuvinte, un număr de revizie seamăna foarte mult cu o amprentă temporală (de fapt, serverul Subversion foloseşte acest fapt pentru a căuta mai eficient după dată).


Spre exemplu, cand acualizati din depozitul KDE, Subversion va va comunica urmatoarele:
Spre exemplu, atunci când acualizaţi copia locală din depozitul KDE, Subversion va comunica următoarele:


  Updated to revision 403821.
  Updated to revision 403821.


Aceasta inseamna ca ultima revizie disponibila in depozit la momentul actualizarii a fost 403821. Daca modificati un fisier si il inglobati in depozit, Subversion va actualiza numarul reviziei pe server si va va informa de aceasta actualizare; ca si in CVS, doar fisierele inglobate vor fi actualizate: va trebui sa rulati comanda <tt>cvs up</tt> petru a actualiza si restul fisierelor.
Acest mesaj înseamnă că ultima revizie disponibilă în depozit la momentul actualizării este 403821. Dacă modificaţi un fişier şi apoi înglobaţi modificarea în depozit, Subversion va actualiza numărul reviziei pe server şi vă va informa de această actualizare a depozitului; ca şi în CVS, doar fişierele modificate vor fi actualizate în depozit: va trebui să rulaţi comanda <tt>cvs up</tt> petru a actualiza şi restul fişierelor.


Daca doriti sa accesati o anumita revizie a unui fisier, puteti folosi optiunea <tt>-r</tt> alaturi de una din urmatoarele:
Dacă doriţi să accesaţi o anumită revizie a unui fişier, puteţi folosi opţiunea <tt>-r</tt> alături de unul dintre următoarele cuvinte cheie:
    
    
* Numarul reviziei: spre exemplu, folositi -r 403819 pentru a accesa revizia cu numarul 403819
* Numărul reviziei: spre exemplu, folosiţi -r 403819 pentru a accesa revizia cu numarul 403819
* '''BASE''': revizia la care ati efectuat ultima actualizare a copiei locale
* '''BASE''': revizia la care aţi efectuat ultima actualizare a copiei locale
* '''COMMITTED''': revizia la care ati facut ultima inglobare a modificarilor dumneavoastra, inainte de BASE
* '''COMMITTED''': revizia la care aţi efectuat ultima înglobare a modificarilor dumneavoastră (este mai mică decât BASE)
* '''PREV''': revizia la care ati facut penultima inglobare, inainte de COMMITTED
* '''PREV''': revizia la care aţi efectuat penultima înglobare  (este mai mică decât COMMITTED)
* '''HEAD''': ultima revizie disponibila pe server
* '''HEAD''': ultima revizie disponibilă pe server
* '''{ date }''': puteti specifica o data intre acolade, pentru a cauta revizia cea mai apropiata de aceasta data.
* '''{ date }''': puteţi specifica o dată între acolade, pentru a căuta revizia cea mai apropiată de această dată.


Iata un posibil scenariu:
Iată un posibil scenariu:


# Rulati comanda <tt>svn up</tt> pentru a actualiza copia locala la ultima revizie disponibila. Sa presupunem ca Subversion v-a anuntat ca a actualizat copia locala la revizia 403821. Aceasta inseamna ca HEAD si BASE au valoarea 403821.
# Executaţi comanda <tt>svn up</tt> pentru a actualiza copia locală la ultima revizie disponibilă. presupunem Subversion v-a anunţat că a actualizat copia locală la revizia 403821. Aceasta înseamnă că HEAD şi BASE au valoarea 403821.
# Modificati fisierul README si inglobati modificarea in depozit. Sa presupunem ca Subversion va anunta ca ati creat revizia 403822. Aceasta inseamna ca HEAD, BASE si COMMITTED au valoarea 403822.
# Modificaţi fişierul README şi înglobaţi modificarea în depozit. presupunem Subversion v-a anunţat că aţi creat revizia 403822. Aceasta înseamnă că HEAD, BASE şi COMMITTED au valoarea 403822.
# Modificati acelasi fisier din nou si inglobati modificarea in depozit. Acum PREV are valoarea 403822, dar HEAD, BASE si COMMITTED au o noua valoare (sa presupunem ca aceasta este 403823).
# Modificaţi acelaşi fişier din nou şi înglobaţi modificarea în depozit. Acum PREV are valoarea 403822, dar HEAD, BASE şi COMMITTED au valoarea noii revizii (presupunem ca aceasta este 403823).
# In continuare, o alta persoana inglobeaza modificarile sale in depozit, iar dumneavoastra va actualizati copia cu aceste modificari. Daca Subversion va anunta ca ati actualizat copia locala la revizia 403824, aceasta inseamna ca HEAD si BASE vor avea noua valoare 403824 dar PREV si COMMITTED raman la vechile valori)
# În continuare, o altă persoană înglobează modificările sale în depozit, iar dumneavoastră vă veţi actualiza copia locală cu aceste modificări. Dacă Subversion vă anunţă că aţi actualizat copia locală la revizia 403824, aceasta înseamnă că HEAD şi BASE vor avea noua valoare 403824 dar PREV şi COMMITTED rămân la vechile valori)
# Daca o alta persoana modifica acum fisierul README, HEAD va avea o noua valoare. Pana la urmatoarea actualizare, valorile celorlalte cuvinte cheie raman aceleasi pentru dumneavoastra. In acest moment vom avea HEAD = 403825 (ultima revizie disponibila pe server), BASE = 403824 (ultima revizie la care ati efectuat o actualizare), COMMITTED = 403823 (revizia ultimelor modificari pe care le-ati inglobat in depozit) si PREV = 403822 (revizia penultimelor modificari pe care le-ati inglobat in depozit).
# Dacă o altă persoană modifică acum fisierul README, HEAD va avea o nouă valoare. Până la următoarea actualizare, valorile celorlalte cuvinte cheie rămân aceleaşi pentru dumneavoastră. În acest moment vom avea HEAD = 403825 (ultima revizie disponibilă pe server), BASE = 403824 (ultima revizie la care aţi efectuat o actualizare), COMMITTED = 403823 (revizia ultimelor modificări pe care le-aţi înglobat în depozit) şi PREV = 403822 (revizia penultimelor modificări pe care le-aţi înglobat în depozit).


Aceste cuvinte cheie sunt utile atunci cand doriti sa obtineti inregistrari sau diferente intre inglobari in depozit.
Aceste cuvinte cheie sunt utile atunci când doriţi să obţineţi înregistrări de transfer sau diferenţe între înglobări în depozit.


Daca doriti sa vedeti diferenta dintre copia dumneavoastra si revizia BASE puteti folosi comanda:
Dacă doriţi să vedeţi diferenţa dintre copia dumneavoastră şi revizia BASE puteţi folosi comanda:


  svn diff
  svn diff


Aceasta operatie este rapida deoarece Subversion poate obtine ambele versiuni din copia locala. Evident, nu este nevoie de conexiune la server pentru a efectua aceasta operatie.
Această operaţie este rapidă deoarece Subversion poate obţine ambele versiuni din copia locală. Evident, nu este nevoie de conexiune la server pentru a efectua această operaţie.


Daca doriti sa vedeti diferenta dintre copia dumneavoastra si ultima revizie disponibila pe server puteti folosi comanda:
Dacă doriţi să vedeţi diferenţa dintre copia dumneavoastră şi ultima revizie disponibilă pe server puteţi folosi comanda:


  svn diff -r HEAD
  svn diff -r HEAD


Daca doriti sa vedeti ce s-a schimbat in depozit de la ultima actualizare pe care ati facut-o copiei dumneavoastra puteti folosi comanda:
Dacă doriţi să vedeţi ce s-a schimbat în depozit de la ultima actualizare pe care aţi făcut-o copiei dumneavoastră puteţi folosi comanda:


  svn diff -r BASE:HEAD
  svn diff -r BASE:HEAD


Daca doriti sa vedeti ultima modificare inglobata inainte de revizia BASE puteti folosi comanda:
Dacă doriţi să vedeţi ultima modificare înglobată înainte de revizia BASE puteţi folosi comanda:


  svn diff -r PREV:BASE
  svn diff -r PREV:BASE
Line 270: Line 270:
  svn diff -r PREV:COMMITTED
  svn diff -r PREV:COMMITTED


alcarei format este valabil si pentru comanda <tt>svn log</tt>.
al cărei format este valabil şi pentru comanda <tt>svn log</tt>.


== Linking in subdirectories from other places ==
== Legături către dosare externe ==


Poate doriti sa includeti o copie a unui dosar aflat la o alta locatie, doar pentru a il accesa mai usor, nu pentru a modifica codul continut. Bineinteles, aceasta copie ar trebui sa se actualizeze automat de fiecare data cand dosarul original este modificat. Subversion ofera suport pentru acest scenariu. Va trebui sa editati proprietatea <tt>svn:externals</tt> a dosarului local in care doriti sa plasati copia dosarului extern. Folositi comanda:
Poate doriţi să includeţi o copie a unui dosar aflat la o altă locaţie, doar pentru a-l putea accesa mai uşor, nu pentru a modifica codul conţinut în acesta. Bineînţeles, această copie va trebui se actualizeze automat de fiecare dată când dosarul original este modificat. Subversion oferă suport pentru această actualizare automată. Va trebui să editaţi proprietatea <tt>svn:externals</tt> a dosarului local în care aţi plasat copia dosarului extern. Folosiţi comanda:
  svn propedit svn:externals .
  svn propedit svn:externals .
si introduceti cate o linie pentru fiecare dosar extern ca in exemplul urmator:
şi introduceţi o linie pentru dosarul extern, ca în exemplul următor:
  libkhalkhi svn://anonsvn.kde.org/home/kde/trunk/playground/pim/khalkhi
  libkhalkhi svn://anonsvn.kde.org/home/kde/trunk/playground/pim/khalkhi
La fiecare operatie de actualizare dosarului local <tt>libkhalkhi</tt> va fi actualizat cu continutul dosarului extern <tt>/trunk/playground/pim/khalkhi</tt>.
La fiecare operaţie de actualizare a copiei locale, <tt>libkhalkhi</tt> va fi actualizat cu conţinutul dosarului extern <tt>/trunk/playground/pim/khalkhi</tt>.


{{warning|De retinut ca nu puteti ingloba in depozit modificarile pe care le faceti in copia locala a dosarului extern, aceasta neavand drept de inglobare pe server.}}
{{warning|De reţinut că nu puteţi îngloba în depozit modificările pe care le faceţi în copia locală a dosarului extern, aceasta neavând drept de înglobare pe server.}}


In exemplele de mai sus am folosit protocolul <tt>svn://anonsvn.kde.org</tt> deoarece serverul anonsvn.kde.org poate fi accesat fara a avea nevoie de cont de utilizator. Protocoalele <tt>https:</tt> sau <tt>svn+ssh:</tt> vor putea fi folosite doar daca aveti cont de utilizator pe server. Serverul <tt>anonsvn.kde.org</tt> are totusi unele mici dezavantaje: nu este tot timpul sincronizat cu serverul <tt>svn.kde.org</tt>, deci inglobarile efectuate pe <tt>svn.kde.org</tt> vor aparea putin mai tarziu pe <tt>anonsvn.kde.org</tt>. De asemenea unele utilitare firewall blocheaza protocolul <tt>svn:</tt>.
În exemplele de mai sus am folosit protocolul <tt>svn://anonsvn.kde.org</tt> deoarece serverul anonsvn.kde.org poate fi accesat fără a avea nevoie de cont de utilizator. Protocoalele <tt>https:</tt> sau <tt>svn+ssh:</tt> vor putea fi folosite doar dacă aveţi cont de utilizator. Serverul <tt>anonsvn.kde.org</tt> are totusi unele mici dezavantaje: nu este tot timpul sincronizat cu serverul <tt>svn.kde.org</tt>, deci înglobările efectuate pe <tt>svn.kde.org</tt> vor apărea putţn mai tarziu pe <tt>anonsvn.kde.org</tt>. De asemenea, unele utilitare firewall blochează protocolul <tt>svn:</tt>.


Un caz special al KDE 3 este dosarul <tt>admin</tt>, care contine utilitarele de compilare specifice KDE 3. Acesta este dezvoltat in <tt>/branches/KDE/3.5/kde-common</tt> si are cate o copie in fiecare dintre dosarelele principale. Depozitul KDE este configurat sa nu permita modificarea de catre dumneavoastra a dosarului <tt>admin</tt>, asadar nu este indicat sa modificati linia
Un caz special al KDE 3 este dosarul <tt>admin</tt>, care conţine utilitarele de compilare specifice KDE 3. Acestea sunt dezvoltate în <tt>/branches/KDE/3.5/kde-common</tt> şi au câte o copie în fiecare dintre dosarelele principale. Depozitul KDE este configurat nu permită modificarea de către dumneavoastră a dosarelor <tt>admin</tt>, aşadar nu este indicat să modificaţi linia
  admin https://svn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin
  admin https://svn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin
din proprietatea <tt>svn:externals</tt> a dosarelor principale.
din proprietatea <tt>svn:externals</tt> a dosarelor principale.


== Informatii suplimentare puteti gasi pe situl wiki al KDE ==
== Informaţii suplimentare puteti găsi pe situl wiki al KDE ==


Consultati [http://wiki.kde.org/tiki-index.php?page=KDE%20Subversion%20HOWTO aceasta pagina wiki a KDE] pentru a afla mai multe informatii despre folosirea utilitarului Subversion cu depozitul KDE.
Consultaţi [http://wiki.kde.org/tiki-index.php?page=KDE%20Subversion%20HOWTO această pagină wiki] pentru a afla mai multe informaţii despre folosirea utilitarului Subversion cu depozitul KDE.

Latest revision as of 20:45, 11 October 2023

 
Proposed for Deletion
This page has been proposed for deletion for the following reason:

This is a translated page, but the English version of this page does not have content anymore.

Ghid de folosire a utilitarului Subversion
Tutorial Series   Getting Started
Previous   None
What's Next   n/a
Further Reading   n/a

Introducere

Aceasta este o scurtă introducere în folosirea utilitarului Subversion pentru a accesa fişierele din depozitul KDE. Dacă aveţi nevoie de un manual complet al utilitarului Subversion, vă recomandăm "Version Control with Subversion".

Primii paşi

Pentru a accesa depozitul KDE aveţi nevoie de:

  1. Un program client Subversion
  2. Un cont de utilizator al depozitului KDE

Notă: Dacă doar doriţi să descărcaţi fişiere, fără a avea nevoie de drepturi de scriere, nu este necesar contul de utilizator; folosiţi "svn" ca şi "<protocol>", fără "<utilizator>@", şi serverul "anonsvn.kde.org" în locul serverului "svn.kde.org".

Instalarea clientului Subversion: această pagină nu conţine instrucţiuni privind instalarea clientului Subversion. Pentru a afla cum puteţi instala Subversion consultaţi documentaţia de instalare a programelor pentru sistemul de operare pe care îl folosiţi. Veţi avea nevoie de cel puţin versiunea 1.1 a Subversion. Dacă compilaţi Subversion din codul sursă şi doriţi să accesaţi depozitul KDE cu protocolul de Internet "https" (şi nu svn+ssh), aveţi nevoie de suport pentru SSL şi ZLIB, deci va trebui să folosiţi opţiunile de compilare --with-ssl --with-zlib.

De asemenea, puteţi instala una dintre multele interfeţe grafice disponibile pentru Subversion. Acest tutorial a fost scris pentru a-i ajuta pe cei care folosesc doar clientul svn şi se referă la acţiunile care pot fi realizate cu cunoscutul utilitar cvs.

Obţinerea unui cont de utilizator: dacă aţi avut un cont de acces la depozitul CVS, acesta a fost adaptat pentru folosirea cu Subversion. Dacă nu aţi avut un asemenea cont, consultaţi acest ghid pentru a afla cum puteţi obţine unul.

Note
Dacă nu vă mai amintiţi parola contului CVS, există două modalităţi simple de a o recupera: folosiţi cvspwd (C) sau cvs-unscramble (Perl).


Structura depozitului KDE

svn.kde.org/home/kde

Aceasta este adresa depozitului KDE. Poate fi accesată folosind oricare dintre protocoalele Internet HTTPS sau SVN+SSH, ceea ce înseamna că parola dumneavoastră nu va putea fi interceptată de către persoane nedorite.

Semnătura SSL în format MD5 recunoscută de către depozitul KDE este:

F6BF EDE2 D016 D1B2   4F18 742E 2C8F B7EF

iar semnătura SSL în format SHA1 este:

e1:e6:41:96:3c:eb:ae:78:e2:73:0d:a2:32:2f:6b:21:13:bf:3d:0f

Dacă folosiţi protocolul svn+ssh, semnătura cheii RSA a serverului este:

86:f3:66:06:20:74:81:d0:1b:b4:2f:25:03:f7:8e:fb

Depozitul este împărţit în următoarele dosare principale:

  1. /branches
  2. /tags
  3. /trunk

Interfaţa online a depozitului o veţi găsi la adresa http://websvn.kde.org/


Dosarul principal /trunk

În dosarul principal /trunk veţi găsi ultima versiune a surselor KDE. Acestea vor deveni următoarea distribuţie a KDE şi a aplicaţiilor sale. Tot aici veti găsi şi modulul www, care conţine paginile sitului principal KDE şi ale siturilor afiliate.

/trunk este împărţit mai departe în:

  • KDE/
    Versiunea de dezvoltare a KDE (ceea ce va deveni următoarea distribuţie publică) conţine următoarele module:
    • kdelibs - Librăriile KDE esenţiale, folosite de către toate aplicaţiile KDE
    • kdebase - Aplicaţii KDE esenţiale, cum ar fi Centrul de Control KDE, panoul Kicker şi navigatorul Konqueror
    • kdeaccessibility - Librăriile KDE pentru accesibilitate
    • kdeadmin - Aplicaţii de administrare a KDE
    • kdeartwork - Imagini, teme desktop, sunete şi alte fişiere multimedia
    • kdebindings - Interfeţe pentru limbaje de programare altele decât C++
    • kdeedu - Aplicaţii educaţionale
    • kdegames - Jocuri
    • kdegraphics - Aplicaţii pentru grafică
    • kdemultimedia - Aplicaţii pentru multimedia
    • kdenetwork - Aplicaţii pentru reţea
    • kdepim - Aplicaţii pentru Gestionarea Informaţilor Personale
    • kdepimlibs - Librării folosite de catre aplicaţiile pentru Gestionarea Informaţilor Personale
    • kdesdk - SDK pentru KDE
    • kdetoys - Aplicaţii de amuzament (nu se încadrează în categoria jocurilor)
    • kdeutils - Aplicaţii de uz general
    • kdevelop - Mediul integrat de dezvoltare a aplicaţiilor, KDevelop
    • kdevplatform - Platforma de bază a KDevelop
    • kdewebdev - Utilitare KDE pentru dezvoltarea aplicaţiilor Web
  • kde-common
Dosarul admin/ comun celor trei dosare principale
  • bugs/
Fişierele Bugzilla
  • developer.kde.org/
Paginile sitului developer.kde.org
  • extragear/
Aplicaţii KDE în afara distribuţiei principale.
  • kdereview/
Locaţia temporară a aplicaţiilor KDE care corespund calitativ aplicaţiilor din distribuţia principală. De aici, odată ce problemele principale au fost remediate, aceste aplicaţii vor fi mutate fie în /trunk/KDE/ sau în /trunk/extragear/
  • kdesupport/
Aplicaţii şi librării auxiliare
  • koffice/
    Grupul de aplicaţii pentru birou al KDE, conţinând:
    • karbon
    • kchart
    • kexi
    • kformula
    • kivio
    • koshell
    • kplato
    • kpresenter
    • krita
    • kspread
    • kugar
    • kword
  • konstruct/
Konstruct, aplicaţie de compilare automată
  • l10n-kde3/
Traduceri pentru modulele KDE 3 marcate "unstable" (extragear, playground)
  • l10n-kde4/
Traduceri pentru KDE 4
  • playground/
Applicaţii aflate în dezvoltare, dar care nu au calitatea necesară pentru a fi distribuite publicului larg.
  • qt-copy/
Copie a librăriei Qt de la Trolltech, librărie care stă la baza KDE.
  • tests/
teste pentru khtml, KOffice şi ksvg
  • valgrind/
Aplicaţia Valgrind, gazduită în depozitul KDE, dar care nu face parte din KDE. Ultimele versiuni ale aplicaţiei Valgrind le puteţi găsi în propriul lor depozit. Modulele Valgrind aflate în depozitul KDE ajung doar până la versiunea 2.4.
  • www/
Paginile sitului principal KDE şi ale siturilor afiliate. Drepturile de scriere în acest dosar sunt limitate.

Dosarul principal /tags

Acest dosar conţine versiunile oficiale ale programelor dezvoltate în depozitul KDE. Fiecare aplicaţie are aici un sub-dosar conţinând versiunile numerotate.

Spre exemplu, codul sursă al KDE 3.4.0 se află în /tags/KDE/3.4.0/.

Dosarul principal /branches

În acest dosar se află ramificaţiile create după fiecare versiune oficială.

Cele mai multe aplicaţii KDE urmează principiul de a adăuga noi abilităţi (şi chiar şi texte vizibile) doar în versiunea aflată în dezvoltare — cea păstrată în /trunk/. Totuşi, modificările care rezolvă probleme se aplică tuturor programelor, chiar şi după publicarea versiunii oficiale.

Pentru a putea realiza acest lucru, în momentul publicării unei versiuni oficiale este creată o ramificaţie a versiunii de dezvoltare din acel moment. Modificările care rezolvă probleme sunt apoi adăugate la această ramificaţie. Aceste ramificaţii se află în /branches/.

Spre exemplu, ramificaţia KDE 3.4.x se află în /branches/KDE/3.4/

Dosarele din /branches sunt asociate fiecărei aplicaţii în parte, cum ar fi akregator/, amarok/, arts/, k3b/, etc. Tot aici veţi găsi dosarul KDE/, conţinând toate versiunile oficiale ale KDE.

Un dosar mai special aflat în /branches este work/. Acest dosar conţine aşa-numitele "ramificaţii de test", adică ramificaţii conţinând cod sursă aflat în teste, uneori chiar cod experimental. Ramificaţiile de test care afectează mai multe aplicaţii sunt păstrate în /branches/work/, dar ramificaţiile care afectează doar o singură aplicaţie pot fi păstrate în dosarul asociat cu aplicaţia respectivă. Dezvoltatorii aplicaţiei respective sunt cei care iau decizia folosirii uneia dintre aceste locaţii.


Descărcarea modulelor şi actualizarea copiei locale

Descărcarea modulelor

Comanda Subversion checkout poate fi folosită pentru a descărca orice modul din depozitul KDE.

Atenţie! Dacă descărcaţi trunk/KDE/ sau branches/KDE/foo/ veţi constata că aţi descărcat întreg modulul kde-i18n!

Spre exemplu, dacă doriţi să descărcaţi doar modulul KDevelop din depozit, folosiţi comenzile:

pentru CVS:

cvs -d :pserver:[email protected]:/home/kde login
cvs -d :pserver:[email protected]:/home/kde checkout kdevelop

pentru Subversion:

Utilizatorii CVS care accesau depozitul prin intermediul SSH ar trebui să folosească protocolul svn+ssh, iar utilizatorii CVS care accesau depozitul folosind o parola ar trebui să folosească protocolul https în comenzile următoare.

svn checkout <protocol>://<utilizator>@svn.kde.org/home/kde/trunk/KDE/kdevelop

Actualizarea copiei locale

Pentru a actualiza copia dumneavoastră, folosiţi comanda update.

Această comandă funcţionează la fel ca în CVS: schimbaţi dosarul curent cu cel al copiei locale (pentru cei neexperimenţati în folosirea utilitarului Subversion, copia locală ar trebui să se afle în dosarul personal) şi tastaţi comanda svn update (sau, mai scurt, svn up).

Cum puteţi afla dacă un fişier a fost modificat în depozit

Pentru a afla care dintre fişierele locale au fost modificate în depozit, majoritatea utilizatorilor CVS foloseau comanda:

cvs up

şi căutau marcajul M; în Subversion puteţi afla starea fişierelor locale cu comanda:

svn status

.

Înglobarea modificărilor dumneavoastră în depozit

La fel ca în CVS, înglobarea modificărilor în depozit se realizează cu una dintre comenzile commit sau checkin (ci pe scurt).

comenzile CVS:

cvs commit
# sau
cvs ci
# sau
cvs ci numefisier.cpp

comenzile Subversion:

svn commit
# sau
svn ci
# sau
svn ci numefisier.cpp

svn va porni editorul de text specificat în variabila de mediu $SVN_EDITOR pentru a vă permite să introduceţi un mesaj asociat cu modificările dumneavoastră. Alternativ, puteţi folosi opţiunea -m alături de textul mesajului:

svn ci -m "Actualizarea protocolului de comunicatie conform cu standardul HTTP/1.1"

Fişiere ignorate

Subversion păstrează lista fişierelor ignorate în interiorul fiecarui dosar în parte. Pentru a edita lista fişierelor ignorate din dosarul curent, folosiţi comanda:

 svn propedit svn:ignore .

svn va deschide lista în editorul de texte; scrieţi numele fişierelor care doriţi să fie ignorate, câte unul pe linie. Când aţi terminat de modificat lista, executaţi o comandă de înglobare pentru a trimite modificarea facută la depozitul KDE.

În CVS, spre deosebire de versiunea actuală a Subversion, fişierele ignorate puteau fi specificate într-o listă globală. Subversion 1.3 va adăuga suport pentru această listă globală, dar până atunci puteţi adăuga lista de fişiere ignorate la grupul [miscellany] din fişierul ~/.subversion/config (totul pe o singură linie):

global-ignores = *.o *.lo *.la .*.rej *.rej .*~ *~ .#* #*# .DS_Store *.moc
*.moc.cc *.moc.cpp config.log config.status config.cache *.gmo .deps .libs
SunWS_cache *.lo *.la *.rpo *.la.closure *_la_closure.cpp *_la_closure.cc
*_la_closure.cxx *.all_cc.cc *.all_cpp.cpp *.all_C.C *.all_cxx.cxx
*_meta_unload.cc *_meta_unload.h *_meta_unload.cpp *_meta_unload.C
*_meta_unload.cxx index.cache.bz2 .memdump Makefile.rules.in Makefile.calls.in
Makefile.rules Makefile.calls autom4te.cache *.kidl

Lucrul cu mai multe revizii şi ramificaţii

Spre deosebire de CVS, Subversion nu generează un număr de revizie pentru fiecare fişier modificat, ci pentru întreg depozitul. Astfel, un numar de revizie reprezintă conţinutul depozitului în momentul în care a fost creată revizia. Cu alte cuvinte, un număr de revizie seamăna foarte mult cu o amprentă temporală (de fapt, serverul Subversion foloseşte acest fapt pentru a căuta mai eficient după dată).

Spre exemplu, atunci când acualizaţi copia locală din depozitul KDE, Subversion vă va comunica următoarele:

Updated to revision 403821.

Acest mesaj înseamnă că ultima revizie disponibilă în depozit la momentul actualizării este 403821. Dacă modificaţi un fişier şi apoi înglobaţi modificarea în depozit, Subversion va actualiza numărul reviziei pe server şi vă va informa de această actualizare a depozitului; ca şi în CVS, doar fişierele modificate vor fi actualizate în depozit: va trebui să rulaţi comanda cvs up petru a actualiza şi restul fişierelor.

Dacă doriţi să accesaţi o anumită revizie a unui fişier, puteţi folosi opţiunea -r alături de unul dintre următoarele cuvinte cheie:

  • Numărul reviziei: spre exemplu, folosiţi -r 403819 pentru a accesa revizia cu numarul 403819
  • BASE: revizia la care aţi efectuat ultima actualizare a copiei locale
  • COMMITTED: revizia la care aţi efectuat ultima înglobare a modificarilor dumneavoastră (este mai mică decât BASE)
  • PREV: revizia la care aţi efectuat penultima înglobare (este mai mică decât COMMITTED)
  • HEAD: ultima revizie disponibilă pe server
  • { date }: puteţi specifica o dată între acolade, pentru a căuta revizia cea mai apropiată de această dată.

Iată un posibil scenariu:

  1. Executaţi comanda svn up pentru a actualiza copia locală la ultima revizie disponibilă. Să presupunem că Subversion v-a anunţat că a actualizat copia locală la revizia 403821. Aceasta înseamnă că HEAD şi BASE au valoarea 403821.
  2. Modificaţi fişierul README şi înglobaţi modificarea în depozit. Să presupunem că Subversion v-a anunţat că aţi creat revizia 403822. Aceasta înseamnă că HEAD, BASE şi COMMITTED au valoarea 403822.
  3. Modificaţi acelaşi fişier din nou şi înglobaţi modificarea în depozit. Acum PREV are valoarea 403822, dar HEAD, BASE şi COMMITTED au valoarea noii revizii (să presupunem ca aceasta este 403823).
  4. În continuare, o altă persoană înglobează modificările sale în depozit, iar dumneavoastră vă veţi actualiza copia locală cu aceste modificări. Dacă Subversion vă anunţă că aţi actualizat copia locală la revizia 403824, aceasta înseamnă că HEAD şi BASE vor avea noua valoare 403824 dar PREV şi COMMITTED rămân la vechile valori)
  5. Dacă o altă persoană modifică acum fisierul README, HEAD va avea o nouă valoare. Până la următoarea actualizare, valorile celorlalte cuvinte cheie rămân aceleaşi pentru dumneavoastră. În acest moment vom avea HEAD = 403825 (ultima revizie disponibilă pe server), BASE = 403824 (ultima revizie la care aţi efectuat o actualizare), COMMITTED = 403823 (revizia ultimelor modificări pe care le-aţi înglobat în depozit) şi PREV = 403822 (revizia penultimelor modificări pe care le-aţi înglobat în depozit).

Aceste cuvinte cheie sunt utile atunci când doriţi să obţineţi înregistrări de transfer sau diferenţe între înglobări în depozit.

Dacă doriţi să vedeţi diferenţa dintre copia dumneavoastră şi revizia BASE puteţi folosi comanda:

svn diff

Această operaţie este rapidă deoarece Subversion poate obţine ambele versiuni din copia locală. Evident, nu este nevoie de conexiune la server pentru a efectua această operaţie.

Dacă doriţi să vedeţi diferenţa dintre copia dumneavoastră şi ultima revizie disponibilă pe server puteţi folosi comanda:

svn diff -r HEAD

Dacă doriţi să vedeţi ce s-a schimbat în depozit de la ultima actualizare pe care aţi făcut-o copiei dumneavoastră puteţi folosi comanda:

svn diff -r BASE:HEAD

Dacă doriţi să vedeţi ultima modificare înglobată înainte de revizia BASE puteţi folosi comanda:

svn diff -r PREV:BASE
# sau
svn diff -r PREV:COMMITTED

al cărei format este valabil şi pentru comanda svn log.

Legături către dosare externe

Poate doriţi să includeţi o copie a unui dosar aflat la o altă locaţie, doar pentru a-l putea accesa mai uşor, nu pentru a modifica codul conţinut în acesta. Bineînţeles, această copie va trebui să se actualizeze automat de fiecare dată când dosarul original este modificat. Subversion oferă suport pentru această actualizare automată. Va trebui să editaţi proprietatea svn:externals a dosarului local în care aţi plasat copia dosarului extern. Folosiţi comanda:

svn propedit svn:externals .

şi introduceţi o linie pentru dosarul extern, ca în exemplul următor:

libkhalkhi svn://anonsvn.kde.org/home/kde/trunk/playground/pim/khalkhi

La fiecare operaţie de actualizare a copiei locale, libkhalkhi va fi actualizat cu conţinutul dosarului extern /trunk/playground/pim/khalkhi.

Warning
De reţinut că nu puteţi îngloba în depozit modificările pe care le faceţi în copia locală a dosarului extern, aceasta neavând drept de înglobare pe server.


În exemplele de mai sus am folosit protocolul svn://anonsvn.kde.org deoarece serverul anonsvn.kde.org poate fi accesat fără a avea nevoie de cont de utilizator. Protocoalele https: sau svn+ssh: vor putea fi folosite doar dacă aveţi cont de utilizator. Serverul anonsvn.kde.org are totusi unele mici dezavantaje: nu este tot timpul sincronizat cu serverul svn.kde.org, deci înglobările efectuate pe svn.kde.org vor apărea putţn mai tarziu pe anonsvn.kde.org. De asemenea, unele utilitare firewall blochează protocolul svn:.

Un caz special al KDE 3 este dosarul admin, care conţine utilitarele de compilare specifice KDE 3. Acestea sunt dezvoltate în /branches/KDE/3.5/kde-common şi au câte o copie în fiecare dintre dosarelele principale. Depozitul KDE este configurat să nu permită modificarea de către dumneavoastră a dosarelor admin, aşadar nu este indicat să modificaţi linia

admin https://svn.kde.org/home/kde/branches/KDE/3.5/kde-common/admin

din proprietatea svn:externals a dosarelor principale.

Informaţii suplimentare puteti găsi pe situl wiki al KDE

Consultaţi această pagină wiki pentru a afla mai multe informaţii despre folosirea utilitarului Subversion cu depozitul KDE.