2011-02-15 6 views
1

PERFORCEでは、実際にclientspec(ワークスペース)を作成し、PERFORCEのコードを同期するときに "-p"オプションを使用することができます。この方法では、PERFORCEサーバのファイルテーブルには触れず、同期をより迅速に行います。基本的には、PERFORCEサーバからファイルをコピー&ペーストします。Perforce "p4 sync -p ... @ Changelist" in Git

Git側でこのような操作を試していますが、このPerforceコマンドの正確なレプリカを見つけることができませんでした。

これと同等の機能はありますか?

私はすでにgit cloneを使用していて、ファイルのローカルコピーを取得している場合は、git reset --hard <commit>が動作することを知っています。私たちの場合、ローカルマシンにgit cloneを決して実行しないと仮定します。

私はSCMリリースビルドを行っているので、Gitのソースコードは特定のSHAのビルドマシンに同期する必要がありますが、以前はgit cloneは実行されていませんでした。

ありがとうございました。

答えて

0

gitは、ファイルのバージョンのうち、の特定のものだけを取得するようには設計されていませんが、履歴です。アップデートが必要なときにgit cloneを最初に実行し、git fetchを実行することに実際に問題はありますか?更新は差分を使用するので、すべてのファイルをコピーするよりもはるかに高速になる可能性があり、gitリポジトリは現在の状態よりはるかに大きくないことがよくあります。

  1. git clone --depth 1は最近の歴史を取得しますが、それはまだすべての分岐をフェッチ:すべての履歴をコピーしないためにいくつかのアプローチがある、と述べた

    多くの一般的な操作がうまくいかないので、これは非常に有用なクローンでもありません。これはあなたのユースケースでは問題ではないかもしれません。

  2. コピーしたい状態のコミットを1つだけ設定して、一時的なブランチを設定することができます。その後、クライアントは、git init; git remote add -t <branch> origin <url>; git fetch origin/branch; git checkout origin/branch
  3. git archiveのように別々のファイルとしてダウンロードして抽出できるスナップショットを作成することができます。
+0

'gitのクローン--depth = 1 'は、私が最初に試験するものであるが、それはうまく動作しません。それは常にHEADを得るからです。これは現在のSCMマシンができることではありません。 – xbeta

+0

オプション#2は問題ありませんが、別の時間に毎日20のビルドについて話していますが、オプション3の異なる変更(SHA) – xbeta

+0

で、 'git archive'はどれくらい速く実行されましたか? 'git clone --depth = 1'は通常、最適な状況で私たちのソースをダウンロードするのに約2分かかります。 – xbeta

4

あなたは「アップロード・アーカイブ」のサービスを(のgit - デーモンのマンページを参照してください)できるようにするのgit - デーモンを設定することができ、これは、単にgitリポジトリから特定のスナップショットのアーカイブを要求するクライアントが可能になりますgit archive --remoteコマンドを使用して、データベース全体をダウンロードする必要はありません。

これは、リモートサーバからバージョン1.0.0で「cmstool」と呼ばれるいくつかのプロジェクトのスナップショットをダウンロードします:

git archive --format=tar \ 
      --prefix=cmstool-1.0.0/ \ 
      --remote=git://git/cmstool.git v1.0.0 | tar xf - 
+1

これは、gitサブモジュールを決して使用しないことに同意する場合には、これを行う最善の方法です。 git archiveを使って行われたチェックアウトでgit submodule init/updateを実行することはできません。gitメタデータが利用できないからです。 –

+0

ダウンロードした.gitmodulesファイルを見て、サブモジュールを再帰的に取得するために何かを書くことができると思いますか?実際には1ライナーであることからかなり複雑になります。 – araqnid