LINUX.ORG.RU

Mercurial - создание репы из подкаталога

 , ,


0

2

Здравствуй, ЛОР.

Есть репозиторий Mercurial, в котором находятся несколько проектов. Хочу один из этих проектов выделить в отдельный репозиторий с сохранением истории его изменений (и подключить его потом как subrepo). Причем не хотелось бы включать изменения файлов, не входящих в каталог проекта. Ясно, что после этого хеши ревизий должны изменится, т.к. для нужного каталога есть ревизии, включающие изменение не только его содержимого.

Т.к. можно к примеру посмотреть лог изменений лишь отдельного каталога/файла, я ожидал что и выполнить такое разделение будет легко.

Почетав man, поискав в интернете, не нашёл, возможно ли это быстро-и-просто, или придется вручную, например через дифы всех ревизий нужного каталога создавать новый репозиторий. Или, возможно, такая функция есть в git/где-нибудь-еще, и можно всё решить конвертированием репозиториев? Кто-нибудь сталкивался с такой задачей?

★★★★★

Последнее исправление: CYB3R (всего исправлений: 4)
Ответ на: комментарий от tailgunner

Точно, похоже что я опцию --filemap сразу не заметил, когда просматривал hg help convert.

orm-i-auga ★★★★★
() автор топика
Ответ на: комментарий от tailgunner

А с сохранением истории выделить в отдельный subrepo похоже до сих пор нельзя.

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

Хотя по правильному нужно добавлять информацию о subrepo при конвертации и следить за всеми ревизиями в выделенном subrepo.

kamre ★★★
()
Ответ на: комментарий от tailgunner

Нужно выделить поддерево в отдельный repo, чтобы затем подключить его обратно как subrepo. Для этого сейчас можно только отфильтровать поддерево в отдельный repo, а также отфильтровать все остальное в другой repo и подключить туда первый как subrepo.

При таком раскладе потеряется информация о синхронизации уже имеющихся ревизий между новыми репозиториями. Нужно аккуратно конвертировать так, чтобы получилось как будто изначально поддерево лежало в отдельном subrepo. И это вполне можно сделать: те ревизии, которые меняют поддерево, будут менять .hgsub в главном repo.

kamre ★★★
()
Последнее исправление: kamre (всего исправлений: 1)
Ответ на: комментарий от kamre

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

Не вижу проблемы.

Для этого сейчас можно только отфильтровать поддерево в отдельный repo

Окей...

а также отфильтровать все остальное в другой repo

Зачем? Просто удалить соответствующий подкаталог и поставить на его место subrepo. «Фильтрация всего остального в другой репо» мне кажется, мягко говоря, глупостью.

tailgunner ★★★★★
()
Ответ на: комментарий от tailgunner

Просто удалить соответствующий подкаталог и поставить на его место subrepo.

А update на ревизии, когда не было subrepo а были файлы из поддерева, и обратно будет корректно работать? Каждый раз при update на «обратно» будет клонировать subrepo заново? Зачем тогда вообще история для subrepo нужна?

kamre ★★★
()
Ответ на: комментарий от kamre

А update на ревизии, когда не было subrepo а были файлы из поддерева, и обратно будет корректно работать?

Не пробовал.

Зачем тогда вообще история для subrepo нужна?

Чтобы subrepo можно было использовать вообще без родительского репозитория. Ну и мелкое удобство - типа сделать hg log прямо в subrepo.

tailgunner ★★★★★
()
Ответ на: комментарий от kamre

Я сейчас сделал так - сконвертировал поддерево в отдельную репу, в исходной репе удалил этот каталог и закомммитил удаление, следующим коммитом уже подключил subrepo. Сначала попробовал сделать это все в одном коммите, но так не получается. Учитывая что история в отдельной репе уже сохранена, удалять в принципе уже не жалко, а так как эти действия в разных коммитах, то и обновление у остальных должно пройти нормально. С другой стороны, на промежуточном коммите получился сломаный, не собирающийся проект.

orm-i-auga ★★★★★
() автор топика
Ответ на: комментарий от orm-i-auga

С другой стороны, на промежуточном коммите получился сломаный, не собирающийся проект.

Ну так и чем хороши DVCS, всё это можно провести локально, а push в общий репозиторий делать для уже причёсанного варианта :)

KRoN73 ★★★★★
()
Ответ на: комментарий от KRoN73

Если речь о «причесывании» с помощью mq-плагина, то мне еще как-то не доводилось им пользоваться. ) Надо будет как-нибудь попробовать. А вообще - да, даже и без него, в общей репе получается всегда рабочий вариант.

orm-i-auga ★★★★★
() автор топика
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.