0

最近、プロジェクトを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です。

4

2 に答える 2

1

次回は、を使用しますgit mergetool。初心者にとってはgitの方がはるかに友好的です。

于 2013-01-30T00:18:04.917 に答える
1

バグは見られません。これ以上の詳細がなくても、1 つのファイルを除くすべてのファイルでマージが成功したとしか推測できません。出力には、git が ezthumb.h を自動的にマージできなかったことが示されています。これは、両方のブランチがそのファイル内の同じ行 (または行) に変更を加えているためです。ファイルを開いて、マージ後に表示するように編集する必要があります。次に、定期的に実行し、git add次にgit commit.

于 2013-01-30T00:25:05.597 に答える