Как импортировать стороннюю библиотеку в git?
Я смотрю, как импортировать какой-то код третьей части в репозиторий git. Сторонним кодом является "stm32f10x_stdperiph_lib", предоставленный ST.
Библиотека на самом деле представляет собой набор обычных c-файлов (и заголовочных файлов), которые вы просто включаете и собираете, когда делаете проект STM32.
Проблема в том, что они предоставляют его только в виде zip-файла и выпускают новые версии, поэтому я хотел бы добавить больше контроля.
Поэтому я планирую написать небольшой скрипт, который делает это:
- расстегнуть молнию
- возьмите несколько файлов (мне не нужны все файлы в zip-файле)
- импортировать выбранные файлы в репозиторий 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/