質問

capistrano/vlad スタイルのデプロイメント用にリモート サーバー上にキャッシュされたコピーとして git リポジトリのクローンがある場合、A) を実行する方が良いですか?

git archive --format=tar origin/master | (cd #{destination} && tar xf -)

または B)

cp -R cached-copy #{destination} && rm -Rf #{destination}/.git

明確にするために、リポジトリはすでにリモート サーバー上にあり、展開中に特定のバージョンを同じサーバー上のリリース ディレクトリにコピーしたいだけです。

役に立ちましたか?

解決

実際に言うと

rsync -avP /local/repo/* server:/remote/repo

これは問題がない限り機能します。 すべてのドットファイルをスキップする リポジトリ内だけでなく、 .git. 。スキップしたい場合は のみ .git それからあなたは必要になります -f オプションとマニュアルページ。

私は愛する rsync. 。うまく機能し、ほとんどの場合、scp を使用するのと同じように使用できます。

他のヒント

A)

あなたはおそらく、現在のHEAD内のオブジェクトではなく、どのくらいの歴史とに応じて、非常に大きくなる可能性が.gitディレクトリを転送するネットワークのオーバーヘッドを保存します。

あなたは今まであなたが本当のリポジトリにプッシュし、差分のみを変更した方がいいでしょうリモートエンド上の実際のgitリポジトリを持っていると思った場合。

どちらでもない!

これを行うより良い方法は次のとおりです。

  • git fetch あなたのキャッシュ
  • 現在のディレクトリにキャッシュのクローンを作成します ( --no-checkout オプションが有効になっています)
  • 必要なコミットをチェックアウトします。

ローカル クローンを実行する場合、Git はハードリンクを使用します。つまり、ファイルを変更するまでは、1,000 のデプロイメントが可能で、1 つのファイルに必要なスペースのみを (事実上) 使用できます。この方法では、アーカイブや rsync もはるかに高速になります。

また、誰かが既にあなたのために、コードを書かれていることがあります。

vigetlabのcapistrano_rsync_with_remote_cacheする

私はSubversionでこれを使用し、それは私のためにうまく機能します。

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top