1. 깃허브에서 저장소 fork 하기
일단, sunflower와 now in android를 이미 fork를 해둬서,
다른 저장소에서 스크린샷을 찍었다.
2. fork할 때 브랜치를 어떻게 가져올까 고르는 옵션이 있다.
이때, 깃허브에 Copy tha main branch only라는 옵션이 있는데,
copy해올 원본 저장소의 branch를 싹다 가져올지, main만 가져올지 고르는 옵션이다.
단순 분석용이면, main브랜치만 가져오면 되고,
옛날 이력들 보면서 다른 브랜치에서 따서 작업을 해야하면, 저 옵션을 해제해서 모든 브랜치를 가져 오면 되는듯하다.
그러니까.. 저 옵션은 fork할때 branch를 '체크아웃'까지 해오는 기능인 것 같다.
2-1. fork한 저장소의 다른 브랜치가 필요했는데, 가져오지 않았을 경우.
sunflower앱 같은 경우에는 view브랜치가 있는데,
main브랜치만 가져와버려서, 어떻게 해야할지 삽질을 약간하게 되었다.
2-1-1. 원본 저장소를 내 저장소의 remote로 걸어서 가져오기.
- 내가 포크하려했던 구글의 샘플 저장소를 '원본 저장소'라고 하겠다.
- 내가 포크했던 저장소를 'fork remote 저장소라고 하겠다'
- 내가 포크했던 저장소에서 내 윈도우로 클론한 것을 'fork local 저장소'라고 하겠다.
구글링 해보면, upstream이라고 해서,
원본저장소를 (upstream) -> fork remote -> fork local 이런 3개의 층으로 나눠서 가져오는 것처럼 얘기를 하던데,
이거는 개념적인? 느낌이고
실제로는
remote가
1. 원본저장소(remote alias - upstream)
2. fork remote (remote alias - origin)
이렇게 2개가 되는거고,
이 두개의 remote저장소와 <-> fork local을 두고 작업을 하는 거였다.
fork local에서 원본 저장소로 push를 해도, push할 권한이 없어서 push는 안되는 듯했고,
(push를 하려면, 내가 저장소 오너이거나, 다른 유저를 collaborator로 넣어야하는듯했다.)
원본 저장소에 push가 아니라 pull request(PR)를 해야하는 듯하다.
- push는 local에서 remote로 코드를 반영하는 것이고,
- PR은 remote와 remote끼리 코드를 푸시를 전달하는 방법인듯하다.
각설하고,
원본저장소를 remote로 연결하는 방법은
윈도우에서 git을 사용하기 위해 탐색기를 열고,
git이 걸려있는 fork local의 디렉토리로 가서, 우클릭해서 git bash here로 cmd를 연다.
(cmd 명령어에서 옵션을 모르면, git remote -h, git remote --help같이 쳐보면 된다.)
// 현재 이 깃에 걸려있는 remote저장소를 보는 명령어
$ git remote -v
// 이 깃에 upstream이라는 별칭으로 remote저장소를 추가한다.
$ git remote add upstream "원본저장소의 URL"
(ex)
$ git remote add upstream https://github.com/android/nowinandroid.git
다시 remote가 잘 추가 되었는지
git remote -v를 쳐본다.
아무튼 이렇게 remote저장소로 원본저장소를 하나더 연결시키고,
원본 저장소를 fetch하고,
fork local 저장소에서 브랜치 체크아웃해서,
fork local에서 다시 내 fork remote 저장소로 푸시해야 브랜치를 가져올 수 있다.
소스트리에서 remote를 삭제하는것은 remote저장소의 소스파일, 저장소를 삭제하는게 아니라,
그냥 git remote 'alias'로 내 git에서 제거한다는 의미다.
나는 저 저장소에서 upstream으로 원본저장소가 필요없어서, 모두 삭제했다.
제거후, 다시
git bash에서
git remote -v를 쳐보면 origin만 남아있게 된다.
이러한 작업이 번거로우니,
브랜치가 확실히 필요하면 저 Copy tha main branch only 옵션을 해제해야한다.
그리고 한번에 브랜치를 모두 가져오는 방법은 못찾겠던데,
필요한 브랜치를 하나하나 체크아웃하고, 그 다음에 체크아웃했던 브랜치들을 한번에 fork remote로 푸시해줘야하는 듯 하다.
2-1-2. 저장소 다시 fork하기
2-1-1방법이 귀찮으니,
fork했던 저장소를 없애고, 다시 fork해서 저 옵션을 해제하면 된다.
이미 fork한 remote는 깃허브 설정으로 들어가서 삭제 할 수 있다.
local 까지 클론 했던 것은 그냥 local 폴더 자체를 삭제해버리면 된다.
로컬 삭제는 윈도우 같은 경우에는 휴지통에 많은 파일을 넣고 있으면 시간이 아까우니
local저장소를 shift + del로 바로 삭제.
맥은 쉬프트 + 커맨드 + 백스페이스였나..?
명령어로
$ rm -rf 디렉토리 해도 될 것인데, 윈도우 ui에서 삭제하는게 더 낫지 않을까 싶다. (rm명령어는 무섭기 때문..!)
그리고 rm명령어는 소스파일까지 싹다 지우는 것이니 조심하고,
git걸어둔거를 제거하려면 숨김처리된 .git폴더를 삭제해야 할 것이니 헷갈리면 안된다.
결론)
- fork만 하는거도 나름 공부할게 많았다(?)
- 이번에 fork하면서 새로 배운 내용은 이 글에서 밑줄로 쳐뒀다.
- 블로그를 상세하게 그림까지 넣어가며 적기가 힘들다 (귀찮고 시간이 많이 걸린다.)
'Google sample app > nowinandroid' 카테고리의 다른 글
REDAME.md 파일과 관련 문서 읽기 (0) | 2023.05.18 |
---|---|
gradle toolchain 관련 에러가 났다. (0) | 2023.05.18 |
0. sunflower, now in android 분석을 시도해보자 (0) | 2023.05.16 |