Базар - тянуть только последнюю ревизию (а не всю ветку)

Коротко: Как я могу взять последнюю версию (только) из удаленного хранилища базаров и добавить ее в качестве новой редакции в локальный репозиторий.

Фон: у меня есть система разработки и производственная система. В системе разработки есть репозиторий базаров, имеющий ветку с большим количеством ревизий разработки. Время от времени я хочу включить последние разработки в производственную систему. Я хочу сделать это путем какого-то "вытягивания" (система разработки не может подключиться к производству по соображениям безопасности, но производство может инициировать подключение к разработке).

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

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 текущей ветви и эталонной ветви как патч. Предостережение в том, что патч не может обрабатывать переименования.

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

Другие вопросы по тегам