Я уже некоторое время пользуюсь Git и хочу преобразовать свой обычный рабочий процесс в Mercurial.В частности, я заинтересован в преобразовании рабочего процесса, который я бы использовал, чтобы внести свой вклад в проект Git, чтобы иметь возможность внести свой вклад в проект Mercurial.
Как правило, для проекта на GitHub я бы разбилПроект на GibHub из исходного проекта, а затем получить оба локально, с двумя разными именами удаленных:
# Clone the initial repository and call the remote repository 'github-origin'
git clone -o github-origin git://github.com/orig_author/project.git
# Add the forked GitHub repo as an additional remote repo ('github-mine')
cd project
git remote add github-mine git://github.com/me/project.git
git fetch github-mine
Когда я перечисляю ветви с git branch -a
, я получаю что-то вроде этого:
* master
remotes/github-mine/some_feature
remotes/github-mine/master
remotes/github-origin/HEAD -> github-origin/master
remotes/github-origin/some_feature
remotes/github-origin/master
Я могу создать свои собственные локальные ветви, используя git checkout -b new_feature
, а затем отправить их обратно в мой репозиторий GitHub, добавив две ссылки:
* my_feature
remotes/github-mine/my_feature
Затем я могу связаться с первоначальным автором, чтобы обсудить эту функцию., отправить запрос на включение и так далее.Весь этот рабочий процесс на самом деле совершенно не зависит от рабочего графика оригинального автора.Это позволяет довольно просто обсуждать экспериментальные функции, не загрязняя основной репозиторий проекта.
Если первоначальный автор внес дополнительные изменения, я могу не отставать от git fetch github-orig
и, возможно, объединить или перебазировать свои локальные изменения соответствующим образом.В качестве быстрого теста (при условии, что текущая ветвь равна my_feature
):
git fetch github-origin
git checkout -b temp
git rebase github-origin/master
Важным моментом этого рабочего процесса является возможность узнать, где находится ветвь каждого репозитория по сравнению с моими собственными ветвями.В частности, важно знать, что мои ветви не совпадают с удаленными ветками с одинаковыми именами (даже между двумя репозиториями GitHub, например, две ветви master
не обязательно должны быть одинаковыми).Увидеть все это довольно просто, используя gitk --all
.
Я не уверен, как сделать то же самое в проекте Mercurial (например, в BitBucket).
Вот что япопытался сделать, основываясь на этой таблице эквивалентности команд :
hg clone https://bitbucket.org/orig_author/project
# Edit .hg/hgrc and add 'bb-mine=https://bitbucket.org/.../project' to [paths]
# Apparently equivalent to git fetch.
hg pull bb-mine
Это похоже на работу, и это тянет удаленные коммиты (на самом деле, я пробовал это в хранилище, гдеЯ уже нажал одну из моих веток).Я вижу все ветви, используя hg branches
, но без указания того, откуда они пришли.hg view
ничего не показывает.Что еще более важно, мой tip
теперь является последним из моих коммитов, но у меня нет эквивалента github-origin/master
, который у меня был бы (будь то до моих собственных коммитов или после, если другой автор внес больше изменений).
Я хотел бы иметь возможность сделать hg pull
(эквивалент git fetch
) в любой момент времени в будущем, чтобы увидеть, в чем разница между моей локальной копией и новыми изменениями, внесеннымидругие авторы не обязательно меняют что-либо в моем локальном репозитории или в моем репозитории BitBucket (по крайней мере, пока я не устраню потенциальные конфликты из-за этих изменений).
Кроме того, я также склоняюсьиметь свой собственный backup
репозиторий, когда я использую Git (который является SSH-сервером, на котором я могу публиковать все ветви, даже незавершенную работу, которая еще не предназначена для публикации).
Я понимаю, что Mercurialспособ ветвления не совсем такой же, как способ Git.Тем не менее, есть ли эквивалентный рабочий процесс для Mercurial, или мне просто придется изменить свой подход?Как я могу узнать, где находятся все репозитории, которые я использую, со своими соответствующими ветками (некоторые из них могут иметь общее)?