2016-07-21 2 views
1

this question의 역함환을 수행해야합니다.2 개의 Git 리포지토리를 하나의 스냅 샷과 현재 히스토리로 결합하는 방법은 무엇입니까?

거의 1 년 전 우리는 Git 저장소를 새로운 저장소에 두 지점의 현재 상태를 복사하여 분리했습니다. 간단하게하려면

<== 2015 Dec    1 Jan     2016 Jan ==> 
Past history, till SVN New Repo First Commit All commits to present 

우리 것 곧 자신의 Git 저장소로이 저장소에있는 프로젝트의 각을 설정하는 서브 트리를 사용하여, 그러나 나는 우리가 5 년 누락으로 너무 오래 그렇게하고 싶지 않아 중앙 저장소에서 커밋 된 내역. 여기에 지금까지 시도한 단계는 다음과 같습니다

cd ProjectFull/ 
git reset --hard # Project was in a branch 
git checkout master # Go to master before trying to rebase 
git remote add ProjectSplit ../ProjectSplit # New repository is in another directory 
git fetch ProjectSplit # Fetch new repository 
git cherry-pick <initial commit hash> --strategy-option theirs 
git pull --rebase -s recursive -X theirs origin master 

내 생각이었다 커밋 새로운 REPO의 초기을 체리 - 선택하고 그 커밋 떨어져 리베이스,하지만 실패합니다. 위에 나열한 명령은 오류가 발생하지 않지만 이전 저장소의 모든 기록을 삭제합니다. 이전 REPO의 패치를 통해 중간 실패

$ git rebase origin dev 
First, rewinding head to replay your work on top of it... 
Applying: Merge branch 'dev' of <REPO> into dev 
Using index info to reconstruct a base tree... 
<stdin>:298480: trailing whitespace. 

<stdin>:298553: trailing whitespace. 

<stdin>:298559: trailing whitespace. 

<stdin>:298565: trailing whitespace. 

<stdin>:298571: trailing whitespace. 

warning: squelched 1751272 whitespace errors 
warning: 1751277 lines add whitespace errors. 
Falling back to patching base and 3-way merge... 

CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
CONFLICT (add/add): Merge conflict in <FILE> 
Auto-merging <FILE> 
<Same> 

Failed to merge in the changes. 
Patch failed at 0001 Merge branch 'dev' of <REPO> into dev 
The copy of the patch that failed is found in: 
    ProjectFull/.git/rebase-apply/patch 

When you have resolved this problem, run "git rebase --continue". 
If you prefer to skip this patch, run "git rebase --skip" instead. 
To check out the original branch and stop rebasing, run "git rebase --abort". 

The script이 대답 :

여기 내 힘내 REBASE의 잘린 로그입니다.

This answer은 다른 저장소에서만 작동합니다. ,

은 바느질의 repos

펄 CPAN가있다 이눔 아 - 스티치 REPO를 고려

+0

어떻게 리베이스가 실패합니까? 어떤 메시지? 이것은 나에게 rebase 시나리오처럼 보인다. – harmonica141

+0

늦은 답장 @ harmonica141에 대해 유감스럽게 생각합니다. 오늘까지 작업을 다시 시작하지 않았고 곧 다시해야하므로 곧 다시 초점을 맞 춥니 다. – NobleUplift

+0

a) 공백 오류를 추적 할 수 있었습니까? b)'실패한 패치의 복사본이 : ProjectFull/.git/rebase-apply/patch'에서 언급 한 폴더의 내용입니까? 무엇이 포함되어 있습니까? 거기에 커밋 하나만 있습니까? – harmonica141

답변

1

귀하의 마일리지가 다를 수 있고, 내가 잘 질문 의도를 오해 할 수있다, 그래서 나는 짧은 요약 옵션을 제안합니다 nice module은 그 유선이 git fast-export에서 git fast-import까지 간다.

히스토리를 선형화해야합니다.

서브 디렉토리 옵션

하나가 아닌 두 개의 dir을가집니다. 또는 multiple dirs.

이미 절차를 따르고 있습니다. 귀하의 질문에서 마지막 체리 피킹을 포기하고 현재 하나의 디렉토리에 old 레포를 가지고 있습니다.

최소한의 성가신, 그냥 glues 함께 repos. 역사를 선형화하려고 시도하지 않습니다.

힘내 트리는

Merge subtree가 힘내 명령 서브 트리 및 서브 모듈 (이하 관리 무거운) 모두보다 사용하기 쉽게 병합.

개별 파일 (병합 후)에 대해 git 로그를 볼 때 --follow을 사용해야 할 수도 있습니다.

재검토 왜 당신은 도움이 될 것입니다 그것을

은 특정 있습니까해야합니까? 당신이 ELK에 그 늙은 망할 놈 로그를 먹이면, 당신의 동료들 (그리고 너 자신)을 더 잘 맞출 수있는 색인 된 검색을 할 수 있을까요? Kibana에 대시 보드를 설치할 가능성이 있습니까? 또는 이전 repo가있는 컴퓨터에 git instaweb을 설정하면 사람들이 웹을 통해 탐색 할 수 있으므로 요구 사항을 충족시킬 수 있습니까?

는 자식 병합-의 repos 시도하지 마십시오

을 고려, 그래서 권장하지 않습니다,하지만 it's apparently for just such an occasion와 자식-스티치 REPO 어렸을 때이 작성되었습니다. 체크 아웃 할 가치가 있습니다. 일부 재 작성

은 자식 필터 지점으로, 또한 an option with some history rewrite 있습니다. 아마도 BFG로도 가능할 것입니다.

+0

나는이 모든 것을 내일 아침에 조사 할 것이다. – NobleUplift

+0

지난 주에'git-stitch-repos'를 시도했지만 저의 저장소는 master와 dev 사이에 많은 합병점이있어서 작동하지 않았습니다. 다음으로 나는'git merge-repos'를 시도했지만, repo (ProjectFull, ProjectSplit)의 최상위 레벨에 두 폴더를 놓습니다. 그러면이 저장소에 대한 각 하위 폴더가 만들어 질 때 Full 및 Split 히스토리 모두를 유지할 수 없습니다. 자체 저장소. – NobleUplift

관련 문제