Вопрос или проблема
Я хочу использовать конкретный модуль из приватного репозитория 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
. Это позволит избежать проблем с аутентификацией и приватными репозиториями.
-
Настройка .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
на ваши реальные данные. Обратите внимание, что использование имени пользователя и пароля в открытых файлах — это небезопасно, рекомендуется использовать доступ по токену. -
Переменная окружения GOPRIVATE:
Нужно убедиться, чтоGOPRIVATE
настроена следующим образом:export GOPRIVATE=dev.azure.com/company
-
Использование 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
-
Проверка структуры модуля:
Убедитесь, что структура вашего репозитория соответствует следующим требованиям:repo/ ├── go/ │ ├── go.mod │ └── pkg/ │ └── mypkg/ │ └── mypkg.go └── go.mod (если есть)
-
Использование специфических веток:
Если вы хотите использовать определенную ветку, вы можете указать это в команде:go get dev.azure.com/company/project/_git/repo/go/pkg/mypkg@feature/mybranch
Убедитесь, что в вашем
go.mod
файл правильно настроено всё, включая версию модуля, чтобы избежать конфликта из-за неправильного пути.
Следуя этим шагам, вы сможете корректно получать модули из подкаталогов частного репозитория Azure DevOps без проблем с аутентификацией и путями.