Как избежать меркуриального устаревшего предупреждения на клиентах без расширения расширения

В настоящее время я работаю в компании, которая использует Mercurial, но большинство разработчиков используют MQ вместо нового потока разработки. Поэтому большинство пользователей не имеют включенного расширения.

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

устаревшая функция не включена, но найдено 33 маркера!

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

Я бы ожидал, что можно либо не передавать устаревшие наборы изменений в репозиторий сервера, либо (правильный путь), чтобы сервер не передавал устаревшие данные клиентам без evolve включен.

Это возможно? Если нет, то почему нет?

1 ответ

Я нашел пару обходных путей (хаков) для этой проблемы, поскольку похоже, что у Mercurial нет способа решить эту проблему на момент написания этого ответа:

Расширение Evolve для каждого репозитория

Удалить evolve расширение от ~/.hgrc файл, включите его для каждого репозитория, а затем используйте SSH, чтобы указать на репозиторий (в нашем случае это NFS, который является источником проблемы).

То есть в вашем репозитории hgrc у вас будет:

# This is <repo>/.hg/hgrc
[paths]
default = ssh://localhost//path/to/origin/repo
[extensions]
evolve =

и дальше ~/.hgrc:

[extensions]
# evolve =     => Disabled on purpose

Удаление устаревших маркеров с помощью крючков

Просто используйте крючок, чтобы удалить .obspurge файл в вашем репозитории hgrc:

# This is <repo>/.hg/hgrc
[alias]
obspurge = !echo "Purging obsolete markers" && rm /path/to/origin/repo/.hg/store/obsstore
[hooks]
post-push = hg obspurge

Если вы действительно хотите использовать evolve локально, но не обмениваться вашими маркерами, вы можете это сделать. Я расскажу вам, как, но имейте в виду, что у вас будет точно такой же набор проблем, что и при использовании раздевания и перебазировки без развития. Если вы нажмете предыдущую версию набора изменений и нажмете новую версию, сервер будет иметь две версии одновременно. Если вы хотите использовать Evolve только локально, вы можете добавить эти строки в свои файлы конфигурации:

[experimental]
createmarkers=True
allowunstable=True
exchangeopt=False
Другие вопросы по тегам