[틀린내용이 있을 수 있습니다.]
1. 부모 리포지토리를 생성해준다.
부모 리포지토리안에 자식 리포지토리를 저장해서 폴더형식으로 구성할것이다.
study-inflearn-springMVC1이 부모 리포지토리이다.
2. 자식 리포지토리 생성해준다.
부모 리포지토리에 들어갈 자식 리포지토리를 생성한다.
study-inflearn-springMVC1-project1이 자식 리포지토리
study-inflearn-springMVC1-project2 또한 자식 리포지토리이다.
3. 부모리포지토리를 생성했을시 아무파일도 없는 상태일것이다.
3-1. 부모 리포지토리를 clone한다. GitBash 프로그램을 키고, clone된 리포지토리가 저장되길 바라는 위치로 이동후
git clone 부모리포지토리깃주소 를 해준다.
3-2. 자식 리포지토리를 remote 추가해준다. ( 원격저장소 이름은 임의로 정한다.
git remote add 원격저장소이름 원격저장소깃주소
3-3. 이 상태에서 subtree를 생성하면 오류가 발생한다.
오류발생 fatal: ambiguous argument 'HEAD': unknown revision or path not in the working tree.
해결방법
1. (부모리포지토리에 아무 파일이 없다) 부모리포지토리에 readme 파일을 생성해서 커밋해주고, push한다.
2. 자식 리포지토리를 fetch 한다. git fetch 등록한자식remote이름
3-3. subtree를 생성해준다.
부모 리포지토리에 폴더를 생성하고 그 폴더에 자식리포지토리의 내용을 복사해서 넣는 과정이다.
git subtree add --prefix 원하는폴더이름 원격저장소이름 main
(폴더에 자식리포지토리의 main브런치에 있는 코드가 복사된다.)
3-4. git push
push를 해줌으로서 부모리포지토리에 폴더가 생성되고 코드가 복사되어있는것을 확인 할 수 있다.
그 이후
자식 리포지토리 (study-inflearn-springMVC1-project1)에 새로운 커밋이 생겼다고 해보자.
(project1을 로컬에서 작업후 커밋,push 한 경우 )
(주의 : 자식프로젝트에서 git remote -v 를 해보자. 깃주소가 자기자신깃주소로 되어있어야한다.
부모 리포지토리 주소로 되어있으면, git remote remove origin 후 git remote add origin 깃주소로 다시 등록하자)
자식 리포지토리에 새로운 커밋이 생기며 코드의 수정사항이 생겼지만 부모리포지토리 폴더안에
저장된 코드는 변경되지않는다.
폴더,즉 서브트리에도 변경사항에 대한 업데이트를 해줘야한다. (부모 리포지토리에서 진행해야한다)
git subtree pull --prefix 폴더명 원격저장소이름 main 을 해줘서 자식원격저장소의 main브런치에 있는 내용을 가져온다. (자신의 부모리포지토리로컬저장소에 변경된내용을 다운받게된다)
예)
부모리포지토리로컬저장소에는 프로젝트2 리포지토리의 수정사항이 project2Forder에 업데이트됬다.
하지만 깃허브에 있는 부모리포지토리에는 아직 업데이트된것이 반영되어있지않으므로
git bash를 부모리포지토리로컬저장소위치에서 git pull origin main 해주면 부모리포지토리로컬저장소의 내용을 깃으로 올려준다.
자식리포지토리에 변화가 생겼을때 순서
1. 로컬부모리포지토리에서 git subtree pull --prefix 폴더명 원격저장소이름 main를 해서 로컬부모리포지토리를 최신화 시킨다.
2. git pull origin main을 해서 깃부모리포지토리도 최신화 시킨다.
커밋내역은?
자식리포지토리는 각각 자신의 커밋내역을 가지고,
부모리포지토리는 모든 자식 리포지토리의 커밋내역도 가지고 있는다.
부모 리포지토리에서는 git subtree push를 하거나, git subtree pull를 하거나 , git push origin main을 하거나 했을때 생기는 커밋내역과 함께 모든 자식리포지토리의 커밋내역도 보인다.
서브트리를 추가하면서 해당 서브트리에 자식리포지토리를 복사할때 커밋내역도 같이오고,
subtree pull을 할때 해당 자식리포지토리의 추가된 커밋내역도 가지고오면서, pull에 대한 커밋내역도 기록된다.
'git' 카테고리의 다른 글
git)submodule (서브모듈) (0) | 2023.01.29 |
---|---|
git)로컬저장소를 원격저장소의 파일들로 강제로 덮어쓰기하는법(fetch,reset --hard) (0) | 2022.10.09 |
git ignore 파일 적용하기 [미완] (1) | 2022.10.06 |
댓글