Где установить ветку в mercurial?

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

У меня есть репозиторий на моей локальной машине в каталоге /home/Cassie/localRepository/src1. На моей машине есть еще один каталог /home/Cassie/localRepository/src2, который содержит большинство общих файлов как каталог src1, но также содержит несколько разных файлов. Например, в /home/Cassie/localRepository/src1 есть

file1 file2 file3 file4 file5

в /home/Cassie/localRepository/src2 есть

file1 file2 file3 file4(version2) file5(version 2)

Я хотел бы сделать их двумя разными ветвями и работать над ними отдельно. Тем не менее, я все еще продолжаю работать над файлом1, файлом2 и файлом3 и надеюсь, что обе эти ветки со временем получат обновленные файлы1 файлы2 файлы3. Обратите внимание, что и файл4, и файл5 в каталоге src1 имеют то же имя, что и файлы в каталоге src2. Если я перемещу все файлы в один и тот же каталог, невозможно будет отличить, какая версия от какой. Вот почему я сохранил одну версию файла4 и файла5 в каталоге src1, а другую версию файла4 и файла5 — в каталоге scr2. У меня есть командная учетная запись на битбакете, и я добавил в нее каталог src1. Таким образом, битбакет имеет все файлы в src1 как центральный репозиторий. Теперь у меня проблемы с тем, где настроить ветку для src2 и достичь своей цели.

Кстати, моя локальная машина — рабочая станция Linux RedHat 6.2, на ней установлены mercurial 1.7 и tortoisehg 1.5.

Я пробовал некоторые эксперименты:

(1) Я создал еще один каталог, src, в качестве своего локального репозитория. Скопировал в него файл 1,2,3, добавил и зафиксировал их.

(2) Затем я скопировал файл4 из каталога src1 в src и сделал его веткой с именем src1-Branch, скопировал, добавил файл4.txt в ветку src1 и зафиксировал ее.

(3) создал еще одну ветку под названием src2-branch, переключившись на src2-branch с помощью

hg update src2-branch

, скопировал файл4 (версия2) из ​​каталога src2 в текущий каталог с помощью

 cp ../src2/file4.txt .

, добавил файл4 и попытался зафиксировать файл4.txt. Однако я столкнулся с сообщением об ошибке как

waiting for lock on working directory of /home/Cassie/src held by 'Cassie-PC:20994'

Затем я погуглил в Интернете, и люди предложили удалить .hg/wlock. Это сработало !

Кто-нибудь знает, почему проблема возникла в первую очередь? Я сделал что-то не так, когда добавил файл 4.txt из src2 в src2-ветвь? Спасибо


person Cassie    schedule 08.06.2012    source источник


Ответы (1)


Я думаю, вы можете добиться того, чего хотите, используя ветки Mercurial. Вы можете хранить изменения в своих файлах отдельно для разных ветвей, при желании объединяя эти изменения с другими ветвями. В вашем репозитории src1 создайте ветку src2:

 > hg branch src2

Затем вы можете удалить файлы 4 и 5 и добавить файлы 6 и 7:

> hg remove file4 file5
> cp ..\src2\file6 .
> cp ..\src2\file7 .
> hg add file6 file7
> hg commit -m "Removing file4 and file5; adding file6 and file7."

Затем вы используете команду слияния Mercurial, чтобы внести изменения из одной ветки в другую. Судя по вашему исходному вопросу, вы хотите внести изменения из ветки по умолчанию (src1) в ветку src2. В этом случае вы бы:

> hg up src2
> hg merge default
> hg commit -m "Merging default -> src2"

Слияние переносит все неслитые изменения из исходной ветки в целевую ветку. Если вы хотите только внести некоторые изменения, используйте команду graft, если вы используете Mercurial 2.0 или более позднюю версию, или расширение пересадки, если на более ранней версии.

person Aaron Jensen    schedule 09.06.2012
comment
Я немного смущен, какие файлы находятся в каком каталоге. Предположим, мы делаем src1 веткой по умолчанию, а src2 — веткой. Когда вы удаляете файлы 4,5 и добавляете файлы 6,7, каталог src1 в конечном итоге содержит все файлы 1–7 в своем каталоге? Или src1 имеет только file1,2,3,6,7, как и src2? Если в src1 есть все файлы с 1 по 7, это создает проблему. Файл 4 на самом деле такой же, как файл 6 с тем же именем, но другой версией. Например, все они называются weather.f90, поэтому их нельзя размещать в одном каталоге. Они в порядке, если они находятся в разных каталогах. - person Cassie; 14.06.2012
comment
@Cassie Src1 и src2 — это один и тот же каталог, но в разных ветках. Если файлы 4 и 5 удалены, а файлы 6 и 7 добавлены в ветку src2, это не повлияет на ветку src1, пока вы не объедините src2 с src1. Если файл 4 и файл 6 являются одним и тем же файлом с разным содержимым, применяется одна и та же концепция: файл 4/6 будет отличаться в ветке src2, чем в ветке src1. - person Aaron Jensen; 15.06.2012
comment
Я понимаю, что файл 4 и файл 6 будут отображаться по-разному для двух веток. Предположим, файл 4 называется Weather.F90, а файл 6 также называется Weather.F90. Когда вы выполняете команду cp ..\src2\file6 ., не перезаписывает ли это файл4 в текущем каталоге? Как вы можете хранить два файла с одинаковым именем, но разным содержимым в одном каталоге? К сожалению, они должны иметь одно и то же имя файла, поэтому я храню их в разных каталогах. Спасибо, - person Cassie; 15.06.2012
comment
Src1 и src2 не являются разными каталогами. Mercurial работает иначе: его ветки хранятся как метаданные. Это отличается от таких инструментов, как Subversion, где ветки на самом деле являются разными каталогами. Вы бы никогда не сделали cp ..\src2\file. Вы просто измените файл6, сохраните его и зафиксируете. Тогда файл будет отличаться для ветвей src1 и src2. - person Aaron Jensen; 15.06.2012
comment
Я думаю, что то, что вы объяснили, сработает, если я еще не создал свои файлы. Проблема в том, что у меня уже было два файла с одинаковым именем в разных каталогах. Я только что установил mercurial и хотел бы использовать его для управления кодами. Однако я столкнулся с проблемой блокировки, когда пытался скопировать файлы с одинаковым именем из разных каталогов. Есть идеи ? Я обновил свой вопрос. Спасибо. - person Cassie; 21.06.2012