Как скопировать репо из Bitbucket в CodeCommit со всеми ветками, но без истории? - PullRequest
0 голосов
/ 24 января 2020

Как я могу скопировать Bitbucket repo в CodeCommit, включая все ветви, но исключая всю историю всех ветвей?

Причина, по которой вы хотите это сделать: наш сервер конфигурации читает из CodeCommit, но источник истины в битбакете. (Причина, по которой мы это делаем, - длинная история.) У нас есть скрипт, который в настоящее время (и успешно) «копирует» репозиторий Bitbucket в CodeCommit. Мы выясняем, можем ли мы улучшить время отклика нашего сервера конфигурации, синхронизируя его с CodeCommit без всякой истории, поэтому, когда ConfigServer выполняет клонирование или выборку, это не занимает много времени (в настоящее время время отклика составляет 15-25 секунд).

Мы надеялись, что сможем просто добавить --depth 1 к нашей команде git clone --mirror. Однако при отправке зеркального репо в CodeCommit мы получаем ошибку. Чтобы увидеть, была ли это просто проблема CodeCommit, я попытался сделать что-то похожее для чтения из bitbucket и pu sh обратно в новый репозиторий bitbucket. Я получил другую, но похожую ошибку.

Вот основные шаги. Это прекрасно работает без --depth 1:

git clone --mirror --depth 1 ssh://<bitbucket> RepoFolder
cd RepoFolder
git remote add codecommit ssh://<codecommit>
git remote update origin
aws codecommit create-repository --repository-name pvvts_configs-RepoFolder --repository-description 'Synced'
git push --mirror codecommit

Ошибка возникает в последней команде (git push). Выглядит ошибки как:

удаленный: Неизвестный совершает 2280a0e659a1232a402041c27d94d81fd5142edberror: распаковка неуспешно: Неизвестный совершает 2280a0e659a1232a402041c27d94d81fd5142edb

Вслед за ошибки, такие как следующие для каждой ветви:

[удаленный отклонен] dev -> dev (ошибка распаковщика)

Если я попытаюсь сделать что-то подобное, кроме нажатия обратно на bitbucket , я получу следующее ошибка. (Я пропускаю шаг aws create-repository и вместо этого вручную сначала создаю новое хранилище в bitbucket.)

ошибка: не удалось прочитать 6b0189279671f3a8c7b190dbc8d7ec91c0bb808a в s sh: // git@bitbucket.pearson.com/pvvts_configs/vtscoreconfigurations_for_testing_only_marnee_1g_copy.git ! [удалено отклонено] dev -> dev (мелкое обновление не разрешено)

Я читал, что теперь вы можете использовать pu sh с мелкой синхронизацией c с Git 1.9 или более поздней версией. У меня git версия 2.7.4. (См. Этот ответ на вопрос здесь: { ссылка }.) Однако, возможно, ограничение на толкание от мелкого син c было снято с обычного клона, но не с mirror.

Есть ли способ сделать этот мелкий син c? Есть ли какой-то другой способ выполнить sh мою цель по уменьшению размера копируемого репо в CodeCommit? (Обратите внимание, что на самом сервере конфигурации есть опция, позволяющая ему выполнить мелкое клонирование.)

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

1 Ответ

1 голос
/ 25 января 2020

Не похоже, что CodeCommit позволяет вам делать мелкие обновления. Большинство Git провайдеров хостинга этого не делают, поскольку это означает, что хранилище не завершено, что препятствует работе определенных операций на стороне сервера (например, запросов на извлечение). Мелкие запросы также очень дороги в обслуживании.

Эта функция, как вы заметили, доступна в Git, но разные хостинг-провайдеры поддерживают разные функции протокола из-за того, что имеет смысл для их инфраструктуры и тот факт, что многие из них используют службу, отличную от core Git, для обработки некоторых или всех операций в pu sh.

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

Если ваша цель - уменьшить размер вашего репозитория в CodeCommit, то вам не повезло. Если вы не хотите переписать историю и добавить усеченную историю в CodeCommit, то нет способа избежать размещения всей истории.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...