1

gbp 的手册说明如下:

首先,创建一个空存储库:

mkdir package-0.1
cd package-0.1
git init

然后,您导入上游源,从上游分支分支分支并添加 Debian 文件(例如,通过 dh_make):

gbp import-orig -u 0.1 ../package-0.1.tar.gz
dh_make

就是这样,你完成了。

但这失败了 azip因为没有.orig.tar.gz。调用dh_make --createorig会创建一个.orig.tar.gz,但这会包括.git/子目录,因此它是无效的。

pristine-tar这种方式也缺少分支,并且不pristine-tar commit知道如何处理zip文件。

zip如果上游仅提供-file ,我如何启动 Debian 软件包?这种情况下怎么处理pristine-tar

4

1 回答 1

3

(这里还有点未经测试)

为了读者的利益,这是我想出的。我不确定这是 BCP,但它有效。在 Linux 上,也可能在 CygWin 上。

我目前从头开始创建 Debian 存储库的工作流程gbp是:

进口上游

上游通常是一个.orig.tar.gz,但以下ZIP也适用。对于所有支持的存档类型,请参阅man gbp-import-orig

设置一些变量

使用此变量,您可以在配方的以下行中使用复制和粘贴。

PACKAGENAME=mypackagename
UPSTREAMVERSION=0.1.2.3-up4
UPSTREAMARCHIVE=../upstreampackage-$UPSTREAMVERSION.zip

# Following should start/end with a number and only contain
# numbers, lowercase letters and single dots (.)
MYDIST=stable
MYBASEVERSION=0example.com1

TEMPLATEGIT=https://github.com/hilbig/templates.git
TEMPLATEBRANCH=gbp

创建 git 存储库

git init $PACKAGENAME
cd $PACKAGENAME

初始化回购

git commit --allow-empty -m empty
git branch upstream
git fetch $TEMPLATEGIT $TEMPLATEBRANCH
git merge FETCH_HEAD

上游首次导入

echo $PACKAGENAME | fakeroot gbp import-orig --upstream-version=$UPSTREAMVERSION $UPSTREAMARCHIVE

创造debian/

dh_make --indep -a -p ${PACKAGENAME}_$UPSTREAMVERSION
git add debian
git commit -m "dh_make --indep -a -p  ${PACKAGENAME}_$UPSTREAMVERSION"

编辑文件debian/

现在debian/根据您的需要更改所有文件并删除不需要的文件(提示:)rm -f *.ex。抱歉,我发现无法正确地自动执行此操作。不要更改文件之外的文件,debian/因为稍后会使用被子/补丁队列(AKA debian/patches/)处理这些文件。请务必编辑debian/changelog

  • unstable将(在第一行)更改为 的值$MYDIST。(如果你不这样做,它不会受到伤害。)
  • 将文本更改为* Initial release (Closes: #nnnn) ...更好的内容,例如debianized upstream XXX into package YYY.
  • 如果最后一行有误,您可能忘记设置常用git config设置(保存在 中~/.gitconfig)。现在就做: git config --global user.name "Your Name" git config --global user.email you@example.com

如果一切都设置在 中debian/,则提交它:

git add -A debian
# Use "git status" to see, that only file in "debian/" are changed
git commit -m 'edited directory debian/'

设置gbp dch

以下是垃圾。我仍然试图弄清楚如何正确地做到这一点,因为所需的标签不会像我认为的那样自动创建。

如果您想使用gbp dch --auto(推荐)这需要正确设置git tag. 由于您可以更改这些标签的格式,debian/gbp.conf因此建议使用gbp dch --since(如果您愿意,您可以手动创建它,但我们想要自动化,对吗?)创建第一个标签,如下所示:

gbp dch --commit -D "$MYRELEASE" -N "`git describe --tags --abbrev=0 upstream | sort | head -1 | sed s/^[^0-9]*//`-$MYBASEVERSION" --since HEAD^
vim debian/changelog
git commit --amend debian/changelog

将其推送到您的 git 服务器

推送到您的git服务器时,请务必始终包含标签:

git push origin --tags

这些(未注释的)标签用于各种参考/跟踪目的。

解释

  • 使用来自repo的分支git fetch填充,因此可以轻松合并。这应该使用您喜欢的设置创建,包括启用。FETCH_HEAD$TEMPLATEBRANCHgit$TEMPLATEGITdebian/gbp.confpristine-tar

  • echo $PACKAGENAME | fakeroot gbp ...做两件事:

    • gbp将询问包名称。不幸的是,没有命令行选项。因此,它被echo编入其中以便能够像批处理一样运行它。
    • fakeroot修复了一个故障,其中选项pristine-tar(如果设置在命令行中可能会丢失gbp.conf)将.tar使用您的用户而不是root:root.
  • dh_make需要-a填充debian/目录,因为已经有一个只包含gbp.conf.

  • 如果debian/gbp.conf第一次调用时没有gbp,则需要将选项添加pristine-targbp import-orig. 没有它看起来它可以工作,但不会有可用.orig.tar.gz的(也可以命名为.bz2or .xz)。 gbp是唯一识别.zip-files 的工具,因此如果您忘记了这一点,您会遇到一些麻烦。不幸的是,选项的名称在gbp--git-pristine-tar--pristine-tar)的版本之间有所不同,因此最好将其放在gbp.conf.

