git archive と cp -R の比較
-
22-08-2019 - |
質問
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でこれを使用し、それは私のためにうまく機能します。