- Co dokładnie robi hg kopia zrobić i jakie szczególne traktowanie robi to przyczyny w przyszłości?
Dodaje nowe pliki i oznacza je jako kopie starych plików. Ponieważ są to kopie, zmiana dokonana w oryginalnym pliku zostanie scalona w kopię. Czas płynie od lewej do prawej:
(init) --- (edit a.txt) ---- (a.txt edit is copied to b.txt)
\ /
(hg copy a.txt b.txt)
- Jeśli okaże się to zrobić „coś złego (tm)” dla naszej sprawy, jak mogę usunięcie flagi pliku jako beeing kopię innego pliku ?
Ten mechanizm uruchamia się tylko po połączeniu. Jeśli b.txt
nie jest obecny w wspólnej wersji przodka (init na powyższym wykresie), Mercurial wykona przeszukiwanie wstecz, aby sprawdzić, czy b.txt
jest skopiowane z innego miejsca.
Daj nam kontynuować powyższy wykres w formie skróconej:
(i) -- (edit a) -- (a edit copied to b) -- (edit a) -- (merge)
\ / /
(copy a b) --/------- (edit b) ------------------/
Chodzi o to, w jaki sposób odbywa się końcowy seryjnej. Wspólny punkt przodka jest teraz węzłem copy a b
i tutaj obecne są zarówno a
i . Oznacza to, że nie będzie żadnego wyszukiwania kopii! Tak więc druga edycja do a
wont zostać połączone w .
dokładnie sprawdzić, próbowałem go:
$ hg init
$ echo a > a
$ hg add a
$ hg commit -m init
$ hg copy a b
$ hg commit -m "copy a b"
Była to kopia, b
zawiera teraz tylko a
.
$ hg update 0
0 files updated, 0 files merged, 1 files removed, 0 files unresolved
$ echo aa >> a
$ hg commit -m "edit a"
created a new head
$ hg merge
merging a and b to b
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
$ hg commit -m "a edit copied to b"
Był to pierwszy scalania i edycja a
została skopiowana do b
:
$ cat b
a
aa
Mamy teraz dokonać zmian równolegle:
$ echo aaa >> a
$ hg commit -m "edit a again"
$ hg update 3
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
$ echo bbb >> b
$ hg commit -m "edit b"
created new head
$ hg merge
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
Nie ma dalsze kopiowanie odbywa :
$ cat a
a
aa
aaa
$ cat b
a
aa
bbb
Co do wyłączania tego ... nie można naprawdę jawnie wyłączyć wykrycia kopii . Ale, jak mam nadzieję zilustrować powyżej, po pierwszym scaleniu znowu "nie zawracam sobie głowy" tym .
Jeśli pierwszy scalania jest problem, można użyć hg resolve --tool internal:local
, aby przywrócić pliki do stanu, zanim rozpoczął scalenie. Więc z
$ hg resolve --tool internal:local b
mogliśmy przyniosły b
powrót do nieco zawierający jedną linię z a
.
Możesz również przeczytać [Kopiowanie plików] (http://tortoisehg.bitbucket.org/hgbook/1.7/mercurial-in-daily-use.html#chap:daily.copy) w [Mercurial: The Definitive Guide ] (http://tortoisehg.bitbucket.org/hgbook/1.7/) książka. – Matus