Git
깃허브 forked repository에서 잔디가 안심어지는 문제 해결
morethanmin-blog 리포지토리에서 포크해온 이 블로그 리포지토리를 제 입맛에 맞게 수정하고 있었습니다. 지금 보고 계신 이 블로그 맞습니다.
엥 그런데 웬 걸?
default
브랜치에 열심히 커밋하고 푸시해왔는데, 알고보니 깃허브 잔디가 하나도 심어지지 않고 있었다는 말입니다. 이…이건 못참아!빨리 알아차리지 못한 이유는 vercel에서
main
브랜치로 푸시되는 것을 감지하고 알아서 자동 배포되고 있었기 때문입니다. 그리고 하나 더, 어제 깃허브 서버 상태가 좋지 않아서 그 문제겠지~ 내일 되면 알아서 심어져 있겠지 생각했습니다.깃허브 서버 상태 보는 법 : https://githubstatus.com/
그런데 알고보니
fork
해온 리포지토리는 PR
(Pull Request)할 때만 잔디가 심어지고 Commit
과 Push
는 Contribution으로 인정해주지 않는다고 합니다.상당한 삽질 끝에 해결 방법을 찾아냈습니다. 역시 깃헙. 찾아보면 해결 못하는 방법이 없습니다. 방법을 요약하자면,
forked repository
를 새repository
에 복사해오면 이전commit
기록들도 복사되어contribution
으로 인정받습니다. 즉, 잔디가 심어진다는 말입니다.
해결 방법
A 저장소를 B 저장소로 복사하는 과정입니다.
1. 깃허브 새 저장소 생성하기
깃허브에서 기존에 포크된 저장소를 복사할 자신만의 새 저장소를 만듭니다. 이 과정에서는 복사할 저장소를 A 저장소, 복사받을 저장소를 B 저장소로 지칭하겠습니다.
깃허브에서 B 저장소를 새로 만들어줍니다.
2. bare clone
하기
git clone --bare "A저장소 깃허브 주소"
베어 클론을 하게 되면 평소에는 보지 못했던 디렉토리가 아래와 같이 생성됩니다.
3. 새 저장소로 push —mirror
하기
cd "B저장소 로컬 폴더 위치" git push --mirror "B저장소 깃허브 주소"
미러 푸시를 하게되면 A저장소(이전 저장소)의 커밋 로그와 내용을 함께 푸시하게됩니다.
4. 새 저장소 클론받기
cd "B저장소 로컬 폴더 위치"
이제 B 저장소(새 저장소)를
clone
받아오면 작업 중이던 파일과 디렉토리, 커밋 로그를 그대로 복사해올 수 있습니다.4. A 저장소 git 파일 삭제
cd .. rm -rf old-repo.git