4. 협업에서 브랜치 사용하기

    - 협업을 하다보면 팀원들이 각자 다른 기능을 맡아서 작업하는 경우가 많다. 이럴 때는 각자의 작업이 master branch에
      있는 문서들과 섞이지 않도록 새 브랜치를 만들어서 버전을 관리한다. 그리고 각 팀원이 만든 새 브랜치 역시 원격 저장소에
      그대로 push할 수 있다.

 

    4-1. 새로 만든 Branch push하기

          - 팀장이 새로운 기능을 위해 자신의 지역 저장소에 f라는 branch를 만들어 커밋한 후 원격 저장소에 푸시하는 과정

깃허브 원격 저장소에서 branch 개수가 증가한 것을 확인한다.

    4-2. pull request로 push한 Branch 병합하기

          -  아직 원격 저장소의 파일 목록에는 f branch에서 만들었던 f1.txt가 없다.

             왜냐하면 push한 branch는 pull request를 통해 병합해야 원격 저장소에 반영되기 때문이다.

이후 pull request 메시지를 작성한 후 [create pull request]를 누르면 협업 중인 저장소에 pull request가 전송된다.
협업 중인 원격 저장소에 등록된 pull request는 공동 작업자 중 누구나 살펴보고 병합할 수 있다
pull request 메시지를 살펴본 다음에 문제가 없으면 [Merge pull request]를 누른다.
커밋 메시지를 직접 입력하거나 기본 메시지를 사용할 수도 있다. [Confirm merge]를 누르면 병합이 끝난다.
branch가 병합되면 해당 branch에 있던 파일이 master 화면에 나타날 것이다.
branch가 병합된 상태라면 Merged라고 표시되어 있고, 공동 작업자 중 누가 병합했는지도 알 수 있다.

          -  깃허브에서 협업할 때는 보통 작업자마다 브랜치를 만들어서 진행하고, 작업 중간중간 pull request를 보내서

             master branch에 병합한다! (작업 전에 항상 pull하여 다른 작업자의 변경 내용을 반영하는 것도 잊지 말기!)

3.협업의 기본 알아보기

    - 깃허브의 원격 저장소를 사용해 협업할 때 가장 기본으로 사용되는 방법을 알아보자

    - 하나의 작업을 여러 사용자가 협업하기 위해서는 각자 지역 저장소에서 작업한 내용을 자유롭게 원격 저장소에서 

      공유할 수 있어야 하므로 사용자가 총 3명이라고 가정한다.

 

    3-1. 공동 작업자 추가하기

           - 깃허브의 공개 저장소는 주소만 알면 누구든지 접속해 소스를 살펴볼 수 있지만, 저장소에 커밋을 푸시할 순 없다.

             공개 저장소든, 비공개 저장소든 여러 사람이 협업한다면 승인된 공동 작업자에게만 커밋을 올릴 수 있는 권한을

             주어야 한다. 그래야 프로젝트 소스 파일의 무분별한 수정을 막을 수 있기 때문이다.

           - 여기에서는 '팀장'과 '팀원1', '팀원2' 이렇게 세 사람이 깃허브를 통해 협업한다고 가정한다.

 

팀장이 협업하고 싶은 저장소에 setting, Manage acess 클릭 후 invite a collabotaor를 누른다.
팀원 1과 팀원 2의 깃허브 아이디나 이메일 주소를 입력한 후 select a collaborator above를 누른다.

          - 팀원은 협업자로부터 초대되었다는 메일과 깃허브 메시지를 받게 되는데, 깃허브 메시지 화면에서 accept 클릭!

          - 공동 작업자들이 모두 초대를 수락하면 collaborator 화면에 사용자 이름이 나타난다.

 

    3-2. 작업 환경 구성하기

           - 원격 저장소에 공동 작업자가 모두 추가되었다면 팀장, 팀원1, 팀원2가 번갈아 커밋을 올리거나 내려서 작업하기

              때문에 실습은 두 대의 컴퓨터가 필요하다...(나는 없어서..그냥 쓱 읽어보고 넘어간다..)

           - 모든 공동 작업자가 아래와 같은 방식으로 지역 저장소와 기본 사용자 환경을 지정해야 한다.

 

1) 각 작업자의 컴퓨터에 지역 저장소를 생성하고
2) 공동 작업에서 사용할 이름과 이메일 주소를 지정한다.

(저장소마다 다른 이름이나 메일 주소를 사용하기 위해서는 config 명령 시 --globals 옵션을 뺀다)

 

    3-3. 원격 저장소에 첫 커밋 푸시하기

           - 팀장이 overview.txt 문서를 생성해서 커밋한 후 원격 저장소의 master branch로 push한다.

 

