我正在研究如何将一些第三方代码导入到git存储库中。 第三方代码是ST提供的“stm32f10x_stdperiph_lib”。
lib实际上是一堆普通的c文件(和头文件),你只需要在进行STM32项目时包含和构建它们。
问题是他们只将其作为zip文件提供 他们确实发布了新版本,所以我想添加更多控件。
所以我的计划是编写一个执行此操作的小脚本:
我的问题从最后一步开始,如何导入和覆盖旧文件(并删除不再包含的文件)?
答案 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/