Как скопировать репо из Bitbucket в CodeCommit со всеми ветками, но без истории?

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

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

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

Вот основные шаги. Это прекрасно работает без--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 (ошибка распаковщика)

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

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

Я читал, что теперь вы можете нажать на мелкую синхронизацию с Git 1.9 или новее. У меня git версии 2.7.4. (См. Этот ответ на вопрос здесь: /questions/4555177/bezopasno-li-ochischat-klon-s-pomoschyu-depth-1-sozdavat-kommityi-i-snova-poluchat-obnovleniya/4555184#4555184.) Однако, возможно, ограничение на нажатие из неглубокой синхронизации было снято с обычного клона, но не сmirror.

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

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

1 ответ

Решение

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

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

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

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

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