팀장 쪽에서 커밋하기
원격 저장소에 push하기

git push -u : 다음 부터는 git push 명령만으로 원격 저장소의 master branch에 접근할 수 있다.

이렇게 해서 깃허브 원격 저장소를 확인하면 팀장이 올린 overview.txt 문서의 최종 커밋이 올라와 있을 것이다.

 

    3-4. 공동 작업자 컴퓨터에 원격 저장소 복제하기

           - 공동 작업자는 자신의 작업을 진행하기 전에 git clone 명령을 사용해서 원격 저장소를 복제한다.

 

    3-5. 첫 번째 커밋이 아니라면 풀 먼저하기

           - 여러 사람이 함께 문서를 수정하고 push하기 때문에 반드시 작업하기 전에 원격 저장소의 최신 커밋을 pull한 후

             자신의 커밋을 push해야 한다.

팀장이 새로운 커밋을 올렸다.
팀원 1은 그 사이에 새로운 커밋을 생성한다.

팀원 1이 push하게 되면, 오류 메시지가 뜬다.

" ! [rejected] " : 원격 저장소에 있는 최신 커밋 정보가 팀원 1의 컴퓨터에 저장되어 있지 않기 때문에

나타난 것으로 꼭 자신의 커밋을 수정하기 전에 원격 저장소의 최신 커밋을 가져와야 한다.(git pull)

따라서, git pull -> commit 생성 -> git push -u origin master !!

2. 원격 브랜치 정보 가져오기

    - git pull 명령은 원격 저장소의 최신 커밋을 지역 저장소에 합쳐준다.
      하지만 최신 커밋을 합치기 전원격 저장소에 어떤 변화가 있는지 먼저 살펴봐야 한다.

      이럴 때 원격 브랜치에서 정보만 먼저 가져올 수 있다.

    - 원격 브랜치의 역할과 원격 브랜치에서 정보를 가져오는 방법, 가져온 정보를 지역 저장소에 병합하는 과정까지 본다.

 

    2-1. 원격 master Branch

           - 지역 저장소의 'master' Branch처럼 원격 저장소도 만들 때 기본으로 master Branch가 생성된다.

           - 원격 저장소에 있는 브랜치는 '원격 Branch', 원격 저장소에 있는 master Branch는 '원격 master Branch'로 구별!

원격 저장소에 있는 HEAD -> 원격 저장소의 master Branch -> commit "add d"

 

HEAD->master : add d가 지역 저장소의 최종 커밋이라는 의미

origin/master : add d가 원격 저장소의 최종 커밋이라는 의미

현재 지역 저장소와 원격 저장소의 최종 커밋이 같다.

 

git_home에서 f3.txt 생성 후 커밋하기 및 지역 저장소의 최종 커밋과 원격 저장소의 최종 커밋이 달라진 것 느끼기
현재 branch가 origin/master branch의 버전보다 하나 앞서있고, git push하라고 알려주고 있다.
push한 후에 master branch와 origin/master branch가 같은 커밋을 가리키고 있다.

 

    2-2. 원격 Branch 정보 가져오기 - git fetch

           - fetch : '불러오다, 가져오다' 라는 뜻으로 git fetch 명령은 원격 저장소의 정보를 가져오는 기능이 있다.

           - pull vs fetch
             pull : 원격 저장소의 커밋을 가져와서 무조건 지역 저장소와 합친다.

             fetch: 원격 브랜치에 어떤 변화가 있는지 그 정보만 가져온다.

           - 보통 팀 작업을 할 때 다른 사람이 수정한 소스를 훑어보고 지역 저장소와 합치고 싶다면
             pull 대신 fetch를 이용해서 커밋을 가지고 온 후, 지역 저장소와 합치면 된다.

 

아까 git_home에서 원격 저장소로 push했던 f3.txt가 보이지 않는다!

[git log --oneline] : (HEAD->master)만 보이고, 원격 저장소의 origin/master는 보이지 않는다.

fetch로 원격 저장소의 최신 정보를 가져왔지만, 아직 지역 저장소에 합치지 않아

원래 git_office에 있던 최신 커밋만 나타난다.

[git fetch] : 현재 branch가 origin/master에 비해 1개의 커밋이 뒤쳐져 있다고 뜨면서,

git pull 하면 update를 할 수 있다고 알려준다.

[fetch로 가져온 최신 커밋 정보] : fetch로 가져온 원격 저장소 정보는 FETCH_HEAD라는 branch로 가져온다.

 

