3

サーバー上のリモートのベアリポジトリにプッシュする開発者がいます。この中央のベアリポジトリからgitp4を使用して、プッシュを自動化して毎晩PERFORCEを実行したいと考えています。しかし、作業ツリーの外部でgit p4 submitを実行できないように思われるため、問題が発生しています。

このようなものに対処するための推奨される方法は何ですか?

4

2 に答える 2

1

数分ごとに実行され、gitとp4の間で双方向の同期を行うスクリプトで同様のことを行います。ただし、git-p4は、チェックアウトされたgitツリーとp4リポジトリの両方がないと機能しません。全部であなたはあなたのソースの3つのバージョンで終わります:

  1. 裸のgitリポジトリ
  2. 'gitp4'のgitrepoをチェックアウトして、
  3. からp4に送信するp4チェックアウト。

開発者は、「dev」と呼ばれるブランチを使用して、ベアgitリポジトリ(gitoliteで保持)にプッシュします。次に、数分ごとに、次のようなスクリプトがあります。

  1. チェックアウトされたgitツリーを更新します(git pull --rebase)
  2. 最新のアップストリームp4の変更をp4/masterにプルダウンします(git p4 sync)
  3. p4の世界に対してgitの世界をリベースする(git rebase p4 / master)
  4. gitの変更をp4に送信します(git p4 submit)
  5. 'dev'ブランチを書き直します(git push origin + HEAD:dev)

ガッチャ

  1. 競合をマージします。これらは実際には非常にまれにしか発生しませんが、いくつかの問題を引き起こす可能性があります。

  2. 開発者が(1)と(5)の間で変更をプッシュした場合に変更が失われないように、全体にロックを追加する必要がありました。ロックは、プッシュを遅らせるためにフックスクリプトの1つで使用されるロックディレクトリを作成するだけです。

  3. RCSキーワード。'git p4'の新しいバージョンはRCSキーワードに対応するようになりましたが、元々は対応していなかったため、マージの競合が発生するため、全体がスタックすることがありました。

セットアップにはしばらく時間がかかりましたが、現在は18か月間、100人以上の開発者がインシデントをほとんど発生させていません。

于 2012-07-12T08:50:24.137 に答える
0

git-p4 を使用せず、perforce チェックアウトでもある git ツリーをチェックアウトし、そこからすべてをスクリプト化するのが最も簡単でしょうか? つまり、git pull を実行し、出力を解析して適切なファイルを編集し、新しいファイルを追加し、削除されたファイルを削除してから、perforce にコミットしますか?

于 2012-07-08T14:09:01.840 に答える