Одно и то же имя тега из другого места приводит к проблемам - PullRequest
4 голосов
/ 27 апреля 2011

Я использую Mercurial и Fabric для развертывания моего сайта. Раньше я никогда не использовал Fabric, поэтому скопировал пример файла fab онлайн, а затем изменил переменные, чтобы они соответствовали моему собственному сайту.

Вот строки кода:

def prod():
    env.hosts                     = ['kevinburke.webfactional.com']
    env.user                      = 'kevinburke'

def deploy():
    require('hosts'                    , provided_by=[prod])

    local ("hg tag --local --force production")
    local ("hg push --remotecmd /home/kburke/bin/hg")  # this works fine
    run ("cd /my/web/directory; hg update -C production")

и это вызывается из командной строки как

fab prod deploy

Когда я был единственным, кто развертывал сайт, это работало без проблем. Но недавно я добавил двух коммиттеров, которые работают с одним и тем же файлом, и когда они пытаются развернуть сайт, удаленная версия сайта не обновляется до последней версии - она ​​обновляется только до последней версии, I * 1010. * помечен как производство, а не тот, который они пометили

Я ожидаю, что он будет использовать их тег "production" для обновления файла. Почему это происходит? Как заставить программу вести себя так, как я ожидаю в будущем?

Спасибо, Кевин

Ответы [ 2 ]

2 голосов
/ 27 апреля 2011

Вы не можете публиковать локальные теги.Это означает, что либо ваш первый шаг уже выполнен в репо /my/web/directory, либо что там уже есть production, называемая ревизией (вы можете проверить с помощью hg tags, hg branches и hg bookmarks).

У вас есть несколько способов исправить рабочий процесс (в порядке предпочтения):

  • использовать теги с общим префиксом, чтобы различать разные производственные ревизии, такие как production-23 или production-42, которые выможно анализировать на производственном ящике.
  • Создайте ветку production, где каждая ревизия для доставки объединяется с этой веткой.Я рекомендую его, если у вас уже есть опыт работы с ветками.
  • Используйте расширение bookmark и создайте закладку production, чтобы отслеживать развернутую версию.Это похоже на решение, которое вы сейчас хотите найти.Если вы хотите использовать закладки, вам нужно включить их как на сервере, так и на всех клиентах, и использовать hg push -B production, чтобы отправить текущее состояние вашей закладки на сервер.Одним из недостатков этого процесса является то, что вы никогда не увидите, если кто-то выдвинул другую закладку на сервер, так как при передаче закладки молча перезаписывается закладка на сервере.
  • Используйте обычные теги для отслеживанияпроизводственная версия.С одной стороны, кажется неправильным использовать теги для этого вида отслеживания, поскольку теги должны быть статичными.С другой стороны, у вас будет трек о том, какие ревизии были живы в определенный момент времени.Но первое решение значительно облегчает отслеживание.
1 голос
/ 27 апреля 2011

Может быть простой, но вы видели, что он действительно что-то делал? Возможно, ничего не произошло, а развернутый был вашим «производственным» тегом, когда вы его запустили.

Поскольку hg tag --local означает, что тег предназначен только для вашего локального репо и не является версионным, я не могу думать ни о какой другой причине. Другие даже не смогут узнать о теге.

...