본문 바로가기
국비학원

[국비지원] KH 정보교육원 117일차

by 도전하는 개발자 2022. 9. 14.

git 원격저장소의 종류 2가지:

(1) Public Repository
(2) Private Repository


**** 원격과 지역저장소 모두 각자 새로운 변경(Changes)이 발생했다면,
     (1) 원격저장소의 변경(Changes)이 우선한다! => 때문에, 지역저장소는 fetch > pull 로 내려받아야 하고
     (2) 다음으로, 지역저장소의 변경(Changes)을 push 할 수 있게 된다!!!

 

===============================================

지역저장소는 언제든 망가질 개연성이 높으므로, 항상 백업을 염두하셔야 합니다. 이를 위해, 원격의 백업 저장소가 필요합니다. 이렇게 지역저장소를 원격에 백업할 수 있도록 원격저장소를 제공하는 사이트가 많이 있습니다. 그 중에, 단연 가장 많이 사용하는 원격저장소가 "GitHub"입니다. 왜? git을 유지보수하고 배포하는 곳이기 때문입니다.

===============================================

지금부터는, 지역저장소의 원격저장소로의 백업(push)과 가져오기(fetch/pull)
생명주기(lifecycle)에 대해서 연습해 봅시다!!
여기까지 아시면, 이제 버전관리에 대한 "전체" 생명주기를 다 경험하시는 것이 됩니다.!!!

원격저장소를 사용하시려면, GitHub 사이트에 회원가입을 하셔야 합니다.(물론 free)
회원가입하세요!!!! (이메일은 반드시 정확히 입력하셔야 합니다.왜? 이메일 인증하니까요)

지금 하십시요!!!!

왜? 지역저장소를 원격저장소로 백업해야 하느냐? 라고 여쭤보시면 2가지 중요한 목적이 있습니다:
(1) 지역저장소의 훼손에 대해 복구가 가능하도록 준비
(2) 여러개발자와의 공동개발을 위해서도 필요합니다 (*****)

---------------------------------------------------------------------------------

 

1) 지역저장소 생성 => git init
 - 각 단계마다 반드시 추가 수행할 명령 => git status

2) 지역 Working Tree에서 변경(Changes) 생성 => 한개 이상의 파일에 대한 CUD
 - 각 단계마다 반드시 추가 수행할 명령 => git status

3) 무대(stage) 위에 변경을 올려 놓고 => git add
 - git add .                 : 현재의 변경(changes)안에 포함된 모든 파일들을 staging
 - git add <변경파일명> : 해당 파일만 staging
 - 각 단계마다 반드시 추가 수행할 명령 => git status
 
4) 지역 저장소의 분산 DB에, 무대 위 올려진 변경을 기록 => git commit
 - 결과 : commit Log
 - 각 단계마다 반드시 추가 수행할 명령 => git status
 - 현재 까지 커밋된 모든 commit logs 출력 => gitl og

============================================

5) (2)~(4) 반복 => 만일을 위해 원격저장소로 백업할 필요가 생기면 (6)으로 이동
 - 원격저장소 생성 (깨끗하게! 단 하나의 파일도, 커밋로그도 있어서는 안 됨)
 - 생성한 원격저장소의 URL을 copy하여 지역저장소에 원격저장소로의 연결설정을 생성 (복사한 원격저장소의 URL이용)
 => git remote add <연결설정이름> <copied URL>   : 새로운 연결설정 생성 (연결설정이름은 관례상 origin)
      git remote -v     : 이 명령어로 연결설정 여부 확인

6) 지역저장소의 축적된 모든 커밋로그들 => 원격저장소로 백업(publishing -> push)
 => git branch  :  먼저 원격저장소로 push(백업)할 branch 이름을 확인
 => git push -u <연결설정이름> <브랜치이름> : 실제 연결설정을 이용해 원격저장소로 지정된 지역저장소의 브랜치를 push(백업)
 ex) git push -u origin main  : 최초 1번만 이렇게
      git push                    : 그 이후에는 이렇게 하면 된다
 => Username과 Password 입력하라고 나오는데, 이 방법은 더 이상 지원하지 않는다!!!
      따라서 github.com 사이트에서 Personal Access Token을 생성하여 이용해야한다!!!
      토큰을 복붙할 때 잘 안 되면 ctrl+v 하지 말고 마우스 우클릭 한번만 눌러서 해보자

7) (5)~(6) 반복 => 지역/원격 저장소 간에 동기화

8) 원격저장소에서 변경이 발생해도 역시 지역저장소와 항상 동기화되기 위해
   지역저장소에서는 fetch -> pull 작업 수행으로 동기화 수행
  => 주의사항 : 만일 원격저장소의 커밋로그도 변경되고, 지역저장소의 커밋로그도 변경되었다면 2가지를 수행해야함 (fetch/pull, push)
                    2가지 수행작업 중 fetch/pull이 우선이고 push가 나중에 해야함.

---------------------------------------------------------------------------------------------  

위를 간단하게 명령어 위주로 정리해보자 

(1) git init => 지역저장소 생성
    git status =>  Working tree 상태확인 (변경발생내역 확인)

(2) git status =>  Working tree 상태확인 (변경발생내역 확인)

(3) git add => 변경발생내역 중 원하는 파일들을 무대 위에 올려놓자 (staging)
    git status =>  Working tree 상태확인 (변경발생내역 확인)

(4) git commit => Staging된 변경내역을 commit
    git status =>  Working tree 상태확인 (변경발생내역 확인)

(5) git log  => commit 로그 확인 (한줄로 간단히 보고 싶으면 뒤에 --oneline 옵션 추가)

