Базар - тянуть только последнюю ревизию (а не всю ветку)
Коротко: Как я могу взять последнюю версию (только) из удаленного хранилища базаров и добавить ее в качестве новой редакции в локальный репозиторий.
Фон: у меня есть система разработки и производственная система. В системе разработки есть репозиторий базаров, имеющий ветку с большим количеством ревизий разработки. Время от времени я хочу включить последние разработки в производственную систему. Я хочу сделать это путем какого-то "вытягивания" (система разработки не может подключиться к производству по соображениям безопасности, но производство может инициировать подключение к разработке).
На производстве мне не нужна вся история изменений разработки, а только те изменения, которые на самом деле идут в производство (обычно это ветвь подсказки). Тем не менее, я хочу, чтобы контроль версий в производственной системе каждый раз отслеживал, что на самом деле поступает в производство.
bzr pull
тянет всю ветку. bzr pull --revision=last:1
также тянет всю ветку, до указанной ревизии.
bzr merge --pull --revision=last:1
также тянет всю ветку. bzr merge --pull --revision=last:2..last:1
а также bzr merge --pull --change=last:1
оба извлекают только новые изменения, внесенные в последнюю ревизию, но не изменения, внесенные в более старые ревизии.
С облегченной проверкой у меня нет отслеживания ревизий, которые вводятся в производство - локальное рабочее дерево остается частью удаленного хранилища.
Единственный способ, который я пока вижу, это импортировать рабочее дерево, используя некоторые rsync или scp, и потом фиксировать их в локальной ветке. Есть идеи получше?
3 ответа
В некоторой степени вы можете сделать это, запустив:
$ bzr branch --stacked REMOTE-URL LOCAL-PATH
это создаст локальную ветку, которая имеет только последние несколько ревизий. Это независимая ветвь, поэтому, если вы делаете коммит в локальной ветке, он не будет автоматически перенесен в удаленную ветку. Если вы попытаетесь получить доступ к любым данным в локальной ветви, которые недоступны, bzr отправит запрос в удаленную ветвь, чтобы найти эти данные.
Прежде всего, вы не можете сделать это, просто потянув IMO последней ревизии, потому что каждая ревизия хранит только различия с предыдущей ревизией. Это объясняет, почему, например, bzr merge --pull --change=last:1
не работает
Я бы ДЕЙСТВИТЕЛЬНО просто потянул всю ветку, но если вы этого не хотите, вы можете сделать что-то вроде
bzr diff -rx -p1
где x
последняя ревизия, которую вы уже включили в производство. Это создает обзор всех изменений между текущим рабочим каталогом и ревизией. x
, но без всех деталей пересмотров между ними. -p1
Флаг удостоверяет, что вывод в формате патча ( http://doc.bazaar.canonical.com/beta/en/user-reference/diff-help.html). Затем вы можете применить этот патч в вашей производственной системе.
Я думаю, что это некрасиво, но это может сделать работу.
Если я правильно понимаю, вы хотите синхронизировать производственную ветвь с тем же состоянием, что и у подсказки ветки разработки, но без истории изменений, верно?
Вы можете сделать это с:
bzr merge OTHER_URL
bzr revert --forget-merges
bzr commit
В результате получается, как будто вы выбрали вишню изменений всех отсутствующих ревизий и зафиксировали их все сразу.
Однако здесь есть ОГРОМНОЕ предостережение. Поскольку история изменений не сохранилась, Bazaar не знает, что изменения, которые вы выбрали, уже применены. Следствием этого является то, что в следующий раз, когда вы попробуете эти же шаги, вы получите конфликты. Поэтому я не думаю, что это полезное решение.
Другой способ (с другой оговоркой) заключается в следующем:
bzr diff --new OTHER_URL | patch -p0
Это будет применять diff текущей ветви и эталонной ветви как патч. Предостережение в том, что патч не может обрабатывать переименования.
В общем, я думаю, что вы пытаетесь сделать это странно. Вы должны просто вытащить или объединить и сохранить историю. Или вы можете попробовать работать с функциональными ветками. Особенность ветвей функций заключается в том, что после завершения функции вы перестаете работать с ней. В этом случае вы можете объединить всю ветвь компонента и забыть о промежуточных ревизиях, потому что вы никогда больше не будете сливаться из ветви компонентов, поэтому у вас не возникнет проблема двойного выбора вишни.