Innego dnia próbowałem zainstalować opencv-git
z AUR z makepkg
Arch Linux. Oczywiście pobiera się z repozytorium git, jak wskazuje nazwa. To pociąga 1 Gb. Czytam o dokonanie płytkie klon z git
. Kiedy patrzę na PKGBUILD
plik, używając grep git PKGBUILD
, widzę:
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"
Czy istnieje sposób na zmodyfikowanie przepisu lub makepkg
polecenia, aby pobrać tylko płytki klon (potrzebuję najnowszej wersji źródła), a nie pełne repozytorium, aby zaoszczędzić miejsce i przepustowość? Czytanie man 5 PKGBUILD
nie zapewnia wglądu, którego szukam. Szybko przejrzałem także stronymakepkg
i - nie wydaje się, aby znaleźć jak to zrobić.pacman
arch-linux
git
HalosGhost
źródło
źródło
git+http://github.com/Itseez/opencv.git
w recepturze AUR lokalną nazwą ścieżki. Próbowałeś tego? Jeśli ten system kompilacji zmusi cię do sklonowania repozytoriów, nawet jeśli masz je dostępne lokalnie, to jest to cholernie szalone.Odpowiedzi:
Można to zrobić za pomocą niestandardowego dlagenta . Naprawdę nie rozumiem pakowania łuku ani tego, jak działają dlagenty, więc mam tylko odpowiedź hacka, ale wykonuje to zadanie.
Chodzi o to, aby zmodyfikować PKGBUILD, aby używał niestandardowego agenta pobierania. Zmodyfikowałem źródło
w
a następnie zdefiniował nowy dlagent zwany
mygit
płytkim klonem. Zrobiłem to, dodając doDLAGENTS
tablicy/etc/makepkg.conf
następujący tag:Domyślam się, że prawdopodobnie mógłbyś zdefiniować tego agenta pobierania gdzie indziej, ale nie wiem jak. Zauważ również, że klonowane repozytorium jest na stałe zakodowane w poleceniu. Znów można tego prawdopodobnie uniknąć. Wreszcie lokalizacja pobierania nie jest tym, czego oczekuje PKGBUILD. Aby obejść ten problem, po prostu przenoszę repozytorium po pobraniu. Robię to, dodając
na początku
pkgver
funkcji.Myślę, że
git+http
lepszym rozwiązaniem byłoby dowiedzieć się, co robi dlagent, i tymczasowo to zmienić. Powinno to uniknąć wszystkich aspektów hackowania rozwiązania.źródło
Osobiście zmodyfikowałem skrypt makepkg i działa on jak urok:
Dołączanie „--mirror --single-branch --depth 1” do polecenia „git clone”:
Oto widok różnic:
źródło
branch
,tag
,commit
itd.)./usr/share/makepkg/source/git.sh
należyWedług https://bugs.archlinux.org/task/23065 (podziękowania dla jasonwryan) dodanie funkcji płytkiego klonowania do AUR PKGBUILD było pozycją na liście życzeń, która została zamknięta w sobotę, 5 marca 2011 r. Z komentarzem:
To sugeruje, że tak się nie stanie, chyba że ktoś prześle łatkę.
Jak zasugerowałem w plakacie w komentarzach, to, co próbuje zrobić, prawie na pewno można osiągnąć, dzieląc proces na dwa etapy:
źródło
makepkg
(pkgver narzeka lekko, ale nadal) i też działa!Jeśli utworzysz płytkie lustro repozytorium w tym samym katalogu co
PKGBUILD
, możesz użyć,makepkg --holdver
aby uniemożliwićmakepkg
aktualizację reszty repozytorium. Eliminuje to konieczność modyfikowaniaPKGBUILD
,makepkg.conf
albomakepkg
sam; klonowanie / aktualizowanie repozytorium należy jednak wykonać ręcznie.Jako przykład z
cling-git
, który normalnie sklonowałby całośćllvm
iclang
:Ze stron podręcznika makepkg:
Zauważ, że makepkg nadal będzie klonował repozytorium, które nie jest jeszcze obecne, co oznacza, że mogłem pominąć ręczne klonowanie
cling
repozytorium w powyższym przykładzie, ponieważ nie jest on tak duży.źródło
Jeśli nie chcesz modyfikować skryptów makepkg.
jak opisano tutaj , punkt
DEVELSRCDIR
w/etc/yaourtrc
lub~/.yaourtrc
plik do jakiegoś uporczywego folderu. Następnie wszystkie operacje pobierania repozytorium (git / svn / ...) będą miały miejsce w tym folderze. Po sklonowaniu repozytorium będzie wykonywane tylko szybkie pobieranie z najnowszymi wersjami zamiast pełnego klonowania za każdym razem.źródło