Mercurial na zajęcia

0

Od razu uprzedzę, że nie jestem informatykiem, więc nie rozumiem informatycznej terminologii, poza tym całkowicie zielony jestem w temacie Mercuriala. Na zajęciach z TI prowadzący dał nam takie oto zadanie:

1 Utworzyć repozytorium Mercuriala.
2 Dodać do niego pliki.
3 Wykonać kilka modyfikacji i zapisać je w repozytorium (commits). Zmiany powinny zawierać: modyfikację plików; zmianę nazwy choć jednego pliku; dodanie choć jednego pliku; usunięcie choć jednego pliku.
4 Wykonać modyfikację pliku i przywrócić wersję z repozytorium (revert)
5 Cofnąć się do jednej z poprzednich wersji (update) i wykonać zmianę (czyli zrobić rozgałęzienie), pilnując, aby nie wystąpił konflikt
6 Połączyć zmiany
7 Sklonować repozytorium
8 Wykonać w każdej z kopii repo modyfikacje w tym samym miejscu jednego pliku (czyli wytworzyć konflikt)
9 Połączyć zrobione zmiany, dokonując niezbędnych ręcznych modyfikacji
10 Oznaczyć wybraną wersję etykietą (tag)
11 Udostępnić repozytorium przez http (np. na serwerze students)
12 Jako rozwiązanie wysłać link do udostępnionego repozytorium.

I szczerze to nie mogę sobie z tym poradzić. Utworzyć umiem, dodać pliki umiem, usunąć też, ale nic poza tym (czyli przystawia mnie już 3 punkt...). Zauważyłem, że jak wpiszę jakąś nieistniejącą komendę, to wyskakuje lista wszystkich możliwych do użycia, ale albo nie ma tam takich, które mnie interesują, albo nie działają. To ja z grubsza zarysuję listę problemów:
Jak zmienić nazwę pliku w repozytorium?
Jak modyfikować plik z linii komend? Czy to się po prostu wchodzi w dany plik (np. tekstowy) i się go przerabia?
Jak działa ta komenda revert? Bo mi usunęła plik, którego poprzednią wersję chciałem przywrócić...
Funkcja update nie działa w ogóle
Jak się łączy zmiany?
Sklonować też mi się nie udało. Krzyczy, że nie ma repozytorium tam, gdzie jest.

Proszę o szybką i rzeczową odpowiedź, tylko napisaną jak dla laika, bo kompletnie tego nie czaję...

0
Łosiu napisał(a):

Jak zmienić nazwę pliku w repozytorium?
Jak modyfikować plik z linii komend? Czy to się po prostu wchodzi w dany plik (np. tekstowy) i się go przerabia?

Nie zmienia się plików przez repozytorium. Ty masz operować na swoich plikach i katalogach na dysku, a potem poleceniem Mercuriala masz te zmiany umieścić w repozytorium.

1

@Łosiu czy ty w ogóle rozumiesz po co jest repozytorium? Bo mam spore wątpliwości...
Repozytorium jest po to żeby członkowie zespołu mogli niezależnie od siebie pracować nad plikami i je zmieniać, a potem dzielić się tymi zmianami z innymi.
Pliki zawsze zmieniasz lokalnie u siebie a potem Commitujesz te zmiany do repozytorium. Twoi koledzy mogą wtedy zrobić Update to head revision i pobrać z repozytorium wszystkie zacommitowane zmiany od innych osób.
Revert przywraca poprzednią wersję pliku z repozytorium. Wyobraź sobie że chciałeś coś w pliku poprawić ale się pomyliłeś i chcesz cofnąć te zmiany do ostatniej poprawnej wersji (zakłada się że w repozytorium trzymamy zawsze "działające" wersje) - wtedy robisz revert. Jeśli w repozytorium tego pliku w ogóle nie było to revert go usunie.

0

Jak zmienić nazwę pliku w repozytorium? hg mv istniejacyPlik nowyPlik; hg ci -m 'zmienilem nazwe'