(6) (2)~(5) 까지 반복

============= 여기까지가 지역저장소의 버전관리 흐름 ==================

(7) git remote add origin <원격저장소URL> => 원격저장소와의 연결 설정 생성 (원격저장소URL은 깃허브 repository에서 확인가능)
    git remote -v                                   => 생성한 연결설정 상세내역 확인

(8) git branch -M <branch명>                  => 지정한 branch 설정
    git branch                                      => 현재 branch 확인

(9) github 사이트에서 Personal Access Token 생성
    토큰 복붙할 때 잘 안 되면 ctrl+v 하지 말고 마우스 우클릭 한번만 눌러서 해보자

(10) git push -u origin main                    => 현재 지역저장소의 'main' 브랜치를 원격저장소로 백업 (최초시)
     git push                                       => 최초시 위의 방법대로, 두번째 이후에는 이렇게
     git log --oneline                             => 지역저장소의 원격저장소로의 백업 이후 커밋로그 확인
     git status                                      => Working tree 상태확인 (변경발생내역 확인)
     dir                                              => Working tree의 파일 상태확인 

(11) git fetch                                      => 지역/원격저장소 간 커밋로그의 차이 확인            (우선수행)
      git pull                                       => 지역/원격저장소 모두 각자 새로운 커밋로그 발생시 (우선수행)
      git push                                      => 2번째 이후 원격저장소로의 백업 수행시               (추후수행)
      git log                                        => Working tree 상태확인 (변경발생내역 확인)
     dir                                              => Working tree의 파일 상태확인 

(12) (10)~(11) 까지 반복

=========== 여기까지가 지역저장소-원격저장소간의 동기화 흐름 ================

근데 좀 복잡하죠? 그냥 깃허브 데스크탑 프로그램(GUI)이 더 편할 것 입니다.
그래도 이 흐름을 이해하지 못하면 엉망진창 됩니다. 꼭 숙지해야합니다.

---------------------------------------------------------------------------------------------  


근데 위에 나온 브랜치는 뭘까?! 브랜치를 배워보자

 

===============================================
git's branch 에 대한 이해 및 실습
===============================================
* 브랜치(branch)가 git에서는 무슨 의미인가!? => 변경관리 흐름의 이름 (*너무 추상적이라 이해하기 힘듦)
  => 여러분이 지금 어떤 지점(위치)에서 변경관리를 하고 잇는지를 나타내는 이름
  => 예: seoul, pusan, main 
  => Default branch : "main" (본사) (***)

* 새로운 브랜치(지점)을 만들어 보자!!!!
  => 새로운 브랜치를 만드는 순간, 현재 브랜치가 이것으로 바뀜
  => 이전 브랜치에서 남긴 모든 변경내역(commit logs)이 그대로 따라 옵니다.
  => 현재 내가 있는 위치(branch)에 맞게, 해당 branch에서 만든 변경내역대로,
     Working Tree의 내용이 바뀌게 된다!!! (********) 
  => 브랜치들은, main 브랜치를 기준으로, 병합(merge)시킬 수 가 있습니다.
     예: main 브랜치에 있는 버전 1.0 전국민용 카카오톡 프로그램 소스를 기반으로,
         samsung 브랜치를 새로 만들어서, 삼성용 메신저로 기능을 수정 및 업그레이드 하고....
         후에, samsung 브랜치에서 만들었던 새로운 기능 또는 수정된 기능들이, 
         main 브랜치의 국민용 카카오톡에도 충분히 반영할 만하면, 이때 main브랜치를 기준으로
         samsung 브랜치에서 발생한 변경내역들을 병합(merge)할 수 있게 됩니다.

 

-----------------------------------------------------------------------------------------------------------------------

* git에서 branch : 하나의 버전관리(VCS, Version Control System) 흐름
 - 버전관리의 수행 장소, 위치 (강사님의 정의)
 - Default Branch Name : master (예전) => main (최근)

 => GUI에서는 너무나도 편하다! 
   - current branch 클릭 - New branch 클릭


   - current branch 클릭 - 변경하려는 branch 클릭



 => 파워쉘, cmd에서 하는 방법
   - git branch <브랜치명>  : 브랜치 신규생성
   - git branch                 : 모든 브랜치 목록과 현재 내가 있는 브랜치 확인
   - git switch <브랜치명>  : 해당 브랜치로 이동

  => 신규 브랜치 생성시 중요한 것!
 1) 신규 브랜치의 근간이 되는 브랜치가 무엇인가?
    - 이 때 신규 브랜치의 근간이 되는 브랜치의 소스파일들은 공유되는게 아니라 복제의 개념임
 2) *** 매일매일 변경작업 시작전, 내가 어느 브랜치에 있는지 반드시반드시반드시 확인해야한다!!! ***
 3) 원격 저장소로의 백업은, 지역저장소의 브랜치별로 백업이 수행되어야한다!

---

* 브랜치의 병합 (merge) *

기준이 되는 branch로, 다른 branch의 커밋로그와 소스파일들을 병합하는 행위
기본 branch인 main 쪽으로 다른 브랜치를 병합하는 경우가 많습니다.

1) git switch main       => 기준 브랜치로 이동
2) git merge samsung  => 다른 브랜치를 기준 브랜치로 병합 (samsung -> main으로 병합)

 => GUI에서는 너무나도 편하다! 
   - current branch 클릭 - 변경하려는 branch 클릭해서 머지하려는 브랜치로 변경 (일반적으로 main에 병합함)
   - current branch 클릭 -  최하단 choose a branch to merg into main 클릭 


---