[Git] Fork한 레포지토리의 커밋을 잔디에 반영하고 싶다면? Git Mirror Push (feat. 우테코)

pgmjun·2023년 10월 22일
101

Git

목록 보기
1/1
post-thumbnail

우테코 미션 진행과 함께 발생한 잔디 탈모 증상 😭

우테코 미션을 진행하면서 하루 종일 잡고있던 날이 며칠 생기다보니, 이렇게 잔디에 탈모가 진행되어버렸다ㅋㅋ.. 때문에 이를 해결하기 위한 방법을 학습하게 되었고 함께 6기를 준비하는 프리코스 사람들에게 공유하면 많은 도움을 줄 수 있을 것 같아서 이렇게 글을 작성하게 되었다.



왜 커밋했는데 잔디가 안 채워질까? 🤔

이유는 바로 Fork한 레포지토리이기 때문이다.

Fork란 어떤 원격 저장소(Remote Repository)를 자신의 원격 저장소로 복사하는 것이다.

여기서 일반적인 레포 복사인 clone과 다른 점은
브랜치 분기와 같이 원본 레포지토리에서 새로운 레포지토리를 분기하는 느낌이라는 점이 다르다.

💡 주로 오픈소스에 기여하는 것과 같이 다른 레포지토리에 변경을 주고 싶을 때, Fork한 브랜치에서 코드를 변경하고 이를 실제 레포지토리에 반영하기 위해 PR을 하는 방법으로 사용된다.


Fork한 레포지토리에선 변경 사항이 발생하고, 변경 사항을 반영하기 위해 Upstream 레포지토리에 PR을 날리는데
그 내용이 Upstream 레포지토리의 default 브랜치에 반영되었을 때, 커밋 내용에 대한 잔디가 채워진다.


하지만 우테코 레포지토리로 보내는 PR은 제출 용도이기 때문에 merge되지 않을 것이며,
만약 merge를 해주려 한다고 해도 몇천 개나 되는 PR을 main 브랜치로 머지하려는 순간, 어마무시한 conflict가 발생할 것이다.

그럼 나는 커밋을 했음에도 불구하고 잔디는 심을 수 없는 걸까?

그렇지 않다. 이 역시 해결할 수 있는 방법이 있다.
해결책으로 Mirror Push라는 것이 존재한다.



커밋을 복사해올 레포지토리 생성 📂

지금 하려는 것은 Fork한 레포지토리에 했던 커밋을, 개인 레포지토리로 옮겨오는 작업이기 때문에
복사한 커밋을 붙여넣을 레포지토리를 생성한다.


일단 이렇게 붙여넣기 할 레포지토리가 생성되면 된다.



복사한 Fork 레포지토리 링크 복사 ✨

복사할 fork 레포의 링크를 복사한다.



로컬 환경에 레포지토리를 bare clone ✨

$ git clone --bare https://github.com/githubID/forkedRepository.git
  • 본인 로컬 환경에 포크한 레포지토리를 bare clone한다.

🤔 bare clone이 뭔데요?

간단히 말해서 git clone --bare를 사용하면 저장소의 히스토리브랜치 정보만을 가지는 "가벼운" 복제본을 만들게 됩니다. 일반적으로 개발자가 작업할 필요 없는 경우에 사용됩니다.
주로 원격 저장소의 백업이나 공유 목적으로 사용됩니다.



Mirror Push ✨

$ cd forkedRepository.git
$ git push --mirror https://github.com/userID/newRepository.git
  • 클론한 fork 레포지토리폴더로 이동하고 커밋을 복사할 new 레포지토리의 주소 입력하여 mirror push 한다.

🤔 mirror push가 뭔데요?

mirror push는 Git 저장소를 거울(mirror)을 통해 완전히 똑같은 모습으로 반사하듯이 푸시(push)하는 작업을 의미합니다. 이것은 원격 저장소를 다른 원격 저장소로 완전히 복제하는 작업을 나타내며, 주로 백업 또는 다른 환경으로 저장소를 복제할 때 사용됩니다.



복사 완료 ✅

그럼 이렇게 new 레포지토리fork 레포지토리에 커밋한 내용들이 반영되는 것을 확인할 수 있다.

메인 페이지에서 잔디까지 채워지는 것을 확인할 수 있었다.

🚨 주의할 점

만약 모든 설정을 끝마쳐 Mirror Push가 반영되었음에도 불구하고 깃 커밋 내역이 반영되지 않아
잔디가 그대로라면, Mirror push한 브랜치의 default 브랜치를 표시하길 원하는 커밋이 담긴 브랜치로 변경하여 해결할 수 있을 것이다.
이는 default 브랜치의 커밋 내역이 commit 내역으로 출력되는 것이기 때문이다.

profile
하나씩 천천히 깊이있게 쌓아가는 백엔드 개발자 최승준입니다.

12개의 댓글

comment-user-thumbnail
2023년 10월 22일

감사합니다. 덕분에 잘 반영했습니다.

1개의 답글
comment-user-thumbnail
2023년 10월 25일

새로운 커밋 할 때마다 mirror push를 해줘야하는건가요?

1개의 답글
comment-user-thumbnail
2023년 10월 31일

안녕하세요 정말 좋은 글 잘 보고 있습니다. 한가지 궁금한점이 있는데
오른쪽에 보면 목차와 이모티콘? 이런거는 어떻게 설정하는 건가요??

1개의 답글
comment-user-thumbnail
2023년 10월 31일

허걱 너무 좋은 글 감사해요 ☺️!

1개의 답글
comment-user-thumbnail
2023년 11월 1일

정말 알기 쉽게 설명을 잘 해놓으셨네요. 좋은 글 감사합니다!

1개의 답글
comment-user-thumbnail
2023년 11월 4일

감사합니다 :) 덕분에 잔디 채울 수 있었어요!

1개의 답글