기존 frontend레포지토리를 backend프로젝트와 root프로젝트에 합치려고 하는데
frontend 레포지토리 삭제 후 root에서 새로 레포지토리를 만들면 그동안 커밋 기록이 삭제됩니다.
frontend 프로젝트에 커밋했던 히스토리를 유지한 채 합치려고 합니다.
**병합 완료한 레포지토리는 삭제**
만약 별도 레포지토리로 유지하며 관리할 경우 subtree나 submodule 방식을 이용합니다!!
1. root 레포지토에 frontend 추가
실행 이후 root레포지토리의 staged Changes에 frontend 파일이 추가된다.
#root 경로에서
#frontend라는 이름의 디렉토리를 스테이징(staging) 상태에 추가
git add frontend
2. frontend 레포지토리의 master 브랜치를 root 레포지토리의 서브디렉토리로 병합
# frontend 경로에서
# pwd 명령어로 현재 경로 확인
git fetch frontend
git merge frontend/master --allow-unrelated-histories
** 2번 수행 중 에러 **
* $ git fetch frontend git merge frontend/master --allow-unrelated-histories fatal: detected dubious ownership in repository at '{프로젝트 경로}/.git'
- "dubious ownership": frontend 레포지토리의 .git 폴더가 현재 사용자와 다른 사용자(관리자)에 의해 소유되고 있다는 경고입니다. 이 문제는 보통 권한 문제로 인해 발생할 수 있습니다.
- frontend 디렉토리를 안전한 디렉토리로 등록합니다:
git config --global --add safe.directory '{프로젝트 경로}/.git'
* ' {프로젝트 경로}/ .git' fatal: Could not read from remote repository. Please make sure you have the correct access rights and the repository exists. merge: frontend/master - not something we can merge
- frontend 레포지토리가 로컬에 존재하는 경우, 원격 리포지토리의 설정이 올바르게 되어 있는지 확인해야 합니다.
- frontend 레포지토리의 브랜치 목록을 확인
git branch -r
원격 저장소 추가
git remote add frontend /path/to/frontend
#로컬 디렉토리에서 저장소를 추가
#로컬 경로를 원격 저상소로 사용하면 내 컴퓨터가 서버 역할을 하게 됩니다.
git remote add frontend /home/user/projects/frontend
#원격 Git 서버에서 저장소를 추가
git remote add frontend https://github.com/user/frontend.git
에러 해결 후 아래의 로그가 나오면 성공한 것.
$ git fetch frontend remote: Enumerating objects: 113, done.
3. 병합 후 커밋
git add frontend
git commit -m "Merge frontend repo into root repository"
**3번 수행 시 에러**
* $ git merge frontend/master --allow-unrelated-histories error: Your local changes to the following files would be overwritten by merge: frontend Merge with strategy ort failed.
- root 레포지토리의 모든 변경 사항 커밋 (change에 있는거 삭제 or 커밋하기)
git add .
git commit -m "Merge frontend repository and include commit history"
4. 병합 후 결과 확인
- 커밋 로그 확인
git log --oneline
5. 병합 완료 한 레포지토리 확인 및 삭제
#원격 레포지토리 조회
git remote -v
#원격 레포지토리 삭제
git remote remove frontend
#해당 폴더가 Git 저장소인지 확인
git status
#로컬 레포지토리 삭제
rm -rf frontend/.git
6. (선택) 파일 정리
나는 기존 frontend가 이미 root프로젝트 안에 있는 상태에서 frontend 프로젝트가 레포지토리로 등록되어있었다.
그런데 병합 과정 중 submodule, subtree등을 시도하다가 frontend 프로젝트를 root프로젝트안에 또 추가해 버려서 파일이 중복되어 있는 상태였다.
- 중복된 파일을 히스토리기록 유지한 채 정리
#frontend 디렉토리로 파일 이동.
git mv public frontend/
git mv index.html frontend/
git mv css/ frontend/
git mv js/ frontend/
#커밋
git add .
git commit -m "Move frontend files to the frontend directory"
*mv 명령어 사용이유
방법 | Git의 추적 | 결과 | 수동 작업 필요 |
git mv 사용 | 자동 추적 | 파일이 이동됨 | X |
VSCode에서 직접 이동 | 자동 추적 안됨 | 새 파일 추가, 이전 파일 삭제 | O |
# 직접 파일 옮겼을 때
# git status 실행 결과
deleted: public
new file: frontend/public
# mv 명령어 사용
*옮기면서 뭐가 삭제됐는지 npm run serve로 실행이 안 돼서 다시 설치.
Remove-Item -Recurse -Force node_modules
npm install
'tool > git' 카테고리의 다른 글
git push error (non-fast-forward), git pull error(fatal: refusing to merge unrelated histories) (0) | 2024.02.25 |
---|---|
[Github] Repository 합치기, 다른 계정 Repository 복제 (0) | 2023.09.07 |
vscoed, git 연동 (repository copy, 복사 해오기) (0) | 2023.08.18 |