문제

나는 몇 개의 서브 모듈을 참조하는 git super project를 가지고 있으며 나머지 프로젝트 회원들이 내부에서 일할 수있는 워크 플로를 잠그려고 노력하고 있습니다.

이 질문에 대해 내 슈퍼 프로젝트가 호출되었다고 가정 해 봅시다 supery 그리고 하위 모듈이 호출됩니다 subby. (그러면 내가하려는 일을 단순화하는 것입니다 ... 실제로 버전에 분기를 사용하지는 않지만 질문으로 배치하는 것이 가장 쉽다고 생각했습니다.)

내 마스터 지점 supery 태그가 있습니다 v1.0 GIT 프로젝트의 subby 하위 모듈로 참조됩니다. 의 지점 supery ~라고 불리는 one.one 서브 모듈의 참조를 태그를 가리 키도록 변경했습니다. v1.1subby.

나는이 각 지점 내에서 히치없이 일할 수 있지만, 내가 업데이트하려고한다면 one.one 에서 변경된 분기 master 지점 나는 약간의 갈등을 받고 그것을 해결하는 방법을 얻지 못합니다.

기본적으로 a git pull . master 그 동안 subby 분기, 그것은 추가 서브 모듈을 만드는 것처럼 보입니다.

풀/병합 전에 원하는 응답을받습니다. git submodule ~로부터 one.one 나뭇가지:

$ git checkout master
$ git submodule
qw3rty...321e subby (v1.0)
$ git checkout one.one
$ git submodule
asdfgh...456d subby (v1.1)

하지만 당기면 달 때 추가 하위 모듈이 추가됩니다. git submodule:

$ git pull . master
Auto-merged schema
CONFLICT (submodule): Merge conflict in subby - needs qu3rty...321e
Automatic merge failed; fix conflicts and then commit the results.

$ git submodule
qw3rty...321e subby (v1.0)
asdfgh...456d subby (v1.1)
zxcvbn...7890 subby (v1.1~1)

원치 않는 하위 모듈 참조를 삭제/무시하고 충돌과 변경 사항을 저지르는 방법은 무엇입니까? 아니면 원본과 함께 사용할 수있는 매개 변수가 있습니까? git pull 그것은 내 하위 모듈을 무시할 것입니까?

도움이 되었습니까?

해결책

전에는 그 정확한 오류를 보지 못했습니다. 그러나 나는 당신이 겪고있는 문제에 대해 추측합니다. 이는 것처럼 보입니다 master 그리고 one.one 의 가지 supery 다른 심판을 포함합니다 subby 변경 사항을 병합 할 때 하위 모듈 master git은 어떤 심판을 모릅니다. v1.0 또는 v1.1 - 보관하고 추적해야합니다 one.one 지점 supery.

이 경우, 원하는 심판을 선택하고 갈등을 해결하기 위해 그 변경을 커밋해야합니다. 그것은 당신이 정확히 당신과 함께하는 일입니다 초기화 명령.

이것은 프로젝트의 다른 지점에서 다른 버전의 하위 모듈을 추적하는 까다로운 측면입니다. 그러나 하위 모듈 심판은 프로젝트의 다른 구성 요소와 같습니다. 두 가지 다른 분기가 연속 합병 후 동일한 각각의 하위 모듈 Refs를 계속 추적하는 경우, Git은 향후 합병에서 합병 충돌을 일으키지 않고 패턴을 해결할 수 있어야합니다. 반면에 스위치 하위 모듈을 자주 참조하면 많은 충돌 해결을 견뎌야 할 수도 있습니다.

다른 팁

글쎄, 그것은 기술적으로 하위 모듈과의 충돌을 관리하는 것이 아니라 (즉, 이것을 유지하지만 그것을 유지하지는 않지만) 계속 일할 수있는 방법을 찾았습니다 ... git status 하위 모듈을 출력하고 재설정합니다.

git reset HEAD subby
git commit

이는 서브 모드를 프리 풀 커밋으로 재설정 할 것입니다. 이 경우 정확히 내가 원하는 것입니다. 그리고 하위 모듈에 적용되는 변경 사항이 필요한 경우 표준 하위 모듈 워크 플로우 (체크 아웃 마스터, 원하는 태그를 당기는 등)를 처리 할 것입니다.

나는이 질문에 대한 답으로 조금 어려움을 겪었고 답에 대한 운이 많지 않았습니다. 비슷한 SO 게시물 어느 하나. 그래서 이것은 저에게 도움이되었습니다. 제 경우에는 하위 모듈이 다른 팀에 의해 유지되었다는 점을 염두에 두었습니다.

  1. 운영 git status - 충돌이있는 하위 모듈 폴더를 기록하십시오.
  2. 하위 모듈을 현재 지점에서 마지막으로 커밋 된 버전으로 재설정하십시오.

    git reset HEAD path/to/submodule

  3. 이 시점에서, 당신은 하위 모듈의 저장소에서 최신 버전으로 업데이트 할 수있는 충돌 버전의 하위 모듈 버전이 있습니다.

    cd path/to/submodule
    git submodule foreach git pull origin SUBMODULE-BRANCH-NAME
  4. 그리고 이제 당신은 할 수 있습니다 commit 그게 일하러 돌아갑니다.

먼저, 하위 모듈에 원하는 해시를 찾으십시오. 그런 다음 실행하십시오

~/supery/subby $ git co hashpointerhere
~/supery/subby $ cd ../
~/supery $ git add subby
~/supery $ git commit -m 'updated subby reference'

그것은 내 하위 모듈을 올바른 해시 참조로 가져오고 더 이상의 충돌을받지 않고 내 작업을 계속하는 데 도움이되었습니다.

나는이 문제가 있었다 git rebase -i origin/master 지점에. Submodule Ref의 Master 버전을 가져 가고 싶었습니다.

git reset master path/to/submodule

그리고

git rebase --continue

그것은 나에게 문제를 해결했다.

이 토론에서 도움을 받았습니다. 내 경우에는

git reset HEAD subby
git commit

나를 위해 일했다 :)

부모 디렉토리에서는 다음과 같습니다.

$ git status
On branch master
Your branch is up-to-date with 'origin/master'.
Unmerged paths:
(use "git reset HEAD <file>..." to unstage)
(use "git add <file>..." to mark resolution)

그래서 나는 이것을했다

git reset HEAD linux
라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top