master branch로 이동한 후 git merge로 병합하기

fetch한 이후에 최신 커밋을 현재 branch에 합치려면

1) git pull 명령을 사용해서 원격 저장소의 소스를 내려받거나,

2) git merge 명령으로 FETCH_HEAD에 있던 커밋을 병합할 수도 있다.

 

'create f3.txt'라는 최신 커밋이 지역 저장소에 반영이 된 것을 볼 수 있다.

         따라서, git pull 명령 = git fetch + git merge FETCH_HEAD 명령으로 볼 수 있다.

git fetch로 원격 브랜치를 가져온 다음 git merge 명령을 사용해 원격 브랜치와 현재 브랜치를 합쳐주는 것을

git pull 명령으로 한꺼번에 할 수 있다.

 

           +) fetch
                1) git merge origin/master : 원격 master에 있는 커밋을 병합할 때

                2) git merge origin/브랜치 이름 : 다른 브랜치에 있는 커밋을 병합할 때

                3) git merge FETCH_HEAD : fetch한 뒤 지역 저장소에 반영하지 않은 최신 커밋을 병합한다.

            

제 5장 깃허브로 협업하기

           - 하나의 원격 저장소를 중심으로 둘 이상의 지역 저장소와 연결하는 방법을 알아본다.

           - 연결된 원격 저장소와 지역 저장소와 동기화하는 방법을 알아본다.

           - 깃허브로 협업하게 되면 1) 각자 원하는 시간과 장소에서 프로젝트 파일에접근할 수 있고,
                                                      2) 커밋을 푸시할 때 시간과 장소를 정해 모이지 않아도 된다. (간단한 기능들도 제공)

 

            1. 여러 컴퓨터에서 원격 저장소 함께 사용하기

            2. 원격 브랜치 정보 가져오기

            3. 협업의 기본 알아보기

            4. 협업에서 브랜치 사용하기

 

1. 여러 컴퓨터에서 원격 저장소 함께 사용하기

    - git_home과 git_office라는 2개의 디렉터리를 만들어 깃허브 협업을 연습한다. 

      (개인 컴퓨터와 회사 컴퓨터 저장소, PC와 노트북의 저장소라고 상상할 수 있다.)

    - 하나의 깃허브 계정으로 둘 이상의 컴퓨터에서 원격 저장소를 공유해 버전을 관리하는 방법이다.

 

    1-1. 원격 저장소 복제하기 - git clone

          - clone, cloning, 복제한다 : 원격 저장소를 지역 저장소로 똑같이 가져오는 것

          - 원격 저장소를 기존에 연결된 지역 저장소 외에 다른 지역 저장소에서 사용하려면 원격 저장소에 담긴 내용 전체를

            지역 저장소로 가져와야 한다.

깃허브에 있는 test-1저장소를 git_home이라는 저장소로 복제한다
git_home과 git_office 디렉토리를 만들 위치(여기서는 홈 디렉토리)로 이동하여 원격 저장소의 내용을 복제한다.
디렉토리 생성 확인
git_home과 git_office에 같은 내용이 있는지 확인하기

 

!!원격 저장소를 clone하면 자동으로 지역 저장소와 원격 저장소가 연결된다!! git remote -v로 연결 확인하기

 

    1-2. 개인 컴퓨터에서 작업하고 올리기

git_home 디렉토리에서 커밋을 만들고 원격 저장소에 push하기

 

깃허브 원격 저장소에서 새로운 커밋이 올라왔는지 확인하기

         

    1-3. 회사 컴퓨터에서 내려받아 작업하기

           - 개인 컴퓨터(git_home)에서 커밋을 푸시했기 때문에 회사 컴퓨터에서 원격 저장소를 복제했을 때와 원격 저장소의

            상황이 달라졌다. 따라서 회사 컴퓨터에서 작업하려면, 먼저 원격 저장소에 새로 올라온 커밋을 가져와야 한다.

원격 저장소에 새로 올라온 커밋 가져오기
git_office에서 f1.txt 수정하고 새로운 커밋 원격 저장소에 올리기
깃허브 원격 저장소에서 새로운 커밋이 올라왔는지 확인하기
git_office에서 원격 저장소에 올린 새로운 커밋을 git_home에 갱신한다.

 

하나의 원격 저장소에 둘 이상의 컴퓨터를 연결해서 사용한다면, pull과 push를 습관화하여 사용하는 것이 좋다!!!!!!!

