Получить подкаталог из приватного репозитория Azure

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

Я хочу использовать конкретный модуль из приватного репозитория Azure. Модуль находится в подкаталоге указанного репозитория. Это приводит к тому, что путь к требуемому модулю содержит нежелательный [...].git/[...].

Следуя документации Microsoft по HTTPS, я могу получить полный репозиторий, но сталкиваюсь со следующей проблемой при попытке использовать подкаталог.

.gitconfig

[url "https://user.name:[email protected]/company/project/_git/repo"]
    insteadOf = https://dev.azure.com/company/project/_git/repo

GOPRIVATE

"GOPRIVATE": "dev.azure.com"

Пример 1

go get dev.azure.com/company/project/_git/repo.git/go
go: модуль dev.azure.com/company/project/_git/repo.git@upgrade найден (v0.0.0), но не содержит пакет dev.azure.com/company/project/_git/repo.git/go

Ожидание
require dev.azure.com/company/project/_git/repo/go

Пример 2

go get dev.azure.com/company/project/_git/repo.git/go/pkg/mypkg@feature/#99999/mybranch
go: dev.azure.com/company/project/_git/repo.git/go/pkg/mypkg@feature/#98667/mybranch (v0.0.0) требует dev.azure.com/company/project/_git/repo.git/go/pkg/[email protected]: parsing go.mod:
        модуль объявляет свой путь как: dev.azure.com/company/project/_git/repo/go/pkg/mypkg
                но был запрошен как: dev.azure.com/company/project/_git/repo.git/go/pkg/mypkg

Ожидание
require dev.azure.com/company/project/_git/repo/go/pkg/mypkg

Ответ или решение

Для того чтобы подключить модуль из подкаталога частого репозитория Azure DevOps с использованием go get, вам нужно учитывать несколько моментов, чтобы избежать ненужного суффикса .git и правильно настроить пути.

Для начала, важно правильно настроить файл .gitconfig, а также переменную окружения GOPRIVATE. Это позволит избежать проблем с аутентификацией и приватными репозиториями.

  1. Настройка .gitconfig:
    Убедитесь, что вы правильно настроили файл .gitconfig. Вам нужно использовать следующую конфигурацию:

    [url "https://user.name:password@dev.azure.com/company/project/_git/repo"]
       insteadOf = https://dev.azure.com/company/project/_git/repo

    Измените user.name и password на ваши реальные данные. Обратите внимание, что использование имени пользователя и пароля в открытых файлах — это небезопасно, рекомендуется использовать доступ по токену.

  2. Переменная окружения GOPRIVATE:
    Нужно убедиться, что GOPRIVATE настроена следующим образом:

    export GOPRIVATE=dev.azure.com/company
  3. Использование go get:
    Теперь для получения модуля из подкаталога используйте правильный путь. Вам необходимо указывать только часть пути без суффикса .git. Например, если вы хотите получить пакет из подкаталога go, команда будет выглядеть так:

    go get dev.azure.com/company/project/_git/repo/go

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

    go: module dev.azure.com/company/project/_git/repo.git@upgrade found (v0.0.0), but does not contain package ...

    Убедитесь, что в вашем go.mod файле в корневом каталоге репозитория правильно прописан путь для модуля. Если ваш модуль в подкаталоге go/pkg/mypkg, то создайте файл go.mod в этом подкаталоге с содержимым:

    module dev.azure.com/company/project/_git/repo/go/pkg/mypkg
  4. Проверка структуры модуля:
    Убедитесь, что структура вашего репозитория соответствует следующим требованиям:

    repo/
    ├── go/
    │   ├── go.mod
    │   └── pkg/
    │       └── mypkg/
    │           └── mypkg.go
    └── go.mod (если есть)
  5. Использование специфических веток:
    Если вы хотите использовать определенную ветку, вы можете указать это в команде:

    go get dev.azure.com/company/project/_git/repo/go/pkg/mypkg@feature/mybranch

    Убедитесь, что в вашем go.mod файл правильно настроено всё, включая версию модуля, чтобы избежать конфликта из-за неправильного пути.

Следуя этим шагам, вы сможете корректно получать модули из подкаталогов частного репозитория Azure DevOps без проблем с аутентификацией и путями.

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

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