Насколько я понимаю, (а) вы используете новую систему модулей Go, и что (б) часть проблемы заключается в том, что вы не хотите продолжать продвигать изменения в github или gitlab в разных репозиториях, когда вы выполняете локальную разработку.
Другими словами, если у вас есть локальные изменения, похоже, вы не хотите возвращать эти изменения через github / gitlab, чтобы эти изменения были видны в ваших связанных репозиториях, над которыми вы работаете локально.
Самый важный совет
Наличие> 1 модуля в одном репозитории значительно усложняет ваш рабочий процесс.
Как показано в вашем примере, в общем, почти всегда больше работы на постоянной основе иметь> 1 модуль в одном репозитории. Это также очень сложно сделать правильно. Для большинства людей цена почти всегда не окупается. Кроме того, часто выгода - это не то, что люди ожидают, или в некоторых случаях нет практической пользы от наличия> 1 модуля в репо.
Я определенно рекомендую вам следовать общепринятому правилу «1 репо == 1 модуль», по крайней мере, на данный момент. В этом ответе содержится более подробная информация о том, почему.
Работа с несколькими репозиториями
Если вы используете модули Go, один из подходов состоит в том, что вы можете добавить директиву replace
в go.mod
файл модуля, которая сообщает этому модулю Go о расположении на диске других модулей Go.
Пример структуры
Например, если у вас есть три репозитория repo1
, repo2
, repo3
, вы можете клонировать их, чтобы все они располагались рядом друг с другом на вашем локальном диске:
myproject/
├── repo1
├── repo2
└── repo3
Затем, если repo1
зависит от repo2
и repo3
, вы можете установить go.mod
файл для repo1
, чтобы знать относительное расположение на диске двух других модулей:
repo1 go.mod:
replace github.com/me/repo2 => ../repo2
replace github.com/me/repo3 => ../repo3
Когда вы находитесь внутри каталога repo1
или любого из его дочерних каталогов, команда go
, такая как go build
или go test ./....
, будет использовать дисковые версии repo2
и repo3
.
repo2 go.mod:
Если repo2
зависит от repo3
, вы также можете установить:
replace github.com/me/repo3 => ../repo3
repo3 go.mod:
Если, например, repo3
не зависит ни от repo1
, ни от repo2
, вам не нужно добавлять replace
к его go.mod
.
Дополнительная информация
Директива replace
более подробно описана в заменить FAQ в вики по модулям.
Наконец, это зависит от вашего конкретного варианта использования, но распространенным решением на данном этапе является использование gohack, что автоматизирует часть этого процесса. В частности, он создает изменяемую копию зависимости (по умолчанию в $HOME/gohack
, но местоположение контролируется переменной $GOHACK
). gohack
также устанавливает для текущего go.mod
файла заменить директиву, чтобы указать на эту изменяемую копию.
person
typical182
schedule
08.08.2019