如何将第三方库导入git?

时间:2009-11-08 10:01:16

标签: git import organization

我正在研究如何将一些第三方代码导入到git存储库中。 第三方代码是ST提供的“stm32f10x_stdperiph_lib”。

lib实际上是一堆普通的c文件(和头文件),你只需要在进行STM32项目时包含和构建它们。

问题是他们只将其作为zip文件提供 他们确实发布了新版本,所以我想添加更多控件。

所以我的计划是编写一个执行此操作的小脚本:

  1. 解压缩
  2. 抓住一些文件(我不需要zip中的所有文件)
  3. 将所选文件导入git存储库
  4. 我的问题从最后一步开始,如何导入和覆盖旧文件(并删除不再包含的文件)?

4 个答案:

答案 0 :(得分:24)

您正在寻找的是“供应商分支”。假设您想要处理此代码并将供应商的更新与您自己的补丁合并,这就是您如何轻松实现这一目标。

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的优秀合并功能,可以使您的补丁与供应商的更新保持同步。

答案 1 :(得分:1)

这里有一些魔鬼的拥护者,但你真的需要它作为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文件解压缩到目录中。将任何新文件添加到存储库。提交。

希望有所帮助! :)

答案 2 :(得分:0)

我的首选是创建一个git存储库,定期更新它(git commit -a -m'Update')并将其链接到我的项目中(作为目录(ln -s,junction等)或作为共享图书馆)。对于您不需要的文件,请使用.gitignore。

答案 3 :(得分:-1)

我是Git的新手,但不会像Piston那样更好的解决方案吗? http://piston.rubyforge.org/