Вопрос или проблема
Требование состоит в создании нового репозитория и копировании содержимого (файлов) из репозитория ‘шаблона’ в новый.
Я сделал это с помощью API создания репозиториев.
Однако это также, похоже, переносит все предыдущие коммиты из исходного репозитория ‘шаблона’.
Мне это не нужно – есть ли способ этого избежать?
Кроме просто ‘нежелания’ этой истории, мне также трудно понять, что происходит, когда я затем делаю новый пуш в новый репозиторий.
Я получаю последний идентификатор коммита для нового репозитория и отправляю мои изменения.
Пуш идет в мой новый репозиторий, но затем мне предлагают создать запрос на перенос в оригинальный репозиторий ‘шаблона’.
Я предполагаю, что это происходит потому, что оба содержат общий коммит!?
Это действительно плохая новость, поэтому нужно предотвратить это.
Буду благодарен за любую мудрость … ! 🙂
Создание (форк) конфигурации репозитория
url = f'https://dev.azure.com/{organization}/{project}/_apis/git/repositories?&sourceRef=refs/heads/master&api-version=7.1'
{
"name": "NewRepo",
"project": {
"id": project_id
},
"parentRepository": {
"id": parent_repo_id,
"project": {
"id": project_id
}
}
}
Ответ или решение
Создание нового репозитория в Azure DevOps без истории коммитов
Вам необходимо создать новый репозиторий в Azure DevOps, копируя содержимое «шаблонного» репозитория, но без переноса истории коммитов. Эта задача может быть решена с помощью Azure DevOps REST API, однако, как вы уже заметили, использование API для создания репозитория приводит к сохранению истории коммитов, что может вызвать нежелательные последствия при дальнейшей работе с репозиторием.
Проблема с копированием репозитория
Когда вы создаете новый репозиторий с помощью API, он фактически наследует историю от родительского репозитория. Это означает, что все коммиты, включая их идентификаторы, будут дублированы в новом репозитории. При попытке сделать новый push
в ваш новый репозиторий, Azure DevOps понимает, что есть общий коммит с шаблонным репозиторием, что может привести к неожиданному поведению, таким как необходимость создания pull request к исходному репозиторию.
Решение данной проблемы
Чтобы перенести содержимое шаблонного репозитория без его истории, можно использовать следующий подход:
-
Клонирование шаблонного репозитория: Сначала клонируем шаблонный репозиторий на локальный компьютер. Это нужно сделать с помощью команды Git:
git clone https://dev.azure.com/{organization}/{project}/_git/{template-repo}
-
Создание нового репозитория без истории: Перейдите в папку клонированного репозитория и удалите информацию о предыдущем коммите:
cd {template-repo} rm -rf .git
Затем инициализируйте новый репозиторий:
git init
-
Добавление файлов в новый репозиторий: Скопируйте файлы обратно в новый репозиторий:
git add .
-
Первый коммит: Создайте новый коммит с вашими файлами:
git commit -m "Initial commit from template repository"
-
Создание нового репозитория через API: Используйте API для создания нового репозитория в Azure DevOps, как вы уже делали, но теперь вы можете связать локальный репозиторий с удаленным:
git remote add origin https://dev.azure.com/{organization}/{project}/_git/{new-repo}
-
Отправка изменений в удаленный репозиторий: После этого, выполните команду push:
git push -u origin master
Таким образом, вы создадите новый репозиторий, который будет содержать только актуальные файлы и не будет иметь истории коммитов от шаблонного репозитория. Это предотвратит возникновение ситуаций с общими коммитами и необходимостью создания pull request в первоначальный репозиторий.
Заключение
Применяя вышеописанные шаги, вы сможете успешно создать новый репозиторий в Azure DevOps с необходимым содержимым, избегая ненужного переноса истории коммитов. Этот подход гарантирует, что ваше новое облачное хранилище будет чистым и ясным для дальнейшей разработки.