두 리포지토리를 함께 붙이고 외부 종속성을 관리하는 것이 아니라 모든 방식으로 보이도록하면 대답이 훨씬 간단합니다. 원격 저장소를 기존 저장소에 추가하고 새 저장소에 병합하고 파일 및 폴더를 하위 디렉토리로 이동 한 다음 이동을 커밋하고 모든 추가 저장소에 대해 반복하면됩니다. 하위 모듈, 하위 트리 병합 및 고급 rebase는 약간 다른 문제를 해결하기 위해 만들어졌으며 내가하려는 일에 적합하지 않습니다.
다음은 두 개의 저장소를 서로 연결하는 Powershell 스크립트의 예입니다.
# Assume the current directory is where we want the new repository to be created
# Create the new repository
git init
# Before we do a merge, we have to have an initial commit, so we'll make a dummy commit
git commit --allow-empty -m "Initial dummy commit"
# Add a remote for and fetch the old repo
git remote add -f old_a <OldA repo URL>
# Merge the files from old_a/master into new/master
git merge old_a/master --allow-unrelated-histories
# Move the old_a repo files and folders into a subdirectory so they don't collide with the other repo coming later
mkdir old_a
dir -exclude old_a | %{git mv $_.Name old_a}
# Commit the move
git commit -m "Move old_a files into subdir"
# Do the same thing for old_b
git remote add -f old_b <OldB repo URL>
git merge old_b/master --allow-unrelated-histories
mkdir old_b
dir –exclude old_a,old_b | %{git mv $_.Name old_b}
git commit -m "Move old_b files into subdir"
그 대신에 old_b를 old_a (새로운 결합 저장소가 됨)로 병합하는 대신 스크립트를 수정하십시오.
진행중인 기능 분기를 가져 오려면 다음을 사용하십시오.
# Bring over a feature branch from one of the old repos
git checkout -b feature-in-progress
git merge -s recursive -Xsubtree=old_a old_a/feature-in-progress
그것은 프로세스의 유일한 명백한 부분입니다-그것은 하위 트리 병합이 아니라, 일반적인 재귀 병합에 대한 인수로, Git에게 대상의 이름을 변경했으며 Git이 모든 것을 올바르게 정렬하도록 도와줍니다.
여기에 좀 더 자세한 설명을 썼습니다 .