数日前に設置しようとしました。opencv-git
~から尿素尿の割合makepkg
Arch Linuxで。もちろんそれから来たものです。子リポジトリは名前の通りです。これにより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日土曜日に次の説明と一緒に終了したウィッシュリストエントリでした。
閉鎖理由:施行されません。
これは、誰かがパッチを送信しない限り、これが起こらないことを意味します。
私がコメントでポスターに提案したように、彼がやりたいことは、プロセスを2つの段階に分けることでほぼ確実に達成することができます。
- 浅いレプリケーションを使用したgitストレージのレプリケーション
- PKGBUILDレシピを実行しますが、ローカルレプリカを指すようにします。私はArchユーザーではないので、これが本当かどうかはわかりませんが、ユーザーがパッケージをビルドするためにリモートでリポジトリを複製するように強制するパッケージビルドシステムに非常に驚きました。
答え4
makepkgスクリプトを変更したくない場合。
説明どおりここ、を指すかDEVELSRCDIR
、永続フォルダを/etc/yaourtrc
保存します。~/.yaourtrc
これにより、すべてのストレージチェックアウト(git / svn / ...)がそのフォルダに表示されます。リポジトリを複製した後は、毎回完全複製ではなく、最新バージョンのクイックインポートのみが実行されます。