2009-07-29 5 views
2

두 개의 분기에서 코드를 'git merge'명령과 결합하려고하지만이 과정에서 git이 충돌합니다. 이러한 분기를 병합하는 다른 방법을 찾아야합니다. git segfaults on merge - submodule conflict

내가 실행 디버그 수준으로 병합 출력을 증가 시키려면 :

 
    $ export GIT_MERGE_VERBOSITY=5 

내가 대상 지점에 현재입니다. git-status는 모든 것을 깨끗하고 분명하게 보여줍니다. 브랜치를 병합 할 때 이것이 내가 본 것입니다 (비즈니스 인이 민감 할 수 있으므로 체크 인 주석을 %%%%%% 및 filenames를 #######로 바꿨습니다).

$ git merge origin/PH-RELEASE-146.0 
Merging HEAD with origin/PH-RELEASE-146.0 
Merging: 
8399d82 %%%%%% 
4f9dcfe %%%%%% 
found 2 common ancestor(s): 
e0a5fa1 %%%%%% 
ce62bf1 %%%%%% 
    Merging: 
    e0a5fa1 %%%%%% 
    ce62bf1 %%%%%% 
    found 1 common ancestor(s): 
    af34a07 %%%%%% 
    Skipped ######## (merged same as existing) 
    Removed ######## 
    Removed ######## 
    ... 
    Removed ######## 
    Auto-merged build 
    CONFLICT (submodule): Merge conflict in build - needs b3efae4855bc5eb83aa3167ce6c309a4503c3286 
    There are unmerged index entries: 
    1 build 
    2 build 
    3 build 
Merge with strategy recursive failed. 

이 시점에서 git-merge가 중단 된 것으로 나타났습니다. 어떻게 알 수 있습니까? - Cygwin에서에서 자식을 실행하는 경우 : 'ulimit를 -c 무제한'와

$ git merge origin/PH-RELEASE-146.0 

    11 [main] git 4352 _cygtls::handle_exceptions: Error while dumping state (probably corrupted stack) 

Segmentation fault (core dumped) 
  • 리눅스에서 자식을 실행 : 두 경우 모두
 
    $ ulimit -c unlimited; ls -l core; git merge origin/PH-RELEASE-146.0; ls -l core 
    ls: cannot access core: No such file or directory 
    Merging HEAD with origin/PH-RELEASE-146.0 
    ... 
    ... 
    Merge with strategy recursive failed. 
    -rw------- 1 user group 1589248 Jul 29 12:48 core 
  • , .git/index.lock은 남아 있으므로 git 명령이 다시 작동하려면 수동으로 삭제해야합니다.

    $ git status 치명적인 '.git/index.lock'을 만들 수 없습니다 : 파일 내가 수동으로 위의 gitk이 트리에서 사람과 커밋 ID를 비교하여 병합을 통해 걸어 봤어요

존재한다. git이 공통 조상을 찾고 병합을 조각으로 분해하여 각 조상을 재귀 적으로 처리한다는 것은 분명합니다. 8dc84b6 될 것을 의미한다 e0a5fa1 서브 모듈 빌드에서

  • : 그러나 나는 문제가 발생했습니다 생각하는 것은 "구축"이라는 서브 모듈에 "자식 링크는"커밋 e0a5fa1 및 ce62bf1 사이에 변경된 것입니다 ce62bf1 서브 모듈 빌드

그래서 분명히 충돌이있을 b3efae4 수하기위한 것입니다. 그러나 "부분적인"병합이나 그것이 불려지 던 부분과 마지막 부분이 아닌 충돌이 있습니다. 그리고 자식은 전혀 잘 처리하지 않는 것 같습니다.

좋아요, 아마도 버그가 있습니다. 버그 리포트를 제출하는 방법은 무엇입니까?

하지만 여기서 내가 정말로 염려하는 것은이 두 가지를 병합 할 수 없다는 사실입니다. '병합'명령을 사용하지 않고이 지점을 함께 가져올 다른 방법을 아는 사람이 있습니까? 전체 병합 프로세스 동안이 서브 모듈을 완전히 무시하는 'git-merge'를 얻을 수 있습니까? 즉 윌리엄의 생각을하려고 도움이되지 않는 경우

리눅스 자식 버전 리눅스에서 1.6.0.4

Cygwin에서 자식 버전 1.6.1.2

+0

병합하기 전에 각 분기에서 하위 모듈을 삭제 한 다음 병합 후에 하위 모듈을 추가 할 수 있습니다. –

+0

나는 그것을 시도했지만 불행히도 작동하지 않는다. 왜냐하면 자식은 존재하고 삭제 될 수없는 보조 조상에게 커밋 히스토리를 거쳐 가기 때문이다. 나는 한쪽 브랜치에서 다른 쪽 브랜치로 커밋을 선택하고 서브 모듈을 업데이트 한 커밋을 의도적으로 건너 뛴다. – meowsqueak

+0

다행히도 우리의 하위 모듈은 커밋의 다른 변경없이 항상 업데이트됩니다! 이 작업을 마치면 "git merge -s resolve origin/PH-RELEASE-146.0"을 사용하여 두 개의 분기를 결합 할 수있었습니다 (병합 커밋의 유일한 차이점은 누락 된 하위 모듈이었습니다). 그리고 나서 하위 모듈을 추가합니다 다시 입력하십시오. – meowsqueak

답변

1

시도의 업그레이드 자식, 1.6.3.3이 최신입니다.

+0

예, 1.6.3.3에이 문제가 발생하지 않음을 확인할 수 있습니다. 병합은 하위 모듈과의 충돌을 올바르게 식별하지만 병합을 올바르게 병합하는 대신 병합을 계속하고 다른 파일을 색인에 추가합니다. – meowsqueak