5. 깃허브에 SSH 원격 접속하기

   - SSH라는 방법을 통해 깃허브에 접속하는 방법을 알아본다.

 

   5-1. SSH 원격 접속이란?

         - Secure Shell의 줄임말로, 보안이 강화된 안전한 방법으로 정보를 교환하는 방식이다.

         - SSH에서는 기본적으로 private Key와 public Key를 한 쌍으로 묶어서 컴퓨터를 인증한다.

         - private: '사적인, 비밀의, 비공개의' 라는 뜻을, public: '공적인, 공개의' 라는 뜻을 가지고 있다.

           따라서 public Key는 외부에 공개되는 키이고, private Key는 아무도 알 수 없게 사용자 컴퓨터에 저장되는 키이다.

         - 사용자 컴퓨터에서 SSH 키생성기를 실행하면, Private Key와 Public Key가 만들어진다. 

웹 브라우저에서 깃허브 저장소에 접속할 때
Source Tree 같은 프로그램을 사용해 깃허브 저장소에 접속할 때 
SSH 원격 접속할 때
아이디와 비밀번호를 입력해서 깃허브에 내가 해당 저장소를 만든 계정의 주인임을 인증하는 방식 private Key와 public Key를 사용해 현재 사용하고 있는 기기를 깃허브에 인증하는 방식
ex) 서버 환경에서 깃허브 저장소에 접속해야 한다면,
서버 자체를 깃허브에 등록한다.
개인 노트북으로 접속한다면, 노트북을 깃허브에 등록한다.

         - SSH 원격 접속의 장점
           1) 터미널 창을 이용할 수 있는 상태라면 언제 어디서든 깃허브에 접속할 수 있다.

           2)  자동 로그인 기능으로 인해 깃허브 아이디와 비밀번호를 입력하는 번거로움을 줄일 수 있다.

 

   5-2. SSH 키 생성하기

         - 사용자 컴퓨터에서 SSH 키 생성기를 사용하면 public Key와 private Key가 만들어진다.

         - 키를 생성해서 어디에 저장하고 어떤 용도로 사용하는지 알아보자.

ssh-keygen을 입력하면, SSH 키가 저장되는 디렉터리 경로가 표시되면서 파일 이름을 입력하라고 한다. (이때 엔터 두 번)

SSH 키가 저장되는 디렉터리는 홈 디렉터리 안에 있는 .ssh 디렉터리임을 알 수 있다.

Enter를 두 번 클릭하면, SSH를 통해 다른 컴퓨터에 접속할 수 있는 비밀번호가 생성된다. 

실제로 내부를 들여다보면, 매우 복잡한 비밀번호이므로 외부에서 쉽게 공격할 수 가 없다.

화면에 표시된 여러가지 경로 중, id_rsa 파일이 private Key이고, id_rsa.pub 파일이 public Key이다.

 

제대로 .ssh 디렉토리에 저장되었는지 확인하기

 

   5-3. 깃허브에 퍼블릭 키 전송하기

         - SSH 방식으로 깃허브 저장소에 접속하는 과정
           1) 사용자 컴퓨터 안에 만들어진 public key를 깃허브 서버로 전송한 다음 저장한다.

           2) 사용자 컴퓨터에서 깃허브 저장소에 접속하면, 사용자 컴퓨터 안에 있는 private key와 
                깃허브 서버에 있는 public key를 비교한다.
           3) public key와 private key는 한 쌍이므로 서로 맞으면 사용자 컴퓨터와 깃허브 저장소가 서로 연결된다.

 

.ssh 디렉토리에서 public key를 Ctrl+C 복사한다.
github 사이트 접속 및 설정 들어가기
왼쪽 하단에 [SSH and GPG keys] 클릭 후 [New SSH key] 클릭
 Title 항목에 현재 등록하는 SSH 키를 쉽게 알아볼 수 있도록 입력 후 [Add SSH key] 클릭(public key는 여러 개 등록 가능)
public key를 추가할 때 비밀번호를 한 번 확인한다. 비밀번호 입력 후 [Confirm password] 클릭
만든 SSH 키 중 public key를 깃허브 서버에 올렸다.  이제 깃허브 저장소를 로그인 없이 접속할 수 있다.

 

   5-4. SSH 주소로 원격 저장소 연결하기

         - SSH 원격 접속 준비가 끝났으므로, SSH 주소를 사용하여 지역 저장소와 원격 저장소를 연결한다.

