2017-09-03 13 views
0

우리는 힘내 버전 제어에서 몇 가지 별개의 메이븐 프로젝트가 있습니다. 이제이 프로젝트들을 집계 POM 아래 maven 다중 모듈 프로젝트로 결합하고이 다중 모듈 프로젝트를위한 새로운 저장소를 만들고 싶습니다.힘내, 어떻게 하위 모듈을 사용하지 않고 역사를 보존 여러 프로젝트를 결합

그러나 이러한 집계 된 프로젝트의 기록을 잃고 싶지는 않습니다. 집계 프로젝트를위한 새로운 저장소를 초기화하고 작업 트리 아래의 기존 저장소를 복제하려고했습니다. 그러나 이러한 하위 저장소는 암시 적으로 하위 서브 모듈로 간주되며 하위 하위 API의 팬이 아닙니다. 나는 다른 개발자들에게 너무 애매하다고 생각하며, 실제 필요없이 너무 많은 것을 복잡하게 만든다.

나는 그 저장소의 히스토리를 새 집계 저장소에 어떻게 든 병합하고 싶습니다. 내역을 병합 한 후 원래 저장소와 동기화하고 싶지 않지만 하위 모듈이없는 새 집계 저장소에서 버전을 모두 제어 할 수 있습니다. 그래도 병합 된 저장소에 대한 특정 커밋을 체크 아웃하고 싶습니다.

힘내에서 가능합니까?

+0

문제를 해결하는 데 유용한 답변을 얻었습니까? 그렇다면 답변으로 표시 할 수 있습니다. 또한 비슷한 질문을하는 사람들에게도 도움이 될 것입니다. –

답변

1
  1. 새 저장소를 초기화하십시오.

  2. 여러 프로젝트에서 원하는 버전의 파일을 복사하여 함께 결합하십시오. 필요한 경우 디렉토리 구조를 재정렬 할 수 있습니다. 파일에 예상되는 내용이 있는지 확인하십시오.

  3. 설정 .gitignore, .gitattribute 등 모든 항목을 추가하고 새 repo에 대한 첫 번째 커밋을합니다.

  4. 여러 프로젝트에서 분기를 가져와 -s ours 옵션으로 병합하십시오. ours 전략은 실제 내용이없는 기록 만 병합합니다.

예 :

의 우리가 RepoA, RepoB 및 RepoC, 모든 분기 master을 가지고 있다고 가정 해 봅시다. 우리는 세 가지 브랜치의 최신 버전의 파일을 병합 할 것입니다.

git init RepoABC 
cd RepoABC 
#copy the files all RepoA, RepoB, RepoC and rearrange the directory structure if necessary. 
#add .gitignore, .gitattribute, etc if necessary. 
git add . 
git commit -m 'new root for combining RepoA RepoB and RepoC' 
git fetch origin_repoa master:repoa_master 
git fetch origin_repob master:repob_master 
git fetch origin_repoc master:repoc_master 
git merge repoa_master repob_master repoc_master -s ours -m 'Merge and preserve the histories of RepoA, RepoB and RepoC, with merge strategy "ours"' 

이제 새로운 repo의 분기에 중점을두고 새로운 변경을 할 수 있습니다. 역사는 유보되었고 우리는 그 역사를 되돌아 볼 수 있습니다. 디렉토리 구조가 재정렬 된 경우 처음 커밋을 체크 아웃 할 때 약간의 문제가 발생할 수 있습니다. 새 폴더와 파일은 커밋이 체크 아웃 된 후 untracked 파일로 유지됩니다. git clean -df은 건너 뛰기 때문에 rm -rf 번만 입력해야합니다.

1

네, 자식에게는 가능합니다.

두 가지의 repos는/프로젝트를 결합 할 필요가 있다고 가정하고, 각 REPO에 대해 서로 다른 가지가 있습니다 : 새에 masterdev2

:

Repo1 : masterdev1

Repo2을 repo를 사용하여 프로젝트를 아래의 명령과 결합 할 수 있습니다.

git init 
# make changes and commit on master branch if you want to combine the aggregated projects in non-master branch 
git remote add repo1 <URL for repo1> -f 
git remote add repo2 <URL for repo2> -f 
git checkout -b repo1_master repo1/master 
git checkout -b repo1_dev1 repo1/dev1 
git checkout -b repo2_master repo2/master 
git checkout -b repo2_dev2 repo2/dev2 

이제 repo1 및 repo2의 모든 분기가 분기에 새로 생성 된 저장소에 집계됩니다. repo1_master, repo1_dev1, repo2_masterrepo2_dev2. repo1 및 repo2를 더 이상 변경할 필요가없는 경우 리모컨을 제거 할 수 있습니다.

git remote rm repo1 
git remote rm repo2