Как избежать меркуриального устаревшего предупреждения на клиентах без расширения расширения
В настоящее время я работаю в компании, которая использует 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