Jak modyfikować plik z linii komend? Czy to się po prostu wchodzi w dany plik (np. tekstowy) i się go przerabia? Robisz z nim co chcesz, czyli edytujesz go za pomoca edytora czy czegokolwiek.

Jak działa ta komenda revert? Bo mi usunęła plik, którego poprzednią wersję chciałem przywrócić... Na pewno nie, revert domyslnie zapisuje kopie zapasowa pliku z rozszerzeniem .orig. Usuwa tylko jesli dodasz switch --no-backup.

Funkcja update nie działa w ogóle. Jak robisz hg up i jestes aktualnie na tip, to wiadomo ze nie dziala. Zrob np. hg up -r 0 - zmiani twoja working copy na taka jaka byla w revision 0.

Jak się łączy zmiany? hg merge?

Sklonować też mi się nie udało. Krzyczy, że nie ma repozytorium tam, gdzie jest. cd testy; hg init a; hg clone a b - w tym momencie masz 2 repo, a jest 'glowne' a b jest clonem a.

0

Nie mam zielonego pojęcia, co też napisałem w pierwszym poście.

Ja napiszę, jak ten revert robiłem. Hg init, potem hg add aaa.txt bbb.txt, hg commit. Potem otwieram bbb.txt, wpisuję tam cokolwiek, potem hg revert (jak na moje powinien mi przywrócić wersję pliku sprzed napisania w nim czegokolwiek), efekt - bbb.txt usunięty z repozytorium.

Klonowanie nie działa żadnym z Waszych sposobów. Cały czas wyświetla "invalid argument".

0

@MarekR22 - a gdzie napisalem ze init sluzy od robienia klona? Klon jest robiony pozniej, za pomoca hg clone a b.

1

Krotka sesja pokazujaca pare operacji w tym revert:

$ hg init test
$ cd test
$ echo dupa > a.txt
$ echo foobar > b.txt
$ hg ci -Am 'nowe pliki' # dodaje wszystkie usuniete / dodane / zmienione pliki do commita
adding a.txt
adding b.txt
$ hg glog
@  changeset:   0:6646572f6ce0
   tag:         tip
   user:        mucka
   date:        Thu Nov 08 10:22:07 2012 +0100
   summary:     nowe pliki

$ cat a.txt 
dupa
$ echo -e 'dupa\ndupa\ndupa' >> a.txt 
$ cat a.txt 
dupa
dupa
dupa
dupa
$ hg diff # pokaze zmiane w pliku
diff --git a/a.txt b/a.txt
--- a/a.txt
+++ b/a.txt
@@ -1,1 +1,4 @@
 dupa
+dupa
+dupa
+dupa
$ hg revert a.txt # przywraca plik do starej wersji
$ hg stat # ale zachowuje nowa wersje z suffixem '.orig'
? a.txt.orig
$ cat a.txt
dupa
$ cat a.txt.orig # oryginal nadal zachowany
dupa
dupa
dupa
dupa
$ mv a.txt.orig a.txt # ponawiam zmiane nadpisujac sledzony plik
$ hg diff # pokaze ta sama zmiane co wczesniej
diff --git a/a.txt b/a.txt
--- a/a.txt
+++ b/a.txt
@@ -1,1 +1,4 @@
 dupa
+dupa
+dupa
+dupa
$ hg revert --no-backup a.txt # tym razem revert nie robi kopii
$ hg stat

Jesli naprawde hg revert usuwa plik i nie tworzy *.orig to znaczy ze masz jakies niestandardowe ustawienia. Zrodel moze byc wiele: od rozszerzen po aliasy. hg showconfig powie duzo na temat konfiguracji.

1

Swoja droga, dla poczatkujacych uzytkownikow mercuriala (lub systemow kontroli wersji w ogole) swietny jest ten krotki tutorial:
http://hginit.com/
Wydaje mi sie ze w nim pokazane jest wszystko czego autor potrzebuje.

1 użytkowników online, w tym zalogowanych: 0, gości: 1