2012-06-03 4 views
9

나는 각각 하나의 파일을 포함하는 git 저장소를 가지고 있습니다. 나는 그들 모두를 한꺼번에 병합하고 싶다. 내가 무엇을 목표로하고있어이 그래프 :Git octopus는 관련없는 저장소와 병합합니다.

*----¬ mergedrepo/master 
| \ \ \ 
| | | * repoA/master 
| | * repoB/master 
| | | 
| | * repoB/... 
| * repoC/master 
* repoD/master 
| 
* repoD/... 

나는 git merge을 시도하지만, 나는 또한 git merge --squash 도움이 될 말을 들었다 분리 된 나무

$ git merge a/master b/master c/master d/master 
Unable to find common commit with a/master 
Automatic merge failed; fix conflicts and then commit the result. 

작동하지 않습니다 문어 전략 나타납니다 ,하지만 같은 오류가 발생했습니다.

이 오른쪽 그래프를 생성하지만 모든 파일 손실 : 나는이 일에 대해 어떻게 가야합니까

$ git merge -s ours a/master b/master c/master d/master 

를?

+0

당신의 문어 병합이 효과적 일 것입니다. 메시지가 말한 것과 같은 충돌을 수정하면됩니다. 충돌을 해결 한 후에는 커밋 할 수 있어야합니다. –

+2

@CharlesBailey : 충돌이 없습니다! – Eric

+0

예 : "자동 병합에 실패했습니다. 충돌을 수정 한 다음 결과를 커밋합니다." 충돌을 해결하려면 파일이 리포지토리에서 동일한 이름을 공유하지 않는 경우 모든 충돌 경로를 추가하는 것이 좋습니다. –

답변

3

빈은

echo HASH_OF_COMMON_COMMIT >> .git/info/grafts 

다음 log --max-parents=0 다른 모든 뿌리를 찾을 수 log -1와 해시에

git commit -m "Common commit" --allow-empty 

모습을 저지하고 부모없이 이식에 파일 추가 생성하고 각각에 대해 추가 자신의 위 해시를 부모로하는 이식 파일에 해시

each HASH_OF_ROOT HASH_OF_COMMON_COMMIT >> .git/info/grafts 

그리고 이제 병합하십시오!

그래프트 파일은 커밋의 부모를 변경하는 방법이며 일단 모든 리포지토리에 공통 커밋이 있으면 리포가 병합을 허용해야합니다.

4

관련없는 분기의 문어 병합 문제를 해결할 수있었습니다. 다음은 실제 병합 충돌이없는 단순한 경우에만 적용됩니다.

  1. OP에 설명 된대로 병합하십시오. 갈등에 대한 주장은 "실패"합니다. 그러나 인덱스에 변경 사항은 없지만 병합이 수행되었으며 그 사실이 기록되었습니다.
  2. read-tree 명령을 사용하여 인덱스에 가지 내용을 추가

    git read-tree a/master b/master c/master d/master

    이 나무 작업에 영향을주지 않습니다 만 인덱스가 업데이트됩니다.

    분기가 완전히 독립적이지 않은 경우 분기가 이전 분기의 내용을 덮어 쓰는 것을 염두에두고 분기를 조정하십시오.

  3. 정상적으로 커밋하십시오.
  4. 일관된 작업 트리를 얻으려면 하드 리셋 (git reset --hard)을 수행하십시오.

나중에이 커밋을 편집하고 수정할 수 있지만 개인적으로 시도하지 않았다고 가정합니다.

+0

아마도'git read-treeree ... '대신'git read-tree ...'를 의미 할 것입니다. 또한 4 단계에서'git reset -hard'와 같은 각 단계에 대한 코드 예제를 제공하면 독자들에게 감사 할 것입니다. –

+0

아, 실제로'read-tree'. 이를 명확히 해 주셔서 감사합니다. – Vertigo

+1

다른 사람이 알아 내는데 어려움이있는 경우 :'git merge' 명령에서 병합 할 브랜치의 이름을 포함하지 않는 동안'git read-tree' 명령에 포함시켜야합니다. – dave4420