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

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

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

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

Поэтому я планирую написать небольшой скрипт, который делает это:

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

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

4 ответа

Решение

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

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.

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

git checkout master
git merge vendor

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

В следующий раз, когда появится новая версия от поставщика, повторите процедуру. Это использует преимущества превосходного слияния 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-файл в каталог. Добавьте любые новые файлы в хранилище. Commit.

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

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

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

Другие вопросы по тегам