2016-10-18 1 views
2

a.h、aImpl.c、b.h、bImpl.c、main.cの5つのファイルがあり、両方のヘッダーファイルが含まれています。gitのマージですべてのことを意味する矛盾はありませんか?

Branch A: 
    //File a.h 
    +extern int x; 
    //File aImpl.C 
    +int x=1 
Branch B: 
    //File b.h 
    +extern int x; 
    //File bImpl.C 
    +int x=2 

ファイルは競合しませんが、実際にはグローバル変数は競合しません。この場合、どのようにgit mergeが処理されますか?

+8

gitはプログラミング言語を理解していません。それはあいまいさのない変更を適用できることを単に知っています。 – xaxxon

+0

gitはデバッグコードを担当していますか?私はgitがdiffsについて気にしていたと思った? –

+3

マージ後にプッシュする前にコードをコンパイルする1001の理由。 – UKMonkey

答えて

4

Gitの組み込みマージは、テキストベースでのみ機能します。構文上または意味上のエラーはGitには関係ありません。つまり、マージは成功し、コードは失敗します。これに対処するのはGitではなく、あなた次第です。

Gitのフックを使用して少し助けを得ることができます。たとえば、いくつかのテストが合格するまでコミットを無効にすることができます。しかし、そのようなフックは、各ユーザに任せて使用するか、迂回するようにする。コミットは作業ツリーの内容からではなく、索引(ステージング領域)の内容から作成されるため、適切なフックを作成することもやや難しくなります。

関連する問題