Suatu hari saya mencoba menginstal opencv-git
dari AUR dengan makepkg
di Arch Linux. Tentu saja itu menarik dari repositori git seperti namanya. Ini menarik 1Gb. Saya membaca tentang membuat klon dangkal dengan git
. Ketika saya melihat PKGBUILD
file, menggunakan grep git PKGBUILD
, saya melihat:
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"
Apakah ada cara untuk mengubah resep atau makepkg
perintah untuk menarik hanya klon dangkal (versi terbaru dari sumber adalah apa yang saya inginkan) dan bukan repositori lengkap untuk menghemat ruang dan bandwidth? Membaca man 5 PKGBUILD
tidak memberikan wawasan yang saya cari. Juga melihat dengan cepat melalui makepkg
dan pacman
halaman manual - tampaknya tidak dapat menemukan cara untuk melakukan itu.
arch-linux
git
HalosGhost
sumber
sumber
git+http://github.com/Itseez/opencv.git
dalam resep AUR dengan nama path lokal. Sudahkah Anda mencobanya? Jika sistem build ini memaksa Anda untuk mengkloning repo walaupun Anda memilikinya tersedia secara lokal, maka itu sangat gila.Jawaban:
Ini dapat dilakukan dengan menggunakan dlagent khusus . Saya tidak begitu mengerti kemasan Arch atau bagaimana dlagents bekerja, jadi saya hanya punya jawaban hack, tetapi itu menyelesaikan pekerjaan.
Idenya adalah untuk memodifikasi PKGBUILD untuk menggunakan agen pengunduhan khusus. Saya memodifikasi sumbernya
ke
dan kemudian mendefinisikan sebuah agen baru yang disebut
mygit
yang melakukan klon dangkal. Saya melakukan ini dengan menambahkan keDLAGENTS
array di/etc/makepkg.conf
dlagent berikut:Dugaan saya adalah Anda mungkin dapat mendefinisikan agen unduhan ini di tempat lain, tetapi saya tidak tahu caranya. Perhatikan juga bahwa repositori yang sedang dikloning sulit dikodekan ke dalam perintah. Sekali lagi, ini mungkin bisa dihindari. Akhirnya, lokasi pengunduhan tidak seperti yang diharapkan PKGBUILD. Untuk mengatasinya, saya cukup memindahkan repositori setelah mengunduhnya. Saya melakukan ini dengan menambahkan
di awal
pkgver
fungsi.Saya pikir solusi yang lebih bersih adalah untuk mencari tahu apa yang
git+http
sedang dilakukan dlagent dan mendefinisikan kembali sementara. Ini harus menghindari semua aspek retas dari solusi.sumber
Secara pribadi saya memodifikasi skrip makepkg dan itu berfungsi seperti pesona:
Menambahkan "--mirror --single-branch --depth 1" ke perintah "git clone":
Ini adalah tampilan diff:
sumber
branch
,tag
,commit
dll)./usr/share/makepkg/source/git.sh
harus ditambal bukanMenurut https://bugs.archlinux.org/task/23065 (kredit ke jasonwryan), menambahkan fungsionalitas kloning dangkal ke AUR PKGBUILD adalah item daftar harapan yang ditutup pada Sabtu, 05 Maret 2011 dengan komentar:
Ini menunjukkan bahwa itu tidak akan terjadi kecuali seseorang mengirimkan tambalan.
Seperti yang saya sarankan kepada poster dalam komentar, apa yang dia coba lakukan hampir pasti dapat dicapai dengan memecah proses menjadi dua langkah:
sumber
makepkg
(pkgver mengeluh sedikit tetapi masih) dan bekerja juga!Jika Anda membuat mirror yang dangkal dari repositori di direktori yang sama dengan
PKGBUILD
, Anda bisa menggunakanmakepkg --holdver
untuk mencegahmakepkg
dari memperbarui sisa repositori. Hal ini menghilangkan kebutuhan untuk memodifikasiPKGBUILD
,makepkg.conf
ataumakepkg
sendiri; Namun, kloning / memperbarui repositori perlu dilakukan secara manual.Sebagai contoh dengan
cling-git
, yang biasanya akan mengkloning keseluruhanllvm
danclang
:Dari halaman manual makepkg:
Perhatikan bahwa makepkg masih akan mengkloning repo yang belum ada, yang berarti saya bisa menghapus secara manual kloning
cling
repositori dalam contoh di atas karena itu tidak begitu besar.sumber
Jika Anda tidak ingin memodifikasi skrip makepkg.
seperti diuraikan di sini , titik
DEVELSRCDIR
di/etc/yaourtrc
atau~/.yaourtrc
berkas untuk beberapa folder persisten. Maka semua pemeriksaan repositori (git / svn / ...) akan terjadi di folder ini. Setelah repositori dikloning, maka hanya pengambilan cepat dengan revisi terbaru yang akan dilakukan alih-alih klon penuh setiap kali.sumber