AppCode 2023.1 ヘルプ

競合の解決

バージョン管理システムによっては、状況によっては競合が発生することがあります。

チームで作業をしているとき、誰かが現在取り組んでいるファイルへの変更をコミットするという状況に遭遇するかもしれません。これらの変更が重複しない場合(つまり、異なるコード行に変更が加えられた場合)、競合するファイルは自動的にマージされます。ただし、同じ行が影響を受けると、バージョン管理システムはランダムに片側を選択することができず、競合を解決するように求められます。

ブランチをマージ、リベースまたはチェリーピックするときにも衝突が発生する可能性があります。

非分散バージョン管理システム

サーバー上で新しいバージョンを持つファイルを編集しようとすると、AppCode はそれを知らせ、エディターにポップアップメッセージを表示します。

conflicts warning
この場合、ファイルを変更する前にローカルバージョンを更新するか、後で変更をマージする必要があります。

より新しいリポジトリバージョンを持つファイルをコミットしようとすると、コミットは失敗し、コミットしようとしているファイルが古くなっていることを示すエラーが右下に表示されます。

すでにローカルで変更されているファイルを、他の誰かがコミットした新しいリポジトリバージョンと同期すると、競合が発生します。競合するファイルは競合がある状態でマージされていますステータスになります。ファイルはローカルの変更ビューの同じ変更リストに残りますが、その名前は赤でハイライトされます。ファイルが現在エディターで開かれている場合、タブヘッダーのファイル名も赤でハイライトされます。

分散バージョン管理システム

Git や Mercurial などの分散バージョン管理システムでは、ローカルでコミットしたファイルが最新のアップストリームバージョンと同じコード行に変更された場合、および次の操作のいずれかを実行しようとすると、競合が発生します: pullmergeリベースチェリーピックスタッシュ解除、またはパッチの適用

競合がある場合、これらの操作は失敗し、アップストリームバージョンを受け入れるか、自分のバージョンを優先するか、変更を手動でマージするように求められます。

AppCode: VCS operation conflicts dialog

バージョン管理レベルで競合が検出されると、競合ダイアログが自動的にトリガーされます。

このダイアログで閉じるをクリックするか、コマンドラインからマージの競合を引き起こす Git 操作を呼び出すと、マージの競合ノードがローカルの変更ビューに表示され、解決するためのリンクが表示されます。

The Merge Conflicts node in the Local Changes view

AppCode は、ローカルで競合を解決するためのツールを提供します。このツールは 3 つのペインで構成されています。

  • 左側のページは読み取り専用のローカルコピーを示しています

  • 右ペインには、リポジトリにチェックインされた読み取り専用バージョンが表示されます

  • 中央のペインには、マージと競合解決の結果が表示される完全に機能するエディターが表示されます。最初は、このペインの内容は、ファイルのベースリビジョンと同じです。つまり、競合する両方のバージョンの派生元のリビジョンです。

color coding in the conflict resolution tool

競合の解決

  1. 競合ダイアログのマージローカルの変更ビューの解決リンクをクリックするか、エディターで競合するファイルを選択し、メインメニューから VCS | <あなたの VCS> | 競合の解決を選択します。

  2. 矛盾しないすべての変更を自動的にマージするには、ツールバーの the Apply Non-Conflicting Changes button 競合しないすべての変更を適用)をクリックします。また、the Apply Non-Conflicting Changes from the Left button 競合しない変更を左側から適用)と the Apply Non-Conflicting Changes from the Right button 競合しない変更を右側から適用)を使用して、ダイアログの左 / 右部分からの矛盾しない変更をそれぞれマージすることもできます。

  3. 競合を解決するには、左(ローカル)バージョンと右(リポジトリ)バージョンに適用するアクション(the Accept button を受け入れるか the Ignore button を無視する)を選択し、中央ペインで結果のコードを確認する必要があります。

    Resolving conflicts

    中央のペインでハイライトされている競合を右クリックして、コンテキストメニューのコマンドを使用することもできます。左を使用して解決するコマンドと右を使用して解決するコマンドは、片側からの変更を受け入れ、反対側からの変更をそれぞれ無視するショートカットを提供します。

    the context menu of a conflicting change

    単純な競合(たとえば、同じ行の最初と最後が異なるファイルリビジョンで変更されている場合)では、ワンクリックで変更をマージできる単純な競合を解決 the Resolve simple conflicts button ボタンが使用可能になります。

    このような競合は、競合しないすべての変更を適用アクションでは解決されません。なぜなら、それらが適切に解決されていることを確認する必要があるからです。

  4. 競合を解決するために、異なるバージョンを比較することも有用な場合があります。the Compare contents button ツールバーボタンを使用して、オプションのリストを呼び出します。ベースは、ローカルバージョンとリポジトリバージョンが由来するファイルバージョン(最初は中央のペインに表示されます)を参照し、垂直方向の中央は結果バージョンを参照します。

  5. 中央パネルでマージ結果を確認し、適用をクリックします。

