Должен ли я совершать Godeps/_workspace или достаточно Godeps.json?
Я пишу проект в Go для развертывания на heroku, управляя зависимостями с godep.
Когда я godep save
, я получаю файл Godeps.json
, в котором перечислены мои зависимости с версиями и каталог _workspace/
с источником для всех зависимостей, скопированных в. Я бы предпочел не совершать _workspace
, весь этот код уже на github в другом месте. Кажется, что Godeps.json
имеет всю информацию, которая нам нужна для go get
зависимостей, зависящих от версии, в момент времени heroku buildpack.
Несколько источников рекомендуют использовать полный каталог Godeps/
, но другие предположим, что может не понадобиться.
Документы godep не очень помогают:
Это сохранит список зависимостей с файлом Godeps/Godeps.json и скопирует исходный код в Godeps/_workspace. Прочитайте его содержимое и убедитесь, что он выглядит разумным. Затем зафиксируйте файл для контроля версий.
Является ли Godeps.json файлом?
Ответы
Ответ 1
Официальный ответ:
Из проблемы GitHub # 131:
Предполагаемое использование godep
относится к зависимостям поставщиков и передает каталог _workspace в управление версиями. См. Документ заявки @kr, связанный в # 123 (предложение: http://goo.gl/RpYs8e). Как обсуждалось в этом предложении, у богепа был режим ( -copy = false), которые не поддерживали независимость. Я предполагаю, что из-за этого может возникнуть неоднозначный язык в Readme. Этот режим был удален, как описано в № 123.
Здесь также godep
автор говорит о своем проекте и идеях - Перенос вендоров и импорта пути
Личное мнение:
Я не думаю, что есть правильный способ сделать это.
Компоновка пакетов поставщиков выглядит неудобно, но имеет свои преимущества:
- Вы не полагаетесь на внешние сервисы (GitHub и т.д.). У GitHub нет сбоев, может быть, у вас есть какая-то ужасная политика компании, которая мешает вам использовать ее, возможно, репозиторий исчезает или история переписывается, возможно, вы находитесь за брандмауэром (сервер постановки/сборки) и т.д.
- Каждый раз, когда вы обновляете свои отпечатки, вы получаете отличную информацию о том, что изменилось.
Это помогает при обновлении до более новой версии или просто отслеживании изменений, если вы используете экран, который используется.
В конце концов, вам нужно взвесить плюсы и минусы. Лично я сжимаю каждый раз, когда мне приходится комментировать код поставщика, но в моих проектах Go я делаю. По крайней мере на данный момент.
Кроме того, такие компании, как Google и Facebook, в основном хранят все в одном репозитории и включают код поставщика (или так я слышал).
Интересная статья по теме:
Перейти к управлению пакетами
Ответ 2
godep понадобится json файл для чтения зависимостей, как показано в update.go
.
Таким образом, файл должен быть версией.
Но тогда godep заполнит содержимое godep/_workspace
, что означает, что это "сгенерированный" контент: вам не нужно версия it.
Ответ 3
Просто добавьте файл Godeps.json в репо и _workspace в список .gitignore:).
Пока ваш код должен быть полностью включен в ваше репо, зависимости нужно как-то просто ссылаться (godep.json, package.json, git подмодуль... вы выбираете), и не более того.
Та же самая тактика применяется к npm, bower, apt и всем другим менеджерам пакетов.
Ваше репо - ваши вещи + ссылки на вендоров поставщиков (конечно, когда это возможно, вы не можете ссылаться на zip файл sourceforge).
Как сказал @VonC, мы не хотим выпускать версии вендоров.