4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

iOS開発でプロジェクトファイルがコンフリクトしたときの対処方法

Posted at

ここ数週間でプロジェクトファイルのコンフリクトを3回食らって、そのたびに焦ったので、対処方法をメモります。
Xcodeで編集できなくなるんで、最初遭遇したとき復旧不可能になったかと思って焦りました。

そもそもXcodeGenを使ってプロジェクトファイルがコンフリクトしないようにする対策もあるようなのですが、ここでは扱いません。
XcodeGenによる新時代のiOSプロジェクト管理

想定

git pullしたら、プロジェクトファイルがコンフリクトした装置です。

やること

git status

コンフリクトしているファイルを確認しましょう。

結果
On branch hoge
You have unmerged paths.
  (fix conflicts and run "git commit")
  (use "git merge --abort" to abort the merge)

Changes to be committed:

        new file:   NotConflicted.swift

Unmerged paths:
  (use "git add <file>..." to mark resolution)

        both added:      xxx.xcodeproj  ←これ!

実際プロジェクトファイルがコンフリクトするときってファイルの追加削除が激しいときなんで、
表示はもっと激しくなると思いますが、こんな感じになるかと思います。

マージしよう

普通のファイルだったらXcode上でなおす選択肢もあるのですが、プロジェクトファイルがコンフリクトすると、
そもそもXcode上のプロジェクトが開けない状態になるので、それは無理です。
(もしXcodeで直編集できる方法あったら教えてください。
拡張子変えるとかすればできそうですが、それ以外で……)
Xcode以外のエディタ(VSCodeとか)なら、単なるファイルとして扱われるので、それで編集しちゃうのも手です。

mergetool

mergetoolを使います。

git mergetool

僕の環境だと、こんなんが開きます。

image.png
(画像: Mac で使える git mergetool をいろいろ試してみる - OpenDiff

mergetool、設定すれば変えられるらしいのですが、
特に何もしていないと、Xcode入れたときの付属品としてついてくるこのアプリが起動するみたいです。
opendiffなのかFileMergeなのか、アプリ名がいまいちハッキリしないんで、そこはぼかします。

画面左がローカルブランチで、右がリモートブランチ、
下がMergeしようとした結果となっています。
変更箇所をポチポチたどっていき、Actionsのプルダウンから、
右を選ぶ、左を選ぶ、右/左有線で両方採用、など選べます。
いずれのアクションも不適なときは、下Windowで直接編集ができます。

その後

コンフリクトを解消したら、そのまま閉じると、

Was the merge successful? [y/n]

と表示されるので、yを押すと、Merge完了となります。
元のファイルは.origファイルとして残りますので、コミットして問題がなかったら、ゴミになるので消します。
ツール側で保存してから閉じると、この質問が出ず、.origも作られないっぽいです。

opendiff、どう?

正直使い勝手は微妙です。。。
しかし、必要最低限、という感じはします。
vimで直編集よりはマシかなあという程度。

僕は普段のコンフリクトはXcode上で確認してなおしているので、
プロジェクトファイルのときだけ使うものなので、そこまでこだわりがないので、これでやろうかなあと思っています。

Qiita見るとvimdiff入れてる人が多いっぽくて、opendiffでやっている例があまり見つからないので、敢えて書いてみました。

この方のブログ記事を見ると、他の選択肢が色々見られて良さそうです。
Mac で使える git mergetool をいろいろ試してみる - 準備編

4
3
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
3

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?