生産性のヒント

競合しない変更を自動的に適用します

マージダイアログから適用するように指示する代わりに、競合しない変更を常に自動的に適用するように AppCode を構成できます。これを行うには、IDE 設定 Ctrl+Alt+Sツール | 差分 & マージページで競合しない変更を自動的に適用オプションを選択します。

中央ペインで変更を管理する

中央のペインで変更を管理するには、ガターの変更マーカーの上にマウスカーソルを置いてクリックしたときに表示されるツールバーを使用します。ツールバーは、変更された行の以前の内容を示す枠とともに表示されます。

the change toolbar

例: 競合しない変更が複数あり、それらのうち 1 つまたは 2 つをスキップする必要がある場合は、競合しないすべての変更を適用アクションを使用してそれらすべてを同時に適用してから、このツールバーの前回保存した状態に戻すアクションを使用して不要な変更を元に戻します。

関連ページ:

環境設定

このダイアログを使用して、AppCode 設定(グローバルとプロジェクト固有のものの両方)を変更します。設定ダイアログは、すべてのグローバル AppCode IDE 設定と AppCode 固有のプロジェクト設定の中心的な場所です。XSLT 固有のインテンションアクション外観 & 振る舞い var banner = document.createElement('div'); banner.innerHTML =...

リモート Git リポジトリと同期する (フェッチ、プル、更新)

変更をアップストリームにプッシュして作業結果を共有する前に、リモートリポジトリと同期して、プロジェクトのローカルコピーが最新であることを確認する必要があります。これを行うには、次のいずれかの方法があります: 変更のフェッチ、変更のプル、プロジェクトの更新 Git ブランチポップアップは、ブランチにまだフェッチされていない受信コミットがあるかどうかを示します。変更のフェッチ:アップストリームから変更をフェッチすると、リモートリポジトリと最後に同期してから行われたコミットからのすべての新しいデータがロー...

Git ブランチから別の Git へ変更を適用する

Git では、あるブランチから別のブランチへの変更を統合するいくつかの方法があります。ブランチのマージ、ブランチのリベース、ブランチから別のブランチに別々のコミットを適用する (チェリーピック)、コミットから個別の変更を適用する、特定のファイルをブランチに適用する、ブランチのマージ:特定のタスクで機能する機能ブランチを作成し、機能を完了してテストした後、作業の結果をメインコードベースに統合するとします。これを行う最も一般的な方法は、ブランチをマスターにマージすることです。機能ブランチで作業をし...

Git を使用して複数のフィーチャーを同時に処理する

場合によっては、未完成のものを使って別のタスクに切り替えてから、それらに戻る必要があります。AppCode はあなたの作業を失うことなくいくつかの異なる機能に便利に取り組むためのいくつかの方法を提供します: 保留中の変更はスタッシュまたはシェルブできます。スタッシュの変更は、シェルブに非常に似ています。唯一の違いは、パッチの生成方法と適用方法にあります。スタッシュは Git によって生成され、AppCode の内部または外部から適用できます。変更がシェルブされたパッチは AppCode によって生...