gitソースから浅いレプリカのみを取得するようにPKGBUILDを変更する方法は?

gitソースから浅いレプリカのみを取得するようにPKGBUILDを変更する方法は?

数日前に設置しようとしました。opencv-git~から尿素尿の割合makepkgArch 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つの段階に分けることでほぼ確実に達成することができます。

  1. 浅いレプリケーションを使用したgitストレージのレプリケーション
  2. PKGBUILDレシピを実行しますが、ローカルレプリカを指すようにします。私はArchユーザーではないので、これが本当かどうかはわかりませんが、ユーザーがパッケージをビルドするためにリモートでリポジトリを複製するように強制するパッケージビルドシステムに非常に驚きました。

答え4

makepkgスクリプトを変更したくない場合。

説明どおりここ、を指すかDEVELSRCDIR、永続フォルダを/etc/yaourtrc保存します。~/.yaourtrcこれにより、すべてのストレージチェックアウト(git / svn / ...)がそのフォルダに表示されます。リポジトリを複製した後は、毎回完全複製ではなく、最新バージョンのクイックインポートのみが実行されます。

関連情報