며칠전에 설치하려고 했는데opencv-git
~에서우레아 소변 비율makepkg
아치 리눅스 에서 . 물론 그것은에서 비롯된 것입니다.자식저장소는 이름 그대로입니다. 이렇게 하면 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"
makepkg
공간과 대역폭을 절약하기 위해 전체 저장소가 아닌 얕은 복제본(최신 버전의 소스 코드가 내가 원하는 것)만 가져오도록 레시피나 명령을 수정하는 방법이 있습니까 ? 읽다man 5 PKGBUILD
내가 찾고 있던 통찰력을 제공하지 못했습니다. 또한 간략하게 살펴 makepkg
보고pacman
맨페이지- 이 작업을 수행하는 방법을 찾을 수 없는 것 같습니다.
답변1
이는 사용자 정의를 사용하여 수행할 수 있습니다.지연된 프록시. 저는 Arch 패키징이나 dlagents가 어떻게 작동하는지 잘 이해하지 못해서 해킹 답변만 가지고 있지만 작업이 완료되었습니다.
아이디어는 사용자 정의 다운로드 에이전트를 사용하도록 PKGBUILD를 수정하는 것입니다. 소스코드를 수정했습니다
"${pkgname%-git}::git+http://github.com/Itseez/opencv.git"
입력하다
"${pkgname%-git}::mygit://opencv.git"
mygit
그런 다음 다음을 통해 얕은 복제되는 새 dlagent가 정의됩니다 .
makepkg DLAGENTS='mygit::/usr/bin/git clone --depth 1 http://github.com/Itseez/opencv.git'
또한 복제되는 저장소는 명령에 하드코딩되어 있습니다. 다시 말하지만, 이는 피할 수 있습니다. 마지막으로 다운로드 위치는 PKGBUILD가 예상하는 위치가 아닙니다. 이 문제를 해결하기 위해 다운로드 후 저장소를 이동했습니다. 나는 이것을 추가하여 이것을했다
mv "${srcdir}/../mygit:/opencv.git" "${srcdir}/../${pkgname%-git}"
함수의 시작 부분에 pkgver
.
git+http
더 깨끗한 해결책은 dlagent가 수행하는 작업을 파악하고 일시적으로 다시 조정하는 것입니다 . 이렇게 하면 솔루션의 모든 해커 측면을 피할 수 있습니다.
답변2
나는 개인적으로 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"
...
명령 --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"
차이점 보기는 다음과 같습니다.
--- 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
답변3
~에 따르면https://bugs.archlinux.org/task/23065(Jasonwryan 제공) AUR PKGBUILD에 얕은 복제 기능을 추가하는 것은 2011년 3월 5일 토요일에 다음 설명과 함께 마감된 위시리스트 항목이었습니다.
폐쇄 이유: 시행되지 않습니다.
이는 누군가 패치를 제출하지 않는 한 이런 일이 발생하지 않음을 의미합니다.
내가 댓글에서 포스터에게 제안한 것처럼, 그가 하고 싶은 일은 프로세스를 두 단계로 나누면 거의 확실하게 달성될 수 있습니다.
- 얕은 복제를 사용하여 git 저장소 복제
- PKGBUILD 레시피를 실행하되 로컬 복제본을 가리키도록 합니다. 저는 Arch 사용자가 아니기 때문에 이것이 사실인지는 모르겠지만 사용자가 패키지를 빌드하기 위해 원격에서 저장소를 복제하도록 강제하는 패키지 빌드 시스템에 매우 놀랐습니다.
답변4
makepkg 스크립트를 수정하고 싶지 않은 경우.
설명대로여기, 을 가리키 DEVELSRCDIR
거나 영구 폴더를 /etc/yaourtrc
보관합니다 . ~/.yaourtrc
그러면 모든 저장소 체크아웃(git/svn/...)이 해당 폴더에서 발생합니다. 리포지토리를 복제한 후에는 매번 전체 복제가 아닌 최신 버전의 빠른 가져오기만 수행됩니다.