Подтвердить что ты не робот

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

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

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

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

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

  • unzip
  • захватить некоторые файлы (мне не нужны все файлы в zip файле)
  • импортировать выбранные файлы в репозиторий git

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

4b9b3361

Ответ 1

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

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 превосходного слияния, чтобы обновлять ваши исправления с изменениями поставщика.

Ответ 2

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

Возможно, настроен script, который загружает и обновляет весь сторонний код в ваших проектах? Я думаю, что вы в конечном итоге столкнетесь с зависимостями третьей стороны, которые сложно импортировать. Например, с помощью python я использую buildout для установки всех моих зависимостей. Таким образом, я могу легко комбинировать git, меркурийные, подрывные, 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.

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

Ответ 3

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