프로젝트 관리/github

메타코딩 -무작정 깃허브 찍먹하기 -6- (Github 초보 기본기 & Remote 브랜치 이해)

skrr 2023. 3. 3. 23:51

저번 5번째 글에 이어서 ex10폴더를 사용해서 기본기를 체험해 보자. ex10.company 폴더의 myapp으로 가보자.

우선 회사에 출근해서 일을 하다가 회원가입 기능을 만들었다고 치자.. 회원가입.txt 파일 생성 후 add & commit 하고 git push를 해서 git server에 올려주자.. 그러고 퇴근을 한 상황.. 이제 뭘 하고싶냐 하면.. 집에 가서 로그인이라는 기능을 이어서 하고싶다.

그러면 ex10.home 폴더로 들어오면 처음에 프로젝트설정 하나밖에 없을 것이다. 회사에서 하던 소스를 다운받아 와야 하니 먼저 git pull origin master를 해서 회사에서 하던 소스를 다운받자. 그 후 이어서 로그인.txt를 생성 후 add & commit 후 git pusg origin master에 업로드 하고 github server에 잘 올라갔는지 확인하자. 

이제 새로운 상황을 해보자. 만약 출장을 가서 로그인에 이어서 글쓰기라는 기능을 만들고 싶다.. 라는 설정

우선 gitworkspace에 ex10.jeju 라는 폴더를 생성 후 bash CLI창을 킨 후 git clone으로 소스를 받아온다. 한번도 작업 한적 없는 곳이니 clone 작업 한적 있으면 pull로 하면 되겠다. 다 잘 받아진지 확인 하고, 제주도에서 글쓰기 기능을 구현 할 것인데.. 회원가입 로그인 처럼 하루만에 안될거같다는 가정.. 

하루만에 못할거같으니깐.. git checkout -b 브랜치명 명령어로 새로운 브랜치를 따주자. 그 후 글쓰기50프로.txt를 생성 해 준 후 add & commit 하고 현재 branch 상태를 보면 topic이라는 브랜치를 로컬에서는 만들어 줬는데.. git server에는 안 만들어져 있다. 하지만 push할때 git push origin 브랜치명 이렇게 입력 하면 브랜치를 알아서 생성 해 준다. 푸쉬를 해보고 깃 페이지에서 새로고침을 해보면 만들어졌다는 것을 알 수 있다.

이제 이 상태에서 제주도에서 출장을 마치고 회사로 돌아간다는 설정.. 

ex10.company 폴더로 다시 들어가서 CLI를 킨 후 git log를 찍어보면 github의 원격 master branch와 파일 내용이 다른 것을 알 수 있다. 다른곳에서 로그인 파일을 생성한 후 푸쉬를 했으니.. git pull origin master 명령어로 소스 동기화를 시켜주자. 그러고 바로 직전에 제주도에서 하던 글쓰기 50프로를 완성 시키고싶은데.. git branch를 찍어보면 master밖에 없다.. 그러면 지금 해야되는게 뭐냐면 github에 있는 topic branch를 다운받아야 하는데 방법이 3가지가 있다. 한번 알아보자.

git fetch origin의 명령어는 github에서 다운로드 받는다는 뜻이다. pull과의 다른점은 merge가 안되는 것이다. github에 있는 모든 branch를 다운 받아주는 것이다. 내가 여기서 사용할 방법은 3번을 사용 할 것이다. 가장 많이 쓰이는 형태이기 때문이다.. 

git ls-remote 명령어를 사용해서 현재 github상태를 보면 브랜치가 두개로 나뉘어진 것을 확인 할 수있다.

다음으로 git fetch origin 명령어를 사용해 보면.. 마우스로 드래그 한 곳에.. 새로운 branch를 다운받았다는 로그가 뜬 것을 볼 수있다. git checkout -b topic origin/topic 명령어를 그냥 풀어서 나열하면

1. 새로운 topic이라는 branch를 생성한다.

2. HEAD를 새로만든 topic이라는 branch로 이동시킨다.

3. 만든 topic이라는 branch에 fetch로 다운받아온 origin/topic의 데이터를 merge한다.

이 것들이 한줄에 축약 되어 있는 것이다.

다음과 같이 실행 했으면 git log를 입력해보면 topic브랜치로 이동 된 것과.. topic의 내용이 다 소스 동기화 된 것을 볼 수 있다.

그러면 이제 완전히 github와 소스, 브랜치 동기화가 되었으니.. 마저 글쓰기를 완료 해 보자..

글쓰기 50프로 완료 되었고, 글쓰기 완료 되었는데.. 이제 master & topic 브랜치를 병합을 시켜 줄 것인데. 로그가 두개가 남아서 마음에 안드는 상황이다.. 그러면 앞서 배웠던 git rebase -i 해가지고 하는 방법도 있지만.. 새로운 방법을 사용 해 보자.

일단 branch HEAD를 master로 옮겨주자. 그 후 git merge --squash topic 이라는 merge명령어의 squash라는 옵션을 적용 해서 입력 해 보면.. git status를 확인 해보자.. topic에서 add된 file두개가 commit 전의 index 상태인 것을 확인 할 수 있다.

그냥 두개를 묶어서 commit 하고 로그를입력 해주고 git log를 해보면 깔끔하게 로그를 남길 수 있다. 그리고 git push후 github 페이지를 가서 새로고침 해보면.. 파일은 5개가 올라갔고 커밋 로그는 4개가 적용 된 것을 확인 할 수 있다.

여기까지 github 기본기를 알아 보았다.

 

*이제 git remote 브랜치에 대해서 알아보자.

깃헙 origin 저장소에 3가지 branch가 그림과 같이 존재한다고 생각 해보자. 

1번 git init을 하면 로컬 저장소가 만들어지고, 2번을 실행하면 그림과 같은 분홍색 선이 연결된다. 해당 연결이 Byte Stream이라고 불린다.

그리고 git fetch origin을 하게되면 바로 로컬저장소로 들어가는 것이 아니라.. remote branch라는 임시 저장소가 생긴다.

그 다음 이제 뭘해야하냐면.. 내가 만약 master를 동기화 시키고 싶으면..

4번 명령어 실행 하면 로컬 저장소에 branch가 생기고.. 체크아웃 후 6번까지 실행하면 노란색 표시처럼 저장이 된다.

이런 과정을 master브랜치 부분에 한번에 생략해서 하는 방법이 git clone 명령어 이다. (master branch밖에 적용안됌) 

전체적인 원리는 1번부터 9번 까지인데.. 사실상 만약 dev를 가져온다 치면 fetch 후에 git checkout -b dev origin/dev 라는 명령어로 간단하게 만들면서 이동하고 merge 까지 하게 되는 것이다. 해당 명령어에서 뜻하는 origin/은 remote branch를 뜻한다.

 

여기까지.. 찍먹하기 -6-이었다.