プロジェクトにフォーク/プルリクエスト機能のようなgithubを実装するには、自動マージ機能で、プルリクエストを表示している間、ソース/ターゲットリポジトリ間の競合を毎回検出する必要があります。
解決策の1つは、「gitrequest-pull」出力を分析することです。競合を検出するためのより簡単な方法はありますか?
プロジェクトにフォーク/プルリクエスト機能のようなgithubを実装するには、自動マージ機能で、プルリクエストを表示している間、ソース/ターゲットリポジトリ間の競合を毎回検出する必要があります。
解決策の1つは、「gitrequest-pull」出力を分析することです。競合を検出するためのより簡単な方法はありますか?
以前の回答を削除しましたが、質問がわかりませんでした...
今ここに光沢のある新しい答えがあります:
git merge --ff-only <branch>
競合がない場合は、マージが行われます。競合があると、次のメッセージが表示されますNot possible to fast-forward
。この状況では、コンソールの戻りコード(echo $?)は128です。
最新のプッシュされたコミットと既存のすべてのブランチをチェックするgit-conflict-detectorを作成しました。
これは、GitHub WebHook URLによって開始され、競合が検出されたときにHiChat通知を送信することさえ知っている単純な単一のスクリプトです。
ここgit merge --ff-only <branch>
に表示されているように、出力の分析に基づいてソリューションを作成しました。
すべての人が楽しみ、学び、貢献できるように、オープンソース化しています。
私の知る限り、これらのブランチを実際にマージするまで、マージによって競合が発生するかどうかを確認することはできません。
これはすでに指摘されています:最初に実際にマージせずにマージをテストする方法。
したがって、質問に答えるために、この種の機能を実装する必要がある場合は、ソース/ターゲットをマージし、マージアクションをロールバックすることを試みる必要があります(を使用してgit reset --hard
)。
使用git request-pull
したことはありませんが、出力を見ると、問題の解決に役立つ情報が見つかりません。git diff
、、git wtf
を使用しても同じ結果が得られる可能性がありgit remote show <name>
ます。
参照:
git wtf
:https ://github.com/michaelklishin/git-wtfgit request-pull
: http: //progit.org/book/ch5-2.html最後に、競合を検出するための独自の関数を作成しました。
これは非常に単純で、すべての差分行をフェッチし、同じ変更があるかどうかを比較します。