Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: SVN/CVS z ktorej storny to ugryzc ?
Forum PHP.pl > Forum > PHP
thornag
Witam

Efektem mojego googlowania byla przewaznei Dokumentacja albo jakaies niejasne artykuly ewentualnie porownanie SVN do CVS. Z tego co czytalem doszedlem do pewnych wnioskow. Mianowicie:

1.Stawia sie taki serwer (podobno zazwyczaj sa w nowych distro linuxa). Ustawia uzytkownikow nadaje im prawa itp.
2. Taki uzytkownik moze uploadowac/downloadowac pliki w zaleznosci od uprawnien.
3. Istnieja galezie, ale co to sa te galezie ?
4. Mam sobie klienta i przez niego to wszystko wgrywam sciagam.
5. Sa dostepne jakies autoupgready stron.

Niestety dalej tajemnica zostaja dla mnie zalozenia takiego oprogramowania.

Calosc tego weszystkiego jest troche ciezka do ogarniecia. Jak wyglada praca w zespole z takim oprogramowaniem. Jak wlasciwie kontroluje sie wersje. Czy to wyglada tak ze mamy wielkie repozytorium i kazdy wgrywa ten sam kod ale do swojej galezi, na koncu jak wszystko dziala to to sie jakos miksuje ? Czy to sie dzieje automatycznie smile.gif Najogolniej prosil bym o jakis taki prosty wyklad na temat idei i uzytkowania systemu kontroli wersji.
dr_bonzo
Stawiasz serwer SVN/CVS

