Git 하위 모듈과의 충돌을 관리하려면 어떻게 해야 합니까?
몇 개의 하위 모듈을 참조하는 Git Super Project가 있으며 나머지 프로젝트 구성원들이 작업할 수 있도록 워크플로우를 잠그려고 합니다.
질문을 , 저의 를 이질에대해문프, 슈로는다같불다립니이음과트젝제퍼▁is라고 부릅니다.supery
은 그고리서브듈라고 불립니다.subby
(그러면 제가 하려는 일을 단순화하는 것입니다.실제로 버전에 분기를 사용하지는 않지만 질문으로 레이아웃하는 것이 가장 쉬울 것이라고 생각했습니다.)
의 마브치스랜의 .supery
꼬리표를 달고 있습니다.v1.0
subby
하위 모듈로 참조됩니다.의 .supery
라고 하는one.one
그리고 태그를 가리키도록 하위 모듈의 참조를 변경했습니다.v1.1
subby
.
는 이 을 할 수 , 만약 제가 한다면, 저는 이 지점들에서 일을 할 수 .one.one
로부터의 변경 사항과 함께 분기합니다.master
해야 할지요.branch 몇가충있는어해할야지모결르다니습겠해게떻데이돌지▁branch▁and.
으로 기적으실후행을 에.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
내 서브모듈을 무시할 수 있을까요?
하위 모듈과의 충돌을 기술적으로 관리하는 것은 아니지만(이것은 유지하되 저것은 유지하지 않음), 작업을 계속할 수 있는 방법을 찾았습니다.그리고 내가 해야 할 일은 나의 관심에 집중하는 것이었습니다.git status
출력 및 하위 모듈 재설정:
git reset HEAD subby
git commit
그러면 서브모듈이 풀 전 커밋으로 재설정됩니다.이 경우엔 정확히 제가 원했던 겁니다또한 서브모듈에 적용된 변경사항이 필요한 경우에는 표준 서브모듈 워크플로우(체크아웃 마스터, 원하는 태그 풀다운 등)를 통해 변경사항을 처리합니다.
저는 이 질문에 대한 답변에 약간 어려움을 겪었고 비슷한 SO 게시물의 답변에도 큰 운이 없었습니다.이것이 저에게 효과가 있었던 이유입니다. 제 경우에는 서브모듈이 다른 팀에 의해 유지 관리되었기 때문에 마스터의 서브모듈 버전과 제가 작업 중인 프로젝트의 로컬 지점에서 충돌이 발생했습니다.
- 려달을 합니다.
git status
폴더에 가 있는 것을 . 하위 모듈을 현재 분기에서 마지막으로 커밋된 버전으로 재설정합니다.
git reset HEAD path/to/submodule
이 시점에서 하위 모듈의 충돌이 없는 버전이 있으며, 하위 모듈의 리포지토리에 있는 최신 버전으로 업데이트할 수 있습니다.
cd 경로/cd 모듈/cd 모듈git 각 git 풀 원산지 SUBMODULE-BRANCH-NAME에 대한 git 서브모듈
이제 당신은 할 수 있습니다.
commit
그리고 다시 일하세요.
저는 이 문제를 겪었습니다.git rebase -i origin/master
ㅠㅠㅠㅠ 는 마스터싶어서 저는 마스터 버전의 서브모듈 레퍼런스를 받고 싶어서 간단하게 다음을 수행했습니다.
git reset master path/to/submodule
그리고 나서.
git rebase --continue
그것으로 저는 문제를 해결했습니다.
저는 그 정확한 오류를 전에 본 적이 없습니다.하지만 당신이 겪고 있는 문제에 대해서는 짐작이 갑니다.그것은 보기엔.master
그리고.one.one
의 supery
다른포니다합함를조참한▁ref에 대한 합니다.subby
"" "" "" " " " " "에서 변경사항을 병합합니다.master
ref-git가 - 지렛대인지 알 수 없습니다.v1.0
또는v1.1
에 의해 .one.one
의 supery
.
이 경우 원하는 참조를 선택하고 해당 변경 사항을 커밋하여 충돌을 해결해야 합니다.이것이 바로 당신이 reset 명령으로 하고 있는 것입니다.
이것은 프로젝트의 다른 분기에 있는 다른 버전의 하위 모듈을 추적하는 까다로운 측면입니다.그러나 하위 모듈 참조는 프로젝트의 다른 구성 요소와 동일합니다.연속적인 병합 후에도 서로 다른 두 분기가 동일한 하위 모듈 참조를 계속 추적하는 경우 Git는 향후 병합에서 병합 충돌을 일으키지 않고 패턴을 해결할 수 있어야 합니다.반면에 스위치 하위 모듈이 자주 참조하는 경우 많은 충돌 해결을 참아야 할 수도 있습니다.
먼저 하위 모듈에서 참조할 해시를 찾습니다.그 다음에 달려라
~/supery/subby $ git co hashpointerhere
~/supery/subby $ cd ../
~/supery $ git add subby
~/supery $ git commit -m 'updated subby reference'
이는 서브모듈을 올바른 해시 참조로 가져와서 더 이상 충돌하지 않고 작업을 계속하는 데 도움이 되었습니다.
이 토론에서 도움을 받았습니다.나의 경우에는
git reset HEAD subby
git commit
나를 위해 일했습니다 :)
위의 모든 것들은 나에게 효과가 없었습니다.서브모듈을 "미결합 경로" 아래에 두고 있었는데 꼼짝 못하고...
많은 시도 끝에 결국 주효했던 것은 main repo가 아닌 하위 모듈에서 병합 충돌 파일을 수동으로 삭제하는 것이었습니다.
git restore --staged submodule_path
(변경사항이 "커밋을 위해 준비되지 않은 변경사항:"로 이동했습니다.)
git clean -df
그리고나서
git 하위 모듈 업데이트 --init
부모 디렉토리에 다음이 표시됩니다.
$ 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
업스트림 버전을 사용하려는 경우:
rm -rf <submodule dir>
git submodule init
git submodule update
외부 저장소에 포함된 Git 하위 모듈과의 충돌을 해결하는 방법
옵션 1:
주요 답변과 같습니다.
# run this for each conflicting submodule
git reset -- path/to/submodule
그런 다음 충돌 해결이 완료되면 수동으로cd
각 하위 모듈에 원하는 최신 변경사항을 가져오거나 체크아웃한 다음cd
상위 레포로 백업하고 실행git add path/to/submodule
각 서브모듈에 대해
옵션 2:
상단(가장 바깥쪽) 레포에서 대화형 리베이스를 수행합니다.
# pull latest upstream main repo
git fetch origin main:main
# do interactive rebase onto it
git rebase -i main
대화형 기본 재배치 파일 편집기에서 하위 모듈을 업데이트한 모든 커밋을 수동으로 삭제합니다.기본 재배치를 완료합니다.
완료되면 수동으로cd
각 하위 모듈에 원하는 최신 변경사항을 가져오거나 체크아웃한 다음cd
하고 상위레백고실행하업로포▁back를 실행합니다.git add path/to/submodule
최신 변경사항으로 업데이트할 각 하위 모듈에 대해 선택합니다.
다 했어요.
참고 항목:
- 레포의 모든 git 하위 모듈을 업데이트하는 방법에 대한 나의 답변(두 가지 매우 다른 작업을 수행하는 방법!)
언급URL : https://stackoverflow.com/questions/826715/how-do-i-manage-conflicts-with-git-submodules
'programing' 카테고리의 다른 글
오라클 SQL 개발자를 사용하여 저장 프로시저를 실행하려면 어떻게 해야 합니까? (0) | 2023.07.01 |
---|---|
데이터 주석의 As.Net Mvc 숨겨진 필드 (0) | 2023.07.01 |
UICollection뷰 열 수 설정 (0) | 2023.06.26 |
정적 메서드 내에서 세션 변수 값을 가져오려면 어떻게 해야 합니까? (0) | 2023.06.26 |
crt0.o와 crt1.o -- 무엇이 다릅니까? (0) | 2023.06.26 |