ドキュメント

§Gitの操作

このガイドは、新しいコントリビューターがPlayを使い始めるのに役立つように設計されています。ここに記載されていることの一部は、私たちが良いと考えており、Playへの貢献を容易にするための慣例ですが、決して義務的なものではありません。あなたにとって最適な方法を使用してください。

§Gitのリモート

公式のPlayリポジトリのリモートをoriginと呼び、あなたのフォークのリモートをあなたのユーザー名と呼ぶことを推奨します。この慣例は、複数のフォーク間でコードを共有する場合にうまく機能し、このガイドの残りのgitコマンドすべてで使用する慣例です。また、GitHubコマンドラインツールとそのままの状態で最適に機能する慣例でもあります。

§ブランチ

通常、すべての作業はブランチで行う必要があります。mainで直接作業を行うと、一度に1つのプルリクエストしか送信できません。なぜなら、mainから2つ目のプルリクエストを送信しようとすると、2つ目のプルリクエストには最初と2つ目の両方のコミットが含まれるからです。ブランチで作業することで、プルリクエストを互いに分離できます。

ブランチの名前は自由に決めてください。ブランチ名にissue番号を含める人もいれば、階層構造を使用する人もいます。

§コミットのマージ(スカッシュ)

すべてのプルリクエストが単一のコミットであることを推奨します。これにはいくつかの理由があります。

もちろん、コミットをスカッシュすることが適切でない状況もあります。これはケースバイケースで決定されますが、コミットのスカッシュを要求しない場合の例としては、次のようなものがあります。

ただし、一般的なケースでは、プルリクエストに複数のコミットが含まれている場合は、スカッシュする必要があります。これを行うには、またはすでにプルリクエストを送信しており、スカッシュするように求められた場合は、次の手順に従う必要があります。

  1. リポジトリにコアmainブランチからのすべての変更があることを確認してください。

    git fetch origin
    
  2. インタラクティブなリベースを開始します。

    git rebase -i origin/main
    
  3. これにより、エディターに画面が開き、各コミットで何を行うかを指定できます。最初のコミットのコミットメッセージがすべてのコミットを記述するのに適している場合は、そのままにしておきます。そうでない場合は、最初のコミットのコマンドをpickからrewordに変更します。

  4. 残りの各コミットについて、コマンドをpickからfixupに変更します。これにより、gitはコミットを前のコミットにマージし、前のコミットのコミットメッセージを使用するように指示します。
  5. ファイルを保存してエディターを終了します。Gitがリベースを開始します。最初のコミットをリワードするように指示した場合は、新しいエディターでそのコミットの文言を求められます。すべてがうまくいけば、完了ですが、変更を最新のmainブランチに適用するときに競合が発生する可能性があります。その場合は、競合を修正し、修正をステージングしてから、次を実行します。
    git rebase --continue
    

    競合する変更がさらにある場合は、これを繰り返す必要がある場合があります。

  6. リベースが完了したので、変更をプッシュできます。このブランチを以前にプッシュしたことがある場合(プルリクエストを作成済みの場合も含む)は、強制プッシュを行う必要があります。これは、次のように行うことができます。
    git push yourremote yourbranch --force
    

§レビュー/ビルドの失敗への対応

プルリクエストがCIビルドに合格しない場合、レビューを行い、プルリクエストを更新するように求められた場合、またはその他の理由でプルリクエストを更新する場合は、新しいコミットを作成するのではなく、既存のコミットを修正します。これは、コミット時に--amendフラグを指定することで行えます。

git commit --amend

修正を行った後は、--forceフラグを使用して強制プッシュを行う必要があります。

git push yourremote yourbranch --force

§やり直し

プルリクエストが完全に間違っていて、やり直したいと思う人もいます。これは問題ありません。ただし、元のプルリクエストを閉じて新しいプルリクエストを開く必要はありません。強制プッシュを使用して、完全に新しいブランチをプルリクエストにプッシュできます。

やり直すには、Playコアからの最新の変更を取得していることを確認し、その時点から新しいブランチを作成します。

git fetch origin
git checkout -b mynewbranch origin/main

変更を加え、プルリクエストを送信する準備ができたら、古いブランチがmyoldbranchと呼ばれていたと仮定して、リポジトリ内の古いブランチに新しいブランチをプッシュします。

git push yourremote mynewbranch:myoldbranch --force

これで、プルリクエストが新しいブランチで更新されます。

§履歴の変更について

一度公開したgitの履歴は変更すべきではないと言われているかもしれません。rebasecommit --amendはいずれも履歴を変更し、push --forceは変更された履歴を公開します。

公開後にgitの履歴を変更すべきではない場合が確かにあります。主な場合は、他の人がリポジトリをフォークした可能性がある場合、またはリポジトリから変更をプルした場合です。これらのケースで履歴を変更すると、リポジトリからの変更を安全に自分のリポジトリにマージできなくなります。このため、公式のPlay Frameworkリポジトリでは、履歴を決して変更しません。

ただし、個人のフォークに関しては、プルリクエストになることを意図したブランチの場合は別です。ワークフローの意図は、変更がmainブランチにマージされたときに「公開」されるということです。それまでは、履歴は作業中と見なすことができます。

ただし、ブランチが多くの人のコラボレーションであり、他の人が正当な理由でブランチからプルしていると信じている場合は、お知らせください。意味のない場所でコミットを強制的にスカッシュすることはありません。

次へ:Playについて


このドキュメントにエラーを見つけましたか?このページのソースコードはこちらにあります。ドキュメントガイドラインをお読みになったら、遠慮なくプルリクエストを送ってください。質問や共有できるアドバイスがありますか?コミュニティフォーラムでコミュニティとの会話を始めましょう。