Как мне импортировать стороннюю библиотеку в git?

StackOverflow https://stackoverflow.com/questions/1695925

  •  18-09-2019
  •  | 
  •  

Вопрос

Я рассматриваю, как импортировать некоторую стороннюю часть кода в репозиторий git.Сторонним кодом является "stm32f10x_stdperiph_lib", который предоставляется ST.

Библиотека на самом деле представляет собой набор обычных c-файлов (и заголовочных файлов), которые вы просто включаете и создаете, когда выполняете STM32 проект.

Проблема в том, что они предоставляют его только в виде zip-файла и они выпускают новые версии, поэтому я хотел бы добавить больше контроля.

Итак, мой план состоит в том, чтобы написать небольшой скрипт, который делает это:

  1. распаковать молнию
  2. возьмите несколько файлов (мне не нужны все файлы в zip-архиве).
  3. импортируйте выбранные файлы в репозиторий git

Мои проблемы начинаются с последнего шага: как мне импортировать и перезаписать старые файлы новыми (и удалить файлы, которые больше не включены)?

Это было полезно?

Решение

То, что вы ищете, - это "филиал поставщика".Предполагая, что вы хотите поработать над этим кодом и объединить обновления поставщика со своими собственными исправлениями, вот как это можно упростить.

git checkout -b vendor    # create a vendor branch and check it out

Это всего лишь один раз.Ветка поставщика, и она будет содержать обновления ТОЛЬКО от стороннего поставщика.Вы никогда не выполняете работу в ветке поставщика, она содержит чистую историю кода поставщика.В названии "поставщик" нет ничего волшебного, это просто моя терминология, заимствованная из CVS.

Теперь мы поместим туда последнюю версию от производителя.

find . -not -path *.git* -and -not -path . -delete  # delete everything but git files
dump the 3rd party code into the project directory  # I'll leave that to you
git add .                              # add all the files, changes and deletions
git commit -a -m 'Vendor update version X.YY'   # commit it
git tag 'Vendor X.YY'                  # optional, might come in handy later

Сначала мы удаляем все, чтобы git мог видеть то, что удалил поставщик.способность git видеть удаления и угадывать перемещенные файлы делает эту процедуру намного проще, чем в Subversion.

Теперь вы возвращаетесь к своей разработке (я предполагаю, что master) и объединяете изменения поставщика.

git checkout master
git merge vendor

Разбирайтесь с любыми конфликтами как обычно.Теперь ваша исправленная версия обновлена у поставщика.Работайте с мастером в обычном режиме.

В следующий раз, когда появится новая версия от поставщика, повторите процедуру.Это использует преимущества превосходного слияния git, чтобы поддерживать ваши исправления в курсе изменений поставщика.

Другие советы

Здесь немного от адвоката дьявола, но действительно ли вам это нужно как репозиторий git?

Возможно, вместо этого настройте скрипт, который загружает и обновляет весь сторонний код в ваших проектах?Я думаю, что в конечном итоге вы столкнетесь со сторонними зависимостями, которые сложно импортировать.Например, в python я использую buildout для установки всех своих зависимостей.Таким образом, я могу легко комбинировать git, mercurial, subversion, zip-файлы, пакеты и т.д.

Однако должно сработать что-то вроде следующего:

$ cd repo
$ find . -not -path *.git* -and -not -path . -delete
$ unzip /tmp/thirdparty.zip
$ git add .
$ git commit -a 'Updated version'

То есть удалить все файлы за исключением тот самый .git каталог и .gitignore, и т.д.Это сделано для того, чтобы обработать случай с удаленными файлами в стороннем проекте.Затем распакуйте обновленный zip-файл в каталог.Добавляйте любые новые файлы в репозиторий.Совершить.

Надеюсь, это поможет!:)

Я предпочитаю создавать репозиторий git, периодически обновлять его (git commit -a -m 'Update') и просто связывать его в моих проектах (как каталог (ln -s, junction и т.д.) Или как общую библиотеку).Для файлов, которые вам не нужны, используйте .gitignore .

Я новичок в Git, но разве что-то вроде Piston не было бы лучшим решением? http://piston.rubyforge.org/

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top