Azure DevOps (API) Удаление ветки

Вопрос или проблема

Требование состоит в создании нового репозитория и копировании содержимого (файлов) из репозитория ‘шаблона’ в новый.

Я сделал это с помощью 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 к исходному репозиторию.

Решение данной проблемы

Чтобы перенести содержимое шаблонного репозитория без его истории, можно использовать следующий подход:

  1. Клонирование шаблонного репозитория: Сначала клонируем шаблонный репозиторий на локальный компьютер. Это нужно сделать с помощью команды Git:

    git clone https://dev.azure.com/{organization}/{project}/_git/{template-repo}
  2. Создание нового репозитория без истории: Перейдите в папку клонированного репозитория и удалите информацию о предыдущем коммите:

    cd {template-repo}
    rm -rf .git

    Затем инициализируйте новый репозиторий:

    git init
  3. Добавление файлов в новый репозиторий: Скопируйте файлы обратно в новый репозиторий:

    git add .
  4. Первый коммит: Создайте новый коммит с вашими файлами:

    git commit -m "Initial commit from template repository"
  5. Создание нового репозитория через API: Используйте API для создания нового репозитория в Azure DevOps, как вы уже делали, но теперь вы можете связать локальный репозиторий с удаленным:

    git remote add origin https://dev.azure.com/{organization}/{project}/_git/{new-repo}
  6. Отправка изменений в удаленный репозиторий: После этого, выполните команду push:

    git push -u origin master

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

Заключение

Применяя вышеописанные шаги, вы сможете успешно создать новый репозиторий в Azure DevOps с необходимым содержимым, избегая ненужного переноса истории коммитов. Этот подход гарантирует, что ваше новое облачное хранилище будет чистым и ясным для дальнейшей разработки.

Оцените материал
Добавить комментарий

Капча загружается...