Git和包装:保持包装文件不受影响的常见模式?

时间:2011-09-13 23:32:51

标签: python git debian packaging setuptools

对于我开发的最后一个python项目,我使用 git 作为版本控制系统。现在是开发周期的时间,我应该开始向beta测试人员发送软件包(在我的例子中,他们将是.deb软件包)。

为了构建我的包,我需要一些额外的文件(copyrighticon.xpmsetup.pysetup.cfgstdeb.cfg等。 。)但是我想将它们与程序源分开,因为源可能用于为其他平台准备包,并且将这些特定于debian的文件延迟是没有意义的周围。

我的问题:是否有标准的方式/最佳做法?在我的谷歌漫游中,我在here on SO上偶然发现了几次(包括git-buildpackage)套件,但我不确定这是我正在寻找的,因为似乎包装商从上游存储库下载tar.gz。

我认为实现我想要的一种可能的方法是在git存储库上有一个分支,我保存我的包装文件,但是这个分支也应该能够“看到”主文件上的文件没有我的分支,每次都手动将主服务器合并到包装分支。但是:

  • 我不知道这是不是一个好主意/它应该如何完成
  • 虽然我怀疑它可能涉及一些git symbolic-ref魔法,但我不知道如何做我想象的事情

任何帮助表示感谢,提前感谢您的时间!

3 个答案:

答案 0 :(得分:4)

为什么要将这些内容保留在源代码管理之外?它们是生成最终构建输出的输入的一部分!您肯定不想忘记它们,并且您可能希望在继续开发应用程序时跟踪它们随时间的变化。

您最想要做的是为所有这些特定于发布的文件创建一个子目录,比如./debian./packaging/debian并在那里提交它们;你可以有一个makefile或者一些这样的东西,当你在那个目录中运行它时,复制它们需要的所有文件来创建包,你就会很好!

答案 1 :(得分:2)

最后我选择了一个带有makefile的分支,这样我的包装程序现在看起来像:

git checkout debian-packaging
make get-source
make deb
<copy-my-package-out-of-the-way-here>
make reset

如果你有兴趣,你可以找到完整的makefile here(免责声明:这是我的第一个makefile,所以它很可能不是你见过的最好的makefile)。

简而言之,“技巧”的核心在get-source指令中,它是使用 git archive 命令,它接受名称作为参数的分支,并使用该分支的源生成tarball。这是片段:

# Fetch the source code from desired branch
get-source:
    git archive $(SOURCE_BRANCH) -o $(SOURCE_BRANCH).tar
    tar xf $(SOURCE_BRANCH).tar
    rm $(SOURCE_BRANCH).tar
    @echo "The source code has been fetched."

希望这也有助于其他人!

答案 2 :(得分:0)

您可以将额外的文件放在一个单独的仓库中(以便它们也被版本化)并使用submodules在源代码仓库中使用它。