Subversion remote cu Mercurial local

În ultimele zile am încercat să-mi schimb felul în care fac commit-uri în Subversion. Ştiu că e bine ca acestea să fie cât mai “atomice”, dar invariabil ajungeam să modific un set suficient de mare de fişiere doar ca să nu urc pe server un cod care nu funcţionează. O soluţie rapidă ar fi să folosesc un repository local unde să fac check-in-uri mai frecvente.

Aşa că am folosit instrucţiunile dintr-un articol mai vechi şi am încercat să adaptez modul meu de lucru la workflow-ul cu un sistem distribuit gen Mercurial. Rapid am remarcat că nu mă interesează ca istoricul din repository-ul local să corespundă cu cel din repository-ul remote, însă e foarte important pentru mine ca operaţiile de commit să fie cât mai simplu de efectuat.

Şi pentru că nu-mi place să ţin doar pentru mine (şi pentru că blogul începe să devină un dumping ground din ce în ce mai util), iată micul meu setup, pas cu pas:

Mai întâi se face checkout via Subversion şi se editează proprietăţile repository-ului astfel încât să ignore fişierele specifice Mercurial:


$ svn co http://example.com/svn/proiect proiect
$ cd proiect
$ svn propedit svn:ignore .

iar în fişierul apărut se adaugă .hg şi .hgignore, fiecare pe o linie nouă.

Apoi se setează Mercurial ca să versioneze fişierele curente şi să ignore folderele specifice Subversion:


$ hg init
$ vim .hgignore

unde vim poate fi înlocuit cu editorul preferat. În fişierul .hgignore se adaugă următoarele două linii pentru a se ignora foldere .svn:


syntax: glob
.svn

Pe Windows, dacă se foloseşte hack-ul cu underscore pentru a se putea utiliza Subversion cu proiecte ASP.NET, a doua linie poate fi _svn.

Apoi se adaugă fişiere în Mercurial şi se face commit în ambele sisteme de versionare:


$ hg add
$ hg commit -m "Initializarea proiectului"
$ svn commit -m "Ignoring Mercurial specific files."

Din acest moment, workflow-ul e foarte simplu: se utilizează comenzi Mercurial mai puţin în momentul în care se doreşte un commit în serverul central de Subversion. Avantajul major e că acum poţi folosi commit hooks pe Mercurial (care sunt ceva mai simplu de setat decât în svn) şi poţi rula propriul setup local, eventual cu un build de continuous integration.

There are no comments on this post

Leave a Reply