Как импортировать стороннюю библиотеку в git?
Я смотрю, как импортировать код третьей части в репозиторий git.
Третий сторонний код - это "stm32f10x_stdperiph_lib", который предоставляется ST.
lib на самом деле представляет собой набор обычных c файлов (и заголовочных файлов), которые вы просто включаете и создаете, когда вы выполняете STM32.
Проблема в том, что они предоставляют только zip файл и
они выпускают новые версии, поэтому я хотел бы добавить больше элементов управления.
Итак, мой план состоит в том, чтобы написать немного script, который делает это:
- unzip
- захватить некоторые файлы (мне не нужны все файлы в zip файле)
- импортировать выбранные файлы в репозиторий git
Мои проблемы начинаются с последнего шага, как мне импортировать и перезаписывать старые файлы с новыми (и удалять файлы, которые больше не включены)?
Ответы
Ответ 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.
Ответ 4
Я новичок в Git, но не лучше ли что-то вроде Piston? http://piston.rubyforge.org/