내 작업 git 저장소의 원격 git 저장소를 하위 디렉토리로 병합하고 싶습니다. 결과 저장소에 두 저장소의 병합 된 기록이 포함되고 병합 된 저장소의 각 파일이 원격 저장소에있는 것처럼 기록이 유지되기를 원합니다. How to use the subtree merge strategy 에서 언급 한대로 하위 트리 전략을 사용해 보았지만 해당 절차를 수행 한 후 결과 저장소에는 실제로 두 저장소의 병합 된 기록이 포함되어 있지만 원격 저장소에서 오는 개별 파일은 해당 기록을 유지하지 않습니다. ( 'git log'는 "Merged branch ..."라는 메시지 만 표시합니다.)
또한 두 개의 결합 된 git 저장소가 더 이상 분리되는 것을 원하지 않기 때문에 하위 모듈을 사용하고 싶지 않습니다.
원격 저장소에서 가져온 개별 파일이 기록을 유지하는 하위 디렉토리로 다른 저장소의 원격 git 저장소를 병합 할 수 있습니까?
도움을 주셔서 대단히 감사합니다.
편집 : 현재 git filter-branch를 사용하여 병합 된 저장소 기록을 다시 쓰는 솔루션을 시도하고 있습니다. 작동하는 것 같지만 좀 더 테스트해야합니다. 나는 내 결과를보고하기 위해 돌아갈 것이다.
편집 2 : 원격 저장소의 파일 기록이 명백하게 손실되는 결과로 git의 하위 트리 전략과 함께 사용한 정확한 명령을 더 명확하게 제공하기를 바랍니다. A를 현재 작업중인 git repo로하고 B를 A에 하위 디렉토리로 통합하려는 git repo를 지정합니다. 다음을 수행했습니다.
git remote add -f B <url-of-B>
git merge -s ours --no-commit B/master
git read-tree --prefix=subdir/Iwant/to/put/B/in/ -u B/master
git commit -m "Merge B as subdirectory in subdir/Iwant/to/put/B/in."
이 명령을 실행 한 후 subdir / Iwant / to / put / B / in 디렉터리로 이동하면 B의 모든 파일이 표시되지만 git log그중 하나에 "Merge B as subdir in subdir / Iwant / to / put /큰 상자." B에있는 파일 기록은 손실됩니다.
어떤 것 (나는 자식에 초보자이야 이후 내가 잘못 될 수있다) 작업으로 다음과 같다 :
git remote add -f B <url-of-B>
git checkout -b B_branch B/master # make a local branch following B's master
git filter-branch --index-filter \
'git ls-files -s | sed "s-\t\"*-&subdir/Iwant/to/put/B/in/-" |
GIT_INDEX_FILE=$GIT_INDEX_FILE.new \
git update-index --index-info &&
mv "$GIT_INDEX_FILE.new" "$GIT_INDEX_FILE"' HEAD
git checkout master
git merge B_branch
filter-branch에 대한 위의 명령은에서 가져 왔습니다 git help filter-branch. 여기서 저는 subdir 경로 만 변경했습니다.
gitk역사에 대해 말할? 나는 과거에 git subtree merge를 성공적으로 사용했습니다. 정확한 명령을 공개 할 수 있을까요? git-filter-branch가 올바른 접근 방식인지 잘 모르겠습니다. 새로운 기록을 합성하기 위해 git-fast-export 및 git-fast-import를 시도하는 것이 좋습니다.