Простой пример Mercurial

Возможный дубликат:
Введение в Mercurial

Мое последнее изменение удалено. Я, наконец, сделал это правильно?

$ hg pull
warning: code.google.com certificate with fingerprint d2:33:75:af:62:64:5b:75:dc:3f:bf:22:30:b6:27:13:ff:3f:90:fd not verified (check hostfingerprints or web.cacerts config setting)
pulling from https://[email protected]/p/montao/
searching for 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)
ubuntu@ubuntu:/media/Lexar/montao$ hg update
1 files updated, 0 files merged, 0 files removed, 0 files unresolved

Так что я не должен делать слияние, я должен тянуть?

Почему нет простого примера, как 2 разработчика сотрудничают?

Например

Time        Developer 1              Developer  2
              hg clone                 hg clone
              editing
              hg commit
              hg push
                                       editing
                                       hg pull
                                       hg commit
                                       hg push

Пример рабочего процесса между двумя разработчиками, как показано выше, значительно облегчит понимание того, что такое hg pull, merge, update, и не заставит меня путать pull со слиянием.

Например, как я теперь знаю, как не получить 2 головы, когда есть набор изменений из другого места.

Мне может понадобиться пример того, как 2 разработчика сотрудничают и как я получаю удаленные изменения.


person Niklas R.    schedule 25.10.2011    source источник


Ответы (3)


Для получения подробных примеров того, как использовать Mercurial и несколько других VCS, ознакомьтесь с Управление версиями на примерах Эрика Синка или hginit.com Джоэла Спольски (получает ли мой ответ автоматический отрицательный голос за то, что Джоэл указан вторым?)

person Jamie F    schedule 25.10.2011

Основные понятия

Pull приносит новые наборы изменений от других разработчиков в ваш собственный репозиторий. Потенциально это может ввести новую голову, об этом будет сказано, если это произойдет.

Объединить объединяет две головы в одну. Не нужно объединяться, если голов не больше 1.

Обновление переключает между версиями, например. из вашей текущей рабочей версии в ту, которую вы только что вставили. Если у вас есть локальные незафиксированные изменения, обновление попытается объединить их, выполнив неотслеживаемое слияние.

Будете ли вы обновлять или объединять после извлечения, зависит от того, появились ли в результате извлечения новые головы.

Простой рабочий процесс для двух разработчиков

Самый простой базовый рабочий процесс при непосредственном сотрудничестве между двумя разработчиками:

  1. hg pull otherdev
  2. hg update or hg merge
  3. Редактировать
  4. hg commit -m "testing..."

Вытягивание + обновление (сокращенно: pull -u) гарантирует, что вы начинаете с самой последней версии кода. Если ваш коллега внес какие-либо изменения между вашим последним извлечением и фиксацией, это сообщит вам, что он ввел новую голову, и вместо этого вам нужно выполнить слияние.

Вы не всегда должны тянуть, вы также можете иногда пропустить это и просто редактировать, фиксировать, редактировать, фиксировать (...) на некоторое время; если вы над чем-то работаете и не хотите прерывать свой поток, просто подождите с подтягиванием и слиянием, пока не будете готовы (но я бы делал это хотя бы раз в день).

В общем, вы не должны навязывать изменения своему коллеге; таким образом, каждый из вас сохраняет контроль над тем, что находится в вашем репозитории, и вас не смущают внезапно появившиеся новые наборы изменений.

Примечание. Обновляя между шагами 3 и 4, вы снижаете вероятность создания расходящейся ветки, в SVN это то, что вы вынуждены делать. Однако я бы порекомендовал против эту практику, потому что, если есть конфликты, это оставит ваши изменения в неработающем состоянии, и вы не сможете их зафиксировать, пока не исправите. Одним из больших преимуществ DVCS является именно то, что вы можете избежать этого и безопасно зафиксировать свой рабочий код, прежде чем беспокоиться о слиянии.

Улучшенный рабочий процесс для двух разработчиков

Чтобы улучшить этот рабочий процесс, я бы порекомендовал создать третий общий репозиторий для вас и вашего коллеги, чтобы использовать его в качестве промежуточного звена, вместо того, чтобы напрямую получать данные друг от друга.

Это вводит дополнительный шаг push, но приятно то, что вы можете сделать кучу коммитов и решить самостоятельно, когда ваши изменения будут готовы поделиться с вашим коллегой, путем нажатия. Это сокращает время, необходимое для тестирования, и вероятность того, что ваш коллега потратит время впустую, потому что вы случайно что-то сломали, а он это вытащил.

person Laurens Holst    schedule 25.10.2011
comment
и, конечно, вы всегда можете зафиксировать, прежде чем тянуть, так что вам никогда не придется делать неотслеживаемое слияние - person jk.; 25.10.2011
comment
Спасибо. Я перепутал pull и merge. - person Niklas R.; 08.11.2011

Если вы наберете hg help pull

Это показывает:

pull changes from the specified source

    Pull changes from a remote repository to a local one.

Итак, это операция RemoteRepository->Local Repository. ничего общего с вашим локальным рабочим каталогом.

Если вы наберете «hg help merge»,

merge working directory with another revision

    The current working directory is updated with all changes made in the requested revision since the last common predecessor revision.

Это происходит между вашим локальным репозиторием и вашей локальной рабочей копией. ничего общего с удаленным репо.

Если вы просили примеры/руководства, в сети их много. я перечисляю некоторые здесь, надеюсь, это полезно для вас.

http://hgbook.red-bean.com/read/a-tour-of-mercurial-merging-work.html
http://www.rutherfurd.net/2010/apr/22/merging-mercurial-example/
https://www.mercurial-scm.org/wiki/TutorialMerge

person Kent    schedule 25.10.2011