我正在研究如何将第三方代码导入git仓库。 第三方代码是由ST提供的"stm32f10x_stdperiph_lib"。
该库实际上是一堆普通的c文件(和头文件),当你做STM32项目时,你只需包含并构建它们。
问题在于他们只提供zip文件,并且会发布新版本,因此我想增加更多控制。
因此,我的计划是编写一个小脚本来执行以下操作:
- 解压缩
- 获取一些文件(我不需要zip中包含的所有文件)
- 将选定的文件导入到git仓库
我的问题始于最后一步,如何导入并覆盖旧文件以及删除不再包含的文件?
我正在研究如何将第三方代码导入git仓库。 第三方代码是由ST提供的"stm32f10x_stdperiph_lib"。
该库实际上是一堆普通的c文件(和头文件),当你做STM32项目时,你只需包含并构建它们。
问题在于他们只提供zip文件,并且会发布新版本,因此我想增加更多控制。
因此,我的计划是编写一个小脚本来执行以下操作:
我的问题始于最后一步,如何导入并覆盖旧文件以及删除不再包含的文件?
git checkout -b vendor # create a vendor branch and check it out
这只是一次性的事情。 "vendor"分支仅包含来自第三方供应商的更新,您永远不会在"vendor"分支上进行开发工作,它只包含供应商代码的干净历史记录。 "vendor"名称并没有什么特别之处,只是我从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可以看到供应商删除的内容。与Subversion相比,Git能够查看删除的文件并猜测移动的文件,使得这个过程更加简单。
现在您切换回开发分支(我假设是主分支),将供应商的更改合并到其中。
git checkout master
git merge vendor
像平常一样处理任何冲突。你的修补版本现在已经与供应商保持同步。像往常一样在主分支上工作。
下次供应商发布新版本时,重复这个过程。这利用了git出色的合并功能,使你的补丁保持与供应商更改的同步。
$ cd repo
$ find . -not -path *.git* -and -not -path . -delete
$ unzip /tmp/thirdparty.zip
$ git add .
$ git commit -a 'Updated version'
也就是说,删除除了.git
目录和.gitignore
之外的所有文件,以处理第三方项目中已删除文件的情况。然后将更新的压缩文件解压到目录中。将任何新文件添加到仓库中。提交更改。
希望对你有所帮助!:)
git clean
而是使用find
命令来删除旧版本? - Jakub Narębskigit clean
只会删除未跟踪的文件,在这种情况下,我们希望同时删除已跟踪和未跟踪的文件。也就是说,一个版本可能包含文件abc
,而下一个版本可能没有。除非删除所有文件,否则abc
将保留在项目中。我们希望将删除操作提交到版本控制系统。 - lemonad