2013-07-25 2 views
1

git을 사용하여 프로젝트를 재구성해야합니다. 이 프로젝트는 현재 3 개의 분리 된 (중심적인) 저장소를 가지고 있으며 많은 수의 파일을 그 사이에서 앞뒤로 움직일 필요가 있습니다. 이렇게하는 동안 각 저장소에서 계속 개발이 진행되며 구조 조정에는 다소 시간이 걸릴 것입니다. 필자는 각 리포지토리의 마스터에서 리팩터링 분기를 지속적으로 리베이스했습니다.여러 리포지토리에 걸쳐 복잡한 리팩토링을 수행하는 가장 좋은 방법은 무엇입니까?

리포지토리 전반의 히스토리를 보존하고 리포지토리 전체에서 git의 리터 병합 논리를 활용하는 방식으로 복잡한 교차 리포지토리 리팩터링을 수행하는 방식이 정립되어 있습니까? 예를 들어 모든 repos를 세 번째 리포지토리로 이동하고 병합하고 뒤로 이동 하시겠습니까?

효과적으로 3 개의 저장소 A, B 및 C가 있습니다. B에서 A 및 C로 파일을 이동하고 기록을 보존하려고합니다. 이것은 하나의 디렉토리의 단순한 이동이 아니라 새로운 위치로 옮겨지고 이름이 바뀌었고 업데이트 된 파일 등 많은 수의 개별 파일입니다. 나는 A, B 및 C 파일을 이동하고 업데이트하는 작업을하고 있지만 분명히 그렇지 않습니다. 저장소를 통해 이동되는 파일의 기록 보관. 새로운 저장소 D를 만들고, 하위 디렉토리로 A, B, C를 임포트하고, A, B, C에 대한 각각의 커밋을 병합하여 rebuase하여 git가 이해할 수 있도록 D에 새로운 큰 커밋을 만들 수 있다고 상상합니다. 그 파일은 한 곳에서 제거되고 다른 곳에서 삭제 된 것뿐만 아니라 이동되어 변경 사항을 각 개별 저장소에 다시 적용 할 수 있습니까?

+0

다소 모호합니다. "현명한 분기를 사용 하시겠습니까?"를 넘어서 우리가 제공 할 수있는 조언은 무엇입니까? 아마 당신은 좀 더 명확하고 구체적으로 문제를 설명 할 수 있습니다. –

+0

명확한 질문이 업데이트되었습니다. – SoftMemes

+0

이 모든 것이 왜 필요합니까? 개발 지점, 분기 지점 등을 보유하고 있습니까? 너 dogfood? –

답변

1

저장소 B의 파일을 준비하기 위해 repo B를 가져 와서 복제하고 파일을 변경하려는 모든 수정 (위치 이동, 이름 바꾸기, 업데이트 등)을 수행 할 수 있습니다. filter-branch을 사용하여 원하지 않는 삭제 기록을 다시 쓸 수도 있습니다 경로/파일. 준비가되면 저장소 A에서 분기로 가져올 수 있습니다. 그런 다음 분기를 마스터 분기로 병합합니다. 예, 자식은 서로 다른 저장소의 브랜치를 병합 할 수 있습니다. 역사가 재미있게 보입니다. 두 점 (초기 커밋)이 병합됩니다.

Repo C와 동일하게 수행하십시오.

+0

그래, 제 경우는 비슷합니다. 원래의 저장소에서 목적지까지의 이후 변경 사항을 다시 동기화 할 수 있기를 원합니다. 스크립트를 사용하여 모든 구조 조정을 다시 실행 한 다음 다시 병합하려고합니다. 미친 갈등없이 이것이 가능한가? – inger

+0

@inger 와우, 꽤 귀찮을 수 있습니다. 그러나 git가 특정 파일 경로가 아닌 파일 내용을 추적하기 때문에 변경 내용이 너무 광범위하지 않은 경우 체리 피킹이 가능합니다 (그러나 변경된 파일 만 새로 추가되거나 제거되지 않습니다). 불행히도 그것은 매우 신뢰할 수 없으므로 가능한 경우 그러한 작업 흐름을 피하십시오. 더 자세하고 더 새로운 요구 사항을 설명하십시오. 아마도 http://git-scm.com/book/en/Git-Tools-Subtree-Merging을 사용할 수 있습니다. – kan

+0

빠른 답장을 보내 주셔서 감사합니다. 문맥은, repos A, B에 2 개의 제품 라인이있다 - 새로운 I는 이것을 C로 병합했다 (구조 조정 후에 : mv, rm); 그러나 A, B는 아직 잠시 동안 살아 있어야합니다. 처음에는 커밋에 의해 트리거 된 스크립트를 사용하여 하위 트리를 만들 것이라고 생각했습니다. 그러나 계층 구조 수준을 높이고 싶지는 않습니다. 어쨌든 (나는 희망합니다) 문제를 마스터와 동기화 된 "reorg"브랜치를 유지하고, 마스터에 동일한 mv/rms를 반복적으로 적용합니다. 충돌의 유일한 이유는 병합 된 구조가 일치하더라도 이전 구조 이전의 병합 - 기반입니다. – inger

관련 문제