2009-11-08 72 views
12

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

这个lib实际上是一系列正常的c文件(和头文件),当您执行STM32项目时,它只是包含和构建的。

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

所以我的计划是写一个小脚本,做这样的:

  1. 解压
  2. 抢某些文件(我不需要在压缩所有文件)
  3. 导入选择的文件到git仓库中

我的问题从最后一步开始,我如何导入和覆盖旧文件(新的文件不再包括在内)?

回答

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

这里有一些恶魔的倡导者,但是你真的需要它作为git存储库吗?

也许设置了一个脚本来下载和更新项目中的所有第三方代码?我的想法是,你最终会遇到难以导入的第三方依赖项。例如,在python中,我使用build来安装所有的依赖项。这样,我可以很容易地结合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文件解压缩到目录中。将任何新文件添加到存储库。承诺。

希望有帮助! :)

+0

由于它们在zip文件上有相同的名称(即使它们改变了内容),我感到只要下载解压并希望最好就是危险的。 – Johan 2009-11-08 10:51:09

+1

我明白了。不过,你不必从网上下载它。您可以从仅包含经过测试和认可的版本的内部服务器获取。 – lemonad 2009-11-08 10:57:09

+1

为什么不使用'git clean'而不是使用'find'来删除旧版本? – 2009-11-08 11:29:02

0

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

+0

这听起来像他的计划,但他正在寻求帮助,以便如何用新的替换旧文件,根据需要添加和删除。 另请注意,有些项目带有.gitignore。 – ysth 2009-11-08 18:36:43