Давайте сделаем три хранилища под названием main
, tom
и mine
, чтобы понять, что происходит. main
- это центральный репозиторий, в котором вы и Том (один из ваших сотрудников) нажимаете изменения и используете его для совместной работы. tom
- это репозиторий Тома и mine
- это ваш репозиторий. tom
и mine
, очевидно, будут клонами main
.
$ hg init main
$ hg clone main tom
$ hg clone main mine
Давайте будем иметь файл для воспроизведения. Том создал файл и перебросил его в основной репозиторий.
$ cd tom
tom$ echo 'print hello' > a.py
tom$ hg add
tom$ hg ci -m "Added a.py"
tom$ hg push
pushing to /home/main
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
Теперь вы начинаете с вытягивания изменений.
$ cd mine
mine$ hg pull
pulling from /home/main
requesting all changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files
(run 'hg update' to get a working copy)
mine$ hg up
1 files updated, 0 files merged, 0 files removed, 0 files unresolved
Теперь вы заметили, что Том не годится называть, как он назвал файл как a.py
, наименее описательный. Вы решили переименовать его в hello.py
.
mine$ hg mv a.py hello.py
mine$ hg ci -m "Rename a.py to hello.py"
В то же время, Том побежал a.py
и понял, что кавычки (print hello
должны быть print "hello"
) отсутствуют. Он исправил это и толкнул еще одну фиксацию. Вы решили вытащить это, прежде чем надавить.
mine$ hg pull
pulling from /home/main
searching for changes
adding changesets
adding manifests
adding file changes
added 1 changesets with 1 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
mine$ hg merge
merging hello.py and a.py to hello.py
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
mine$ hg ci -m "Merge commit"
Теперь, когда вы смотрите на hello.py
, вы найдете исправление Том присутствует, и вы решили толкнуть.
mine$ cat hello.py
print "hello"
mine$ hg push
pushing to /home/main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files
Давайте вернемся назад и посмотрим, как все будет происходить после этого нажатия на сторону Тома. Том сделал еще одно изменение локально, которое он не нажал. Изменение заключалось в добавлении круглых скобок к функции печати.
tom$ hg pull
pulling from /home/main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 1 files (+1 heads)
(run 'hg heads' to see heads, 'hg merge' to merge)
tom$ hg merge
merging a.py and hello.py to hello.py
0 files updated, 1 files merged, 0 files removed, 0 files unresolved
(branch merge, don't forget to commit)
tom$ hg ci -m "Merge heads"
tom$ hg push
pushing to /home/main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
Когда вы будете тянуть на этот раз, ваш являются Тем хранилище будет иметь такое же состояние с файлом переименованного и все изменения нетронутого.
mine$ hg pull
pulling from /home/main
searching for changes
adding changesets
adding manifests
adding file changes
added 2 changesets with 2 changes to 2 files
(run 'hg update' to get a working copy)
$ hg up
$ cat hello.py
print("hello")
Вы можете видеть, что изменение, которое добавило круглые скобки, также существует. Таким образом, его очень безопасные файлы переименования в Mercurial с использованием hg mv
.
Что касается «hg up» на моей реструктурированной копии, но еще не совершенной - хорошо, hg смог обработать входящие изменения в файлы, которые я переехал, но не нажал. Это мило! – shahav
, похоже, решается [by] (http://stackoverflow.com/questions/5190913) – shahav