wrzucasz do niego aplikacje ktora piszecie (tylko zrodla) i dzieki temu
- wielu userow moze naraz edytowac rozne fragmenty kodu i uploadowac (commit) go -- pomysl jak bys to robil z uzyciem np. wspolnego ftpa -- masakra, ktos jakis plik usunie, pomyli sie -- przepadlo; mozna robic backupy ale narobisz sie a efekt marny
- wprowadziles zmiany w wielu plikach, uploadujesz, po czasie widzisz ze to bylo zle -- jednym poleceniem powracasz do sytuacji sprzed zmian (zrob to recznie -- dostaniesz nobla za wytrwalosc i glupote biggrin.gif)
- kilku userow edytuje ten sam plik -- jak bys wyslal swoja wersje to moglbys nadpisac wersje drugiego usera,ktory uaktualnil ja przed toba, a taki SVN albo zlaczy wasze wersje (gdy sie da) lub zglosi blad
thornag
Powiedzmy ze mamy wymieszany front z back endem. Chcesz powiedziec ze jesli ja wezme plik index.php i grafik tez. Razem go pozmieniamy i razem wgramy na serwer, to SVN sam wymiksuje to odpowiednio w jeden lub zglosi blad ?
mariuszn3
thornag sam sobie chyba za bardzo to nagmatwałeś.. Tak naprawdę kontrola wersji nie jest tak trudna do ogarnięcia.. SVN jest świeższym systemem niż CVS i został napisany między innymi jako odpowiedź na niedoskonałości systemu CVS. Tak bez wnikania w szczegóły opiszę Ci kroki pozwalające na rozpoczęcie pracy z SVN:
  1. Tworzysz na serwerze repozytorium (jest to tak jakby baza danych kontroli wersji, w tym miejscu znajduje się cała historia edycji projektów zawartych w tym repozytorium.. też do tej bazy wysyłasz zapytania o najnowszą wersję, do niej wysyłasz swoje zmiany itd. Repozytorium tworzysz za pomocą jednej prostej komendy 'svnadmin create ścieżka_repozytorium' i to wszystko nic więcej nie potrzeba.. masz utworzone repozytorium.
    Sama struktura repozytorium na której bazujesz to zwykłe drzewo katalogów i plików nic więcej. Po utworzeniu repozytorium masz po prostu jeden pusty katalog.
  2. Do repozytorium dodajesz projekt, który chcesz objąć kontrolą wersji. Możesz to dodać zwyczajnie poprzez wimportowanie jakiegoś katalogu z dysku poprzez svn import.. jednak dobrą praktyką jest utworzenie struktury właściwej dla kontroli wersji czyli katalog, który jest nazwą projektu a w nim katalog 'trunk' w którym będzie się znajdować główna (sztandarowa) wersja projektu, i do tego katalogu importujesz swój projekt z dysku.
    Dzięki takiemu podejściu, będziesz mógł później jeśli zajdzie taka potrzeba utworzyć oddzielną gałąź tego samego projektu i wszystko mieć nadal w katalogu tego samego projektu.
  3. Mając już dany projekt w repozytorium użytkownicy mogą teraz utworzyć swoje kopie robocze tego projektu. Czyli poprostu poprzez komendę 'svn checkout' wyciągają ostatnią wersję projektu z repozytorium do katalogu, w którym będą pracować. Od tego momentu każdy z nich ma swoją osobną kopię roboczą.
  4. Praca z kontrolą wersji:
    Użytkownik A po wprowadzeniu zmian w swojej kopii roboczej, wysyła zmiany do repozytorium (poprzez 'svn commit').
    Użytkownik B aby zaktualizować swoją kopię roboczą o zmiany wprowadzone przez użytkownika B, musi po prostu aktualizować swoją kopię roboczą ('svn update') wobec repozytorium (które już zaweria nowszą wersję projektu niż ta na której użytkownik B bazował).
    Jeśli zmiany użytkownika A nie występują w tych samych miejscach, co zmiany użytkownika B.. wtedy uaktualnienie odbywa się transparentnie bez potrzeby jakiejkolwiek dodatkowej ingerencji.
    Jeśli jest inaczej (SVN ma problem z nałożeniem na siebie zmian obu użytkowników) plik otrzymuje status konfliktu.
    Rozwiązać konflikt musisz już Ty sam manualnie porównując pliki ze zmianami wprowadzonymi przez siebie, te ze zmianami użytkownika A i te z poprzedniej wersji.
    Po manulnej naprawie pliku odpalasz komendę 'svn resolved' na pliku i status konfliktu jest zdjęty.
    Ogólnie przy dobrze rozłożonym programie pracy bardzo rzadko się zdarzają konflikty, bo też rzadko kiedy dwóch użytkowników pracuje nad tym samym fragmentem kodu.
To takie minimum, które jest potrzebne do pracy z SVN.
Świetna jest instrukcja svnbook Masz tam wszystkie szczegóły jak i konkretne problemy bardzo przystępnie opisane i najlepiej z niej w razie potrzeby korzystać.
thornag
Aha



To po tym przydlugawym wstepie tongue.gif Chcialbym serdecznie podziekowac za tak wyczerpujace informacje, nareszcie mam jakies pojecie smile.gif
Jeszcze raz dzieki, pozdrawiam.
mtod
Cytat
Razem go pozmieniamy i razem wgramy na serwer, to SVN sam wymiksuje to odpowiednio w jeden lub zglosi blad ?


tak. scali lub zglosi konflikt, ktory nalezy rozwiazac "recznie".
pod windows polecam tortoise svn.
thornag
Jeszcze jedno pytanie bo nie mialem poki co zajrzec do tego booka, rozumiem ze svn chodzi jako jakis proces na serverze gdzies tam, a ja do tego mam klienta ? Co dziala mniej wiecej jak relacja serwer ftp client ftp ?
mariuszn3
Jest parę sposobów na łączenie się z SVN z zewnątrz. Możesz poprzez webdav (do tego potrzebny jest apache 2.0 na serwerze na którym masz svn), możesz też poprzez serwer svn (svnserve), który jest dostarczany z programem. Odpalasz go i siedzi on jako daemon w systemie, komunikujesz się z nim poprzez wybrany port.
Ja korzystałem tylko z tego ostatniego rozwiązania więc wiele więcej nie napiszę.. w manualu masz dużo na ten temat.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.