Присоединение двоичного файла к тегу Git - PullRequest
5 голосов
/ 19 октября 2011

Я занимаюсь разработкой мобильных приложений (iPhone, Android и Blackberry) и недавно конвертировал их из SVN в Git.

В SVN после выпуска я отмечаю соответствующую ветку / ревизию, чтобы обеспечить ее состояниесохраняется, а затем я добавляю каталог к ​​этому тегу и помещаю в выпущенный двоичный файл, а также (для iPhone) файлы символов отладки для этой точной сборки (для обозначения любых отчетов о сбоях позже).Файлы не должны быть версионными, но это удобное место для хранения исторических артефактов вместе с кодом, чтобы гарантировать их резервное копирование (SVN имеет политику резервного копирования, в то время как сборки на моем CI-сервере этого не делают).

Я пытаюсь найти лучший эквивалент в Git.Вероятно, самым близким будет создать новую ветку, добавить двоичные файлы, пометить ее и удалить ветку.Тем не менее, мне интересно, есть ли лучшие способы сделать это?

В идеале я хотел бы создать тег, а затем прикрепить двоичные файлы в виде неверсионных файлов к тегу.Таким образом, они на самом деле не отображаются в дереве исходных текстов, но находятся в репозитории, связанном с тегом, для извлечения по мере необходимости любого, кто имеет доступ к репозиторию.Есть ли что-нибудь подобное в Git?

Ответы [ 3 ]

6 голосов
/ 19 октября 2011

VCS - не идеальное место для хранения любого элемента доставки (например, двоичных файлов), в основном потому, что:

  • они не получат преимущества от функций VCS (ветвь, слияние, разность, ...)
  • DVCS (распределенная VCS) будет видеть, что размер его репо значительно увеличивается при каждом выпуске, что затем делает любой клон указанного репо довольно громоздким.

Доставки лучше хранить в хранилище артефактов (например, Nexus ), где контрольная сумма ключей (SHA1, MD5) будет автоматически вычисляться и связываться с этими доставками, гарантируя, что вы может вернуть их для использования в производстве при проверке их целостности.

Так что это означает наличие отдельного хранилища (от VCS) для управления этими элементами.


Как упоминалось в Бесполезном * ответе , вы можете использовать git notes, чтобы связать двоичный BLOB-объект с объектом git (включая тег)

В принципе, заметка - это обычный Git-блоб, и допускается любой (не) формат. Вы можете безопасно создавать двоичные заметки из произвольных файлов, используя git hash-object:

$ cc *.c
$ blob=$(git hash-object -w a.out)
$ git notes --ref=built add -C "$blob" HEAD

Единственная проблема - размер репо, который может выйти из-под контроля, если эти заметки регулярно не очищаются.


Другой подход заключается в использовании git-annex, который позволяет связать git commit с внешним контентом (т. Е. Контентом, который может быть двоичный файл, настолько большой, насколько это необходимо).

git-annex позволяет управлять файлами с помощью git, не проверяя содержимое файла в git.
Хотя это может показаться парадоксальным, но это полезно, когда вы имеете дело с файлами, размер которых больше не поддерживается в настоящее время git из-за ограничений памяти, времени или дискового пространства.

2 голосов
/ 19 октября 2011

Страница man для git notes описывает, как использовать их для связывания произвольных двоичных объектов с объектами. Хотите ссылку, или этого достаточно для продолжения?

0 голосов
/ 20 октября 2011

Как говорит @ VonC VCS не идеален для хранения неверсионных двоичных файлов.

Для решения проблемы с использованием только git вы можете создать отдельный репозиторий git для артефактов и добавить исходные репозитории, необходимые длявоссоздайте их как подмодули .

В каждом публичном выпуске добавляйте новые артефакты в хранилище и обновляйте ссылки на подмодули.Подмодули указывают непосредственно на коммиты, поэтому вы всегда знаете, из каких источников созданы конкретные артефакты.

В общем, подмодули git очень запутаны в использовании, но в этом ограниченном случае (без веток, без прямого редактирования подмодулей) они могут быть полезны.

Осторожно, git не очень подходит для управления большими двоичными файлами.Смотрите Управление большими двоичными файлами с помощью git .

...