フォークをまたいだマージリクエストの共同作業
自分のフォークからマージリクエストをオープンする際に、アップストリームメンバーに自分のブランチでの共同作業を許可することができます。このオプションを有効にすると、ターゲットブランチへのマージ権限を持つメンバーは、マージリクエストのソースブランチへの書き込み権限を得ます。
アップストリームプロジェクトのメンバーは、マージする前にちょっとした修正やブランチのリベースを行うことができます。
この機能は、公開されているフォークプロジェクトのマージリクエストに利用できます。
アップストリームメンバーからのコミットの許可
GitLab 13.7以降ではデフォルトで有効です。
マージリクエストの作成者として、貢献しているプロジェクトのアップストリームメンバーからのコミット編集を許可することができます:
- マージリクエストを作成または編集しているときに、貢献までスクロールし、ターゲットブランチにマージできるメンバーからのコミットを許可するチェックボックスを選択します。
- マージリクエストの作成を終了します。
マージリクエストを作成すると、マージリクエストウィジェットにマージ可能なメンバーにコミットの追加が許可されましたというメッセージが表示されます。アップストリームメンバーはあなたのブランチに直接コミットでき、マージリクエストのパイプラインやジョブを再試行することもできます。
アップストリームメンバーからのコミットを防ぐ
マージリクエストの作成者として、あなたが貢献しているプロジェクトのアップストリームメンバーからのコミット編集を防ぐことができます:
- マージリクエストを作成または編集しているときに、貢献までスクロールし、ターゲットブランチにマージできるメンバーからのコミットを許可するチェックボックスをオフにしてください。
- マージリクエストの作成を終了します。
アップストリームメンバーとしてフォークにプッシュします。
もしそうなら、フォークしたリポジトリのブランチに直接プッシュできます:
- マージリクエストの作成者がアップストリームメンバーからの貢献を有効にしている場合。
- あなたはアップストリームプロジェクトで少なくとも開発者ロールを持っています。
以下の例をご覧ください:
- フォークされたリポジトリの URL は
git@gitlab.com:contributor/forked-project.git
です。 - マージリクエストのブランチは
fork-branch
です。
投稿者のマージリクエストのコミットを変更または追加するには、次のようにします:
- マージリクエストに移動します。
- 右上のコードを選択し、ブランチをチェックアウトを選択します。
- モーダルウィンドウで、コピー({copy-to-clipboard}) を選択します。
-
ターミナルで、クローンしたバージョンのリポジトリに行き、コマンドを貼り付けます。例えば
git fetch "git@gitlab.com:contributor/forked-project.git" 'fork-branch' git checkout -b 'contributor/fork-branch' FETCH_HEAD
これらのコマンドは、フォークしたプロジェクトからブランチを取得し、作業用のローカルブランチを作成します。
- ブランチのローカルコピーに変更を加え、それをコミットします。
-
ローカルの変更をフォークしたプロジェクトにプッシュします。次のコマンドは、ローカルブランチ
contributor/fork-branch
をgit@gitlab.com:contributor/forked-project.git
リポジトリのfork-branch
ブランチにプッシュします:git push git@gitlab.com:contributor/forked-project.git contributor/fork-branch:fork-branch
コミットを修正したりつぶしたりした場合は、強制的にプッシュする必要があります。このコマンドはコミット履歴を書き換えるので注意してください:
git push --force git@gitlab.com:contributor/forked-project.git contributor/fork-branch:fork-branch
2つのブランチの間のコロン (
:
) に注意してください。一般的なスキームはgit push <forked_repository_git_url> <local_branch>:<fork_branch>
トラブルシューティング
フォークされたプロジェクトのMRページからパイプラインステータスが利用できません。
ユーザーがプロジェクトをフォークすると、フォークされたコピーの権限は元のプロジェクトからコピーされません。フォークの作成者は、アップストリームプロジェクトのメンバーがマージリクエストの変更を表示またはマージする前に、フォークされたコピーに権限を付与する必要があります。
フォークされたプロジェクトのマージリクエストページから元のプロジェクトに戻ってパイプラインステータスを見るには:
- すべてのアップストリームメンバーを含むグループを作成します。
- フォークしたプロジェクトのManage > Membersページに移動し、新しく作成したグループをフォークしたプロジェクトに招待します。