[+]에 [New repository] 클릭
저장소의 이름을 입력하고, [Create repository] 클릭
저장소가 만들어지면 http 주소가 나타는데 [SSH] 클릭 후 [문서] 아이콘을 눌러 복사한다.
SSH 방식으로 접속하기(오류 메시지 없이 명령 프롬프트($)가 나타나면 정상적으로 연결된 것이다.
git remote -v : 어떤 원격 저장소가 연결되었는지 확인할 수 있는 명령으로 확인해보기

 

4. 원격 저장소에 올리기 및 내려받기

   -  지역 저장소와 원격 저장소를 연결했으므로 
      1) 지역 저장소의 소스를 원격 저장소에 올릴 수도 있고,                    => push

      2) 원격 저장소에 있는 소스를 지역 저장소로 내려받을 수도 있다.    => pull

 

   4-1. 원격 저장소에 파일 올리기 - git push

         - push : 지역 저장소의 소스를 원격 저장소롤 올리는 것

원격 저장소에 처음 접속할 때 나타나는 내용 중 두 번째 항목이 바로 푸시하라는 명령이다

"git push -u origin master"

원격 저장소의 master branch로 push 하라는 명령

'-u' 옵션

지역 저장소의 branch를 원격 저장소의 master branch에

연결하기 위한 것으로 처음에 한번만 사용하면 된다.

로그인 하기

push가 끝났다는 것은 지역 저장소의 커밋이 원격 저장소로 올라갔다는 뜻이다.

 

깃허브 저장소가 열려있는 웹 브라우저 창에서 새로고침하기
1 commit 클릭하기 및 커밋한 내용 확인하기

 

한 번이라도 지역 저장소와 원격 저장소를 연결해서 push했다면 그 다음부터는 더 간단하게 푸시할 수 있다.

f1.txt 수정 및 스테이징&커밋, 이후 git push (하다가 노트북이 꺼져서 이미 업데이트 되었다고 뜬다..)
add b 클릭하기
가장 최근에 수정한 b가 들어있다

   4-2. 깃허브 사이트에서 직접 커밋하기

         - 보통은 지역 저장소의 커밋을 원격 저장소에 푸시하는 방법을 많이 사용하지만, 지역 저장소가 있는 컴퓨터가 없을 때

           깃허브 사이트에서 직접 커밋할 수도 있다.

깃허브의 원격 저장소로 접속한다
f2.txt를 생성하고 파일 내용 입력하기
스크롤을 내려 기본 커밋 메시지인 "Create f2.txt"를 원하는 내용으로 수정한 후 [Commit new file]을 클릭한다
새로운 커밋이 추가된 것을 확인할 수 있다.

 

   4-3. 원격 저장소에서 파일 내려받기 - git pull

         -  pull : 원격 저장소에서 지역 저장소로 내려받는 것

         - 원격 저장소에 있는 소스 파일은 (1) 다른 사용자가 수정했거나, (2) 깃허브 사이트에서 직접 커밋하면

           지역 저장소와 차이가 생긴다.

         - 따라서 원격 저장소와 지역 저장소의 상태를 같게 만들기 위해 원격 저장소에서 지역 저장소로 가져온다.

 

지역 저장소에서 f1.txt를 만들었고, 깃허브 사이트 원격 저장소에서 f2.txt를 만들었기 때문에 f1.txt만 존재한다.
origin(원격 저장소)에 있는 내용을 master branch로 가져오라는 명령이다 (default로 설정되어 있어 git pull만 해도 가능)

 

   4-4. 깃허브 저장소 화면 살펴보기

         - 저장소에서 커밋하거나 지역 저장소의 커밋을 푸시하고 나면, 맨 처음에 만났던 저장소 화면과 달라져 있다.

1 깃허브 계정 / 저장소 이름
계정 이름을 누르면 해당 계정에 대한 요약 정보 화면으로 이동, 저장소 이름을 누르면 저장소 파일 목록 화면으로 이동
2 이 저장소의 알림을 받을지 안받을지 설정하는 것이다.
3 이 저장소를 즐겨 찾기하는 것으로 숫자가 높을 수록 좋아하는 사용자가 많다는 것이다.
4 이 저장소를 복제한다. 깃허브에서 오픈 소스 프로젝트에 참여하거나, 직접 소스를 분석하면서 공부하려면 먼저 저장소를 복제해야 한다. (-> 6장에서 살펴본다)
5 커밋과 관련된 정보들(브랜치 개수, 커밋 개수 등등)이다. 하단 오른쪽엔 3 commots 처럼 커밋 개수도 제공한다.
6 저장소에 있는 파일 정보이다. 파일 이름과 최신 커밋 메시지, 최신 커밋 시간이 나타난다.

           깃허브에서 다른 저장소를 살펴볼 때 2,3,4를 눈여겨 보면 해당 저장소의 소스를 참고할지 말지 결정하는 것에 많은

           도움이 된다. 

+ Recent posts