23 arch-linux git
有一天,我尝试安装opencv-git从AUR与makepkg上Arch Linux的。当然,正如名称所示,它是从git存储库中提取的。这会拉出 1Gb。我读有关使浅克隆用git。当我查看PKGBUILD文件时,使用grep git PKGBUILD,我看到:
pkgname="opencv-git"
makedepends=('git' 'cmake' 'python2-numpy' 'mesa' 'eigen2')
provides=("${pkgname%-git}")
conflicts=("${pkgname%-git}")
source=("${pkgname%-git}::git+http://github.com/Itseez/opencv.git"
cd "${srcdir}/${pkgname%-git}"
git describe --long | sed -r 's/([^-]*-g)/r\1/;s/-/./g'
cd "${srcdir}/${pkgname%-git}"
cd "${srcdir}/${pkgname%-git}"
cd "${srcdir}/${pkgname%-git}"
install -Dm644 "LICENSE" "${pkgdir}/usr/share/licenses/${pkgname%-git}/LICENSE"
Run Code Online (Sandbox Code Playgroud)
有没有办法修改配方或makepkg命令以仅提取浅克隆(源的最新版本是我想要的)而不是完整的存储库以节省空间和带宽?阅读man 5 PKGBUILD并没有提供我正在寻找的洞察力。还快速浏览了makepkg和pacman 联机帮助页- 似乎无法找到如何做到这一点。
Str*_*Bad 15
这可以通过使用自定义dlagent来完成。我不太了解 Arch 包装或 dlagents 是如何工作的,所以我只有一个 hack 答案,但它可以完成工作。
这个想法是修改 PKGBUILD 以使用自定义下载代理。我修改了源码
"${pkgname%-git}::git+http://github.com/Itseez/opencv.git"
Run Code Online (Sandbox Code Playgroud)
进入
"${pkgname%-git}::mygit://opencv.git"
Run Code Online (Sandbox Code Playgroud)
然后定义了一个新的 dlagent 调用mygit,它通过
makepkg DLAGENTS='mygit::/usr/bin/git clone --depth 1 http://github.com/Itseez/opencv.git'
Run Code Online (Sandbox Code Playgroud)
另请注意,正在克隆的存储库已硬编码到命令中。同样,这可能可以避免。最后,下载位置不是 PKGBUILD 所期望的。为了解决这个问题,我只需在下载后移动存储库。我通过添加来做到这一点
mv "${srcdir}/../mygit:/opencv.git" "${srcdir}/../${pkgname%-git}"
Run Code Online (Sandbox Code Playgroud)
在pkgver函数的开头。
我认为更清洁的解决方案是弄清楚git+httpdlagent 正在做什么并暂时对其进行重新调整。这应该避免解决方案的所有黑客方面。
ami*_*zed 12
我个人修改了 makepkg 脚本,它就像一个魅力:
# vim `which makepkg` +/clone
...
541 msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
542 if ! git clone --mirror "$url" "$dir"; then
543 error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
...
Run Code Online (Sandbox Code Playgroud)
将“--mirror --single-branch --depth 1”附加到“git clone”命令:
541 msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
542 if ! git clone --mirror --single-branch --depth 1 "$url" "$dir"; then
543 error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
Run Code Online (Sandbox Code Playgroud)
这是一个差异视图:
--- makepkg ...
+++ makepkg-patched ...
@@ -539,7 +539,7 @@
if [[ ! -d "$dir" ]] || dir_is_empty "$dir" ; then
msg2 "$(gettext "Cloning %s %s repo...")" "${repo}" "git"
- if ! git clone --mirror "$url" "$dir"; then
+ if ! git clone --mirror --single-branch --depth 1 "$url" "$dir"; then
error "$(gettext "Failure while downloading %s %s repo")" "${repo}" "git"
plain "$(gettext "Aborting...")"
exit 1
Run Code Online (Sandbox Code Playgroud)
根据https://bugs.archlinux.org/task/23065(归功于 jasonwryan),向 AUR PKGBUILD 添加浅层克隆功能是一个愿望清单项目,于 2011 年 3 月 5 日星期六关闭,评论如下:
关闭原因:不会执行
这表明除非有人提交补丁,否则它不会发生。
正如我在评论中向发帖人建议的那样,他几乎可以肯定地将这个过程分成两个步骤来完成他正在尝试做的事情:
| 归档时间: |
|
| 查看次数: |
15079 次 |
| 最近记录: |