2

私はラップトップとデスクトップを持っており、git を使用して perforce リポジトリに対して自分の作業を管理する方法を学ぼうとしています。私はデスクトップで git-p4 を正常に使用しており、ラップトップでも分離して正常に使用できます。ただし、できるようにしたいことの 1 つは、最初に変更を git と同期されている p4 ブランチにチェックインせずに、ラップトップからデスクトップに、またはその逆に変更を「プル」または「プッシュ」することです。

1) git-p4 clone を使用してデスクトップにリポジトリをセットアップします。それにいくつかの作業を行い、git にいくつかのコミットを行い、git-p4 にいくつかの送信を行います。すべてが期待どおりに機能していました。2)後で、両方のマシンで作業を行う準備として、ラップトップにレポをセットアップします。同様に、git-p4 を使用して、現在の p4 リポジトリのクローンを作成します (現在、(1) で git-p4 を実行した過去にいくつかのリビジョンがチェックされています)。

さて、私がやりたかったことは次のとおりです。1)デスクトップでいくつかの作業を行います。作業を git にコミットしますが、p4 にはコミットしません。2) ラップトップに移動し、デスクトップ リポジトリから git pull を実行します。3) ラップトップで作業を続け、定期的に git にコミットします。4) (オプション) ラップトップから p4 にコミットします 5) (オプション) デスクトップにプッシュ (またはラップトップからデスクトップにプル) し、デスクトップで作業を続けます。

基本的に、実際に p4 にチェックインすることなく、ラップトップとデスクトップの間で物をプッシュ/プルできるようにしたいと考えています。

これは可能なはずのことのように聞こえますか?もしそうなら、私が上で間違っている手順はありますか?

上記の (2) の「プル」を実行しようとすると、競合があるというエラー メッセージが表示されます。これらの競合は、p4 のブランチの最初のチェックアウトと、 2 番目の git-p4 リポジトリが作成された時刻。言い換えれば、それらは、2 番目のレポに含まれているコードに既に含まれているはずの変更のリプレイのように見えますが、何らかの理由でそうではありませんでした。

私は git にかなり慣れていないので、私の質問がばかげていたり、理解できなかったりしないことを願っています。ご協力いただきありがとうございます。

4

1 に答える 1

5

問題は、2つのリポジトリ(デスクトップとラップトップ)が、PERFORCEを介して相互に関連していることを認識していないことです。通常のgit-p4クローンはツリーの最上位から取得されるため、同じ変更に対して異なるコミット識別子が使用されることになります。これは、gitの「コミット」にその親に関する情報が含まれているためです。

最も簡単な解決策は、次のように機能することです。

  1. デスクトップにgit-p4クローンを作成します。
  2. git cloneデスクトップからラップトップまで。

これで、ラップトップとデスクトップの両方に、PERFORCEからの共通の履歴があります。(これは、コミットIDがgit log前とは異なっていたが、これら2つのステップの後は同じである必要があることを確認することで確認できます。)

この時点以降、競合することなく2つのリポジトリ間を移動できるようになります。

実際、相手の作業を検出して続行するのに十分賢いので、どちらの場所でも、git p4 syncまたはどちらの場所でも実行できます。私が正しく思い出せば、ラップトップは可能であればオリジンサーバー(デスクトップ)からも試行します。git p4 rebasegit-p4git pull

他の2つのアドバイス:

  • git pushこれら2つのリポジトリ間で使用しないでください。一般に、ベア以外のリポジトリ、つまり、ここで説明したような、動作中のツリーを持つリポジトリにプッシュすることは安全ではありません。このようなプッシュを行うと、インデックスは作業ツリーとは異なり、git status(したがってgit commitなど)のようなものは期待どおりに機能しません。
  • Perforceを別のブランチ(私は使用しますmaster)に保持し、トピックブランチですべての開発を行います。これらの枝だけに引っ張ってください。git p4 syncまたはを実行するときは、ブランチrebaseに戻ります。次に、下からトピックブランチにmasterマージします。masterこれにより、アップストリームの履歴を非常に明確に保ち、​​gitで行っている作業から分離することができます。
于 2009-10-26T00:12:25.870 に答える