笔记:

  • 将来会有gbp init改进这些步骤,但是我目前的变体gbp不包括这个。

  • 文件debian/gbp.conf应如下所示。上面它应该通过git merge FETCH_HEADfrom 分支合并$TEMPLATEBRANCHrepo $TEMPLATEGIT。也许git为此创建您自己的模板存储库,另请参阅https://github.com/hilbix/templates/tree/gbp

debian/gbp.conf

[DEFAULT]
pristine-tar = True
debian-branch = master
debian-tag = v%(version)s

[dch]
full = True
git-author = True

[pq]
patch-num-format = PATCH-%04d-

[import-orig]
merge-mode = replace

遵循通常的工作流程

之后,您可以按照通常的gbp工作流程进行操作,因此可以使用网络上有关如何更改 Debian 软件包的所有其他典型配方。

这是,我是怎么做的(有点)。

构建包

简单的包很容易。然而,有些包需要的远不止这些,比如编译为 64 位,带有源代码,部分甚至用于 arch all。克隆所有内容后也.orig.tar.gz丢失了。因此,您需要大量的选项来正确处理所有这些。

以下假设您要为 Intel 平台创建并(可选)为旧系统提供 32 位:

gbp buildpackage --dist="$MYDIST" --git-builder=sbuild --arch=amd64 --arch-all --source --force-orig-source
gbp buildpackage --dist="$MYDIST" --git-builder=sbuild --arch=i386

笔记:

  • --git-builder=sbuild是一个例子。如果你有麻烦,就把它放在一边。一些较新gbp的也重命名了此选​​项。

  • 构建经常会留下一些人工制品。使用(注意! 这将无条件地删除所有未提交的编辑,如果有的话!):

    git reset --hard

使用被子格式(patchqueues)改变上游

如果您需要更改 之外的内容debian/,这是要走的路:

gbp pq import
# now edit everything here
# if you are happy with it:
gbp pq export

您肯定想要使用补丁队列,因为您不想接触合并到master. 这样,当新的上游出现时,您不会意外丢失所有更改,而且新的上游将更干净地合并。

请注意,gbp buildpackage知道补丁队列。它们将自动应用,因此您无需自己应用它们。

创建新版本

在创建新版本之前,您可能想要清理git提交日志。这样做:

git rebase -i COMMIT

COMMIT代表您满意的第一个提交。 git rebase是一个非常强大的工具,但要注意:不要尝试在merge-Commits 之外进行 rebase,因为那样会被清除。如果您的git提交历史是干净的(请参阅 参考资料git log),请创建下一个debian/changelog

gbp dch --commit -D $MYDIST

离开去--commit自己做承诺,或者根据你的需要改变这个选项。

导入新的上游

设置新上游的参数,然后执行:

echo $PACKAGENAME | fakeroot gbp import-orig --upstream-version=$UPSTREAMVERSION $UPSTREAMARCHIVE

请注意,如果您的回购不干净,这将失败。(git status --porcelain不输出任何东西)。

然后为此创建一个新debian/changlog条目:

gbp dch --commit -D "$MYDIST" -N "`git describe --tags --abbrev=0 upstream | sort | head -1 | sed s/^[^0-9]*//)-$MYBASEVERSION"
于 2016-09-14T13:24:06.577 回答