Настройка ртутных / печных подчиненных на osx
Я пытался следовать инструкциям в ответе на этот вопрос, используя печь.
Я хотел бы иметь возможность организовать вещи следующим образом:
/somepath/thirdparty
сопоставляет с хранилищем печи "Thirdparty" и содержит различный код/somepath/common
отображается в хранилище печи "common" и содержит общий код, который я написал
а также
/somepath/project1
карты в хранилище печи "project1"/somepath/project1/thirdparty
карты в филиал третьей стороны выше/somepath/project1/common
карты на ветку общего выше
а также
/somepath/project2
карты в хранилище печи "project1"/somepath/project2/thirdparty
карты в другой филиал третьей стороны выше/somepath/project2/common
карты на другую ветку общего выше
Я обнаружил, что когда я создал .hgsub
файл в соответствии с инструкциями и добавил / отправил его в Kiln, я больше не мог просматривать файлы Kiln в средстве просмотра веб-файлов Kiln - он отображал скрытое сообщение о "перегреве" Kiln:-) Кроме того, хотя он автоматически создавал подпапки в правильное место, они не были заполнены файлами (возможно, из-за сбоя).
Кто-нибудь пробовал что-то подобное раньше, используя печь?
Поскольку я намереваюсь разработать ряд приложений, использующих общий код (и, возможно, в конечном итоге выпустить библиотеку как открытый исходный код), я хотел бы управлять ею в отдельных репозиториях. Однако, поскольку некоторые из проектов предназначены для конечных клиентов, я должен иметь возможность предоставить им единый репозиторий, который включает в себя вещи, как описано выше.
1 ответ
В настоящее время Kiln не поддерживает вложенные ссылки, которые используют вложенные URL-адреса на сервере. Это означает, что вы не можете использовать оба следующих URL:
http://server/kiln/somepath/project1
http://server/kiln/somepath/project1/thirdparty
Поэтому вы должны настроить Kiln так, чтобы у вас было четыре репозитория на сервере:
http://server/kiln/somepath/project1
http://server/kiln/somepath/project2
http://server/kiln/somepath/thirdparty
http://server/kiln/somepath/common
Это просто - всего четыре нормальных репозитория. Затем клонируйте "проект" и создайте .hgsub
файл с:
thirdparty = http://server/kiln/somepath/thirdparty
common = http://server/kiln/somepath/common
Когда вы вернете это обратно в Kiln, он заметит и отобразит ссылки для под-репозиториев. Тем не менее, в конечном итоге вложенные репозитории не будут вложены в сервер. Так что не будет никакого project1/thirdparty
путь на сервере.
Также далеко не ясно, чего бы вы хотели. Когда у вас есть несколько проектов, которые сотрудничают и используют некоторую общую кодовую базу, вы хотите, чтобы "project1" и "project2" получали изменения друг друга в эту общую кодовую базу. Так что очень полезно, что common
субрепо в обоих проектах толкать и тянуть из http://server/kiln/somepath/common
,
В Mercurial мы обычно рекомендуем использовать пути вида common = common
в .hgsub
файл. Это означает, что сервер должен поддерживать вложенные репозитории. Когда Kiln не поддерживает вложенные репозитории, вы можете использовать полные пути.
При первоначальной настройке вложенных репозиториев, помните, что вам нужно обновить их вручную. Таким образом, с вышеупомянутыми URL вы должны настроить "project1", запустив:
$ hg clone http://server/kiln/somepath/project1
$ echo "common = http://server/kiln/somepath/common" > .hgsub
$ echo "thirdparty = http://server/kiln/somepath/thirdparty" > .hgsub
$ hg commit -m "Created subrepos"
Это создает начальные пустые подпапки. Они пусты, потому что вы не сказали Mercurial, какая ревизия вам нужна. Это отслеживается в .hgsubstate
где вы найдете:
0000000000000000000000000000000000000000 common
0000000000000000000000000000000000000000 thirdparty
Для заполнения под-репозиториев вы делаете
$ cd common
$ hg pull --update
$ cd ../thirdparty
$ hg pull --update
$ cd ..
$ hg commit -m "Updated subrepos"
Это обновляет 000...
линии в .hgsubstate
с текущими идентификаторами набора изменений наконечника для двух подпунктов. Будущие клоны "project1" заметят .hgsubstate
файл и убедитесь, что обновили подпункты к ревизии, упомянутой там.