代码之家  ›  专栏  ›  技术社区  ›  Johan

如何将第三方lib导入git?

  •  12
  • Johan  · 技术社区  · 15 年前

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

    lib实际上是一组普通的c文件(和头文件),当您执行 STM32 项目。

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

    所以我的计划是写一个小脚本:

    1. 解压缩
    2. 抓取一些文件(我不需要压缩文件中的所有文件)
    3. 将所选文件导入Git存储库

    我的问题从最后一步开始,如何用新文件导入和覆盖旧文件(并删除不再包含的文件)?

    4 回复  |  直到 15 年前
        1
  •  24
  •   Ilario Engler    9 年前

    你要找的是一家“供应商分公司”。假设您想处理这段代码,并将供应商的更新与您自己的补丁合并在一起,下面是您如何简化这一过程的方法。

    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简单得多。

    现在,您切换回您的开发(我假设是master),并合并到供应商的更改中。

    git checkout master
    git merge vendor
    

    正常处理任何冲突。您的补丁版本现在是最新的供应商。像平常一样在大师身上工作。

    下次供应商提供新版本时,重复该过程。这充分利用了Git出色的合并功能,使您的补丁能够与供应商的更改保持最新。

        2
  •  1
  •   lemonad    15 年前

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

    希望有帮助!:)

        3
  •  0
  •   terminus    15 年前

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

        4
  •  -1
  •   drye    14 年前

    我刚接触Git,但像活塞这样的东西不是更好的解决方案吗? http://piston.rubyforge.org/