最近、プロジェクトをCVSからGitに移動しました。これは、人気があるように思われるためです。しかし、私が主要な支店を統合しようとしていたとき、私はかなりがっかりしました。簡単に言うと、masterとquickfixの2つの主要なブランチがあります。マスターには、分岐点からの4つのコミットがあります。クイックフィックスには15のコミットがあるため、これら2つのブランチには異なるコードがロードされます。そこで、私はそれらをマージして、生活を楽にすることにしました。入力したマスターブランチを確認しました
ezthumb$ git merge quickfix
Auto-merging eznotify.c
Auto-merging ezthumb.c
Auto-merging ezthumb.h
CONFLICT (content): Merge conflict in ezthumb.h
Auto-merging main.c
Automatic merge failed; fix conflicts and then commit the result.
1つのファイルのみをマージしました。どうやらもっとあるはずです、なぜなら
ezthumb$ git status
# On branch master
# Changes to be committed:
#
# modified: ChangeLog
# modified: Makefile
# modified: ezgui.c
# modified: eznotify.c
# modified: ezthumb.1
# modified: ezthumb.c
# modified: ezthumb.lsm
# new file: ezthumb.pdf
# modified: id_lookup.c
# modified: libsmm/libsmm.h
# modified: libsmm/main.c
# modified: libsmm/smm_chdir.c
# modified: libsmm/smm_codepage.c
# modified: libsmm/smm_cwd_alloc.c
# modified: libsmm/smm_cwd_pop.c
# modified: libsmm/smm_cwd_push.c
# modified: libsmm/smm_filesize.c
# modified: libsmm/smm_fstat.c
# modified: libsmm/smm_init.c
# modified: libsmm/smm_mbstowcs.c
# modified: libsmm/smm_pathtrek.c
# modified: libsmm/smm_pwuid.c
# modified: libsmm/smm_wcstombs.c
# modified: main.c
# modified: version.c
#
# Unmerged paths:
# (use "git add/rm <file>..." as appropriate to mark resolution)
#
# both modified: ezthumb.h
#
# Untracked files:
# (use "git add <file>..." to include in what will be committed)
#
# output.map
ezthumb.hとgitcommit-aをリポジトリに変更しました。もっと面倒になりました。現在、Gitは、これら2つのブランチが正常にマージされたと信じているため、それ以上のマージコマンドを受け入れることを拒否します。実際には、まだ10を超える異なるファイルがありました。間違ったマージを取り除く方法を見つけるのに2時間かかりました。複数のファイルのマージでGitの機能を確認するための小さなプロジェクトを立ち上げました。それは非常にうまくいきました:
testproj$ git merge quickfix
Auto-merging fixtoken.c
CONFLICT (content): Merge conflict in fixtoken.c
Auto-merging misc.c
CONFLICT (content): Merge conflict in misc.c
Auto-merging rename.c
CONFLICT (content): Merge conflict in rename.c
Automatic merge failed; fix conflicts and then commit the result.
結果は私が楽しみにしていたものでした。Gitはこれらのファイルの競合をマークして、手動でマージできるようにしました。Gitが2つのプロジェクトで異なる動作をしていることは、私にはかなりバグがあるように思えます。私はこの問題のために2泊グーグルしましたが、同じようなことは何もありません。これを回避する方法を知っている人はいますか?確かに、ファイルを1つずつ手動で差分してマージすることはできますが、バージョン管理システムでは意味がありません。私のGitはFedora14で1.7.4.4です。