30

展開スクリプトをセットアップ中です。基本的なプロセスは次のとおりです。

  1. サーバー上の裸のリポジトリに変更をプッシュする
  2. 次に、新しいタグに基づいて、リリース用の新しいフォルダーが作成されます。
  3. git アーカイブを使用して、ファイルをリリース ディレクトリに移動します。
  4. いくつかの移行スクリプトを実行し、ライブにします (すべてが成功した場合)。

問題は、リポジトリにサブモジュールが含まれていることです。サブモジュールはアーカイブに入れられないため、リリース ディレクトリに入れられません。

git-archive-allを見たことがありますが、ベアリポジトリでは機能しません。

無理なら検討中ですが、

  1. リポジトリをむき出しにせず、作業コピーを更新すると、git-archive-all を使用できるようになります。または
  2. サーバー上にサブモジュールの2番目の裸のリポジトリがあり、そこからアーカイブを取得できます(正しいリビジョンを取得していることを確認するには、これを調べる必要があります)。
4

6 に答える 6

6

この python パッケージhttps://github.com/Kentzo/git-archive-allを使用します。を使用してインストールできます

pip install git-archive-all

OSXでは、次を使用してインストールすることもできますbrew install git-archive-all

于 2016-11-18T18:09:48.110 に答える
3

サブモジュールがサーバーからアクセス可能なレポにある場合は、受信後フックが必要です。

  • git submodule update --initサブモジュール ( )を含む、完全な非ベア レポ (つまり、元のベア レポの横にある 2 つ目のレポ) を更新します。
  • git archiveその2番目のレポから(ベアでないレポはサブモジュールの正しいバージョンを参照するため、正しいバージョンを確実に取得できます)
    ベアでないレポには親レポそのサブモジュールが含まgit archive-allれるため、サブディレクトリとすべて.gitをアーカイブします。

サーバーからサブモジュールにアクセスできない場合は、次のことを意味します。

  • サーバー上の独自のレポにプッシュする必要があります
  • サーバーにプッシュされたサブモジュールを親リポジトリが取得できるようにするには、親リポジトリのサブモジュールを相対パスで参照する必要があります。
于 2011-03-30T06:29:30.420 に答える
1

これでうまくいくはずです:https ://github.com/meitar/git-archive-all.sh/wiki

于 2012-08-23T15:10:00.080 に答える
1

ここにいくつかのライナーがあります:

prefix=$(basename "$(pwd -P)")
{
  git ls-files
  git submodule foreach --recursive --quiet \
                'git ls-files --with-tree="$sha1" | sed "s#^#$path/#"'
} | sed "s#^#$prefix/#" | xargs tar -c -C.. -f "$prefix.tar.xz" --
于 2012-10-15T20:51:05.283 に答える
-1

通常のアーカイブ コマンドの後に次を実行します。
git submodule foreach 'cd REPO_ROOT/$path && git archive HEAD | tar -x -C TARGET_ROOT/$path'

ここで REPO_ROOT はレポが立っている場所で、TARGET_ROOT はアーカイブされたバージョンを置く場所です。(最初の呼び出しの展開されたバージョンがある TARGET_ROOT フォルダーがあると仮定しますgit archive。最終的な zip/tar が必要な場合は、最終フォルダーを tar/zip できます)

git submodule foreach変数を提供し$pathます。詳細についてはgit help submodule、foreach セクションを参照してください。

于 2013-05-30T18:47:27.737 に答える