본문 바로가기

파이썬

Git, GitHub 기초 사용법

반응형

 

1. Git, GitHub ?

프로그래머들이 소스코드 관리를 편리하게 해주는 일정의 클라우드형 분산 버전 관리 프레임웍이다.

여러명이 공동으로 프로그래밍하고 공유하고 업데이트하는 것을 체계적으로 해주는 유용한 시스템이다.

 

Git?  자신의 로컬 컴퓨터에서 소스코드를 add, commit, merge 등 관리하는 작업을 수행한다.

 

Github는 ?  로컬에서 Git으로 관리하는 자료를 여러 사람과 공유 / 협업 개발 / 백업하는 클라우드라고 생각하면 쉽게 둘의 관계가 이해가 된다.

나의 소스를 올리는 것 뿐만 아니라 다른 사람이 Github에 올린  소스를 복제(Clone)할 수 있고 어떤 변경이 있는지 확인하고 반영할 수도 있다.

 

즉, GitHub는 Git을 호스팅해주는 웹 서비스이며, 오픈소스 즉 Public 프로젝트는 무료이며, Private 프로젝트는 유료이다.

다른 유저들과 함께 온라인으로 하나의 프로그램을 제작하는 것도 가능하여, 많은 오픈소스 프로그램들이 github을 통해서 전세계 유저들에 의해 공유되고 있고, 개발자들의 이직시 경력에 GitHub 활동 내역을 자랑하기도 한다. 

 

 

Git + GitHub는 개발자라면 반드시 알고 사용할 줄 알아야 하는 기본 지식이다. 

각 개발사별로 개발 프레임웍을 자체적으로 만들어 사용하기도 하지만 개념과 사용법은 모두 유사하다.

 

Git + GitHub을 합쳐서 일반적으로 GitHub이라고 한다. 

 

2. GitHub 기본 동작 개념

  • 저장소(repository)
     파일이나 디렉토리를 저장하는 장소.
    변경 이력이 존재하는 파일별로 구분되어 저장.
    저장소는 내 컴퓨터에 있는 ‘local repository’와 서버에서 관리되는 ‘remote repository’ 등 2개가 존재
    기본적으로 로컬 저장소에서 작업하고 그 결과를 원격 저장소에 저장 가능
  • 브랜치(branch)
    소프트웨어 업데이트별 버전을 관리하기 위해 사용
  • 커밋(commit)
    일단 Git으로 로컬 저장소에 작업한 내용을 저장, 파일 추가 변경사항을 저장소에 기록
    변경한 사람, 시간, 변경 내용 등을 기록해 변경 이력과 내용을 쉽게 파악

  • 푸쉬(Push)
    Github(클라우드 저장소)에 파일을 추가하거나 변경 내용을 올리는 작업

  • 풀(Pull)
    Github에서 파일을 다운로드하는 작업

3. Git의 버전 관리 구조

Git의  버전(형상) 관리는 3가지 영역으로 진행된다

1) 작업 공간(Working Directory) -> 2) 스테이지영역(Staging Area) -> 3)로컬저장소(Repository)

Git 형상관리 구조

(출처 : http://devstory.ibksplatform.com/2017/09/git-1-git-git.html)

 

 

작업공간 : 소스 코드를 작업하는 영역으로 코드를 추가, 수정, 삭제 작업이 이루어지는 영역

 

스테이징 영역 : 워킹 디렉터리에 Git add 명령을 실행하면 파일들은 Git의 스테이징 영역으로 이동하며 이를 통해 소스 코드의 상태 정보를 확인할 수 있다.

 

저장소 영역 : 스테이징 영역에 있는 소스 코드에 Git commit 명령을 실행하면 최종적으로 Git의 저장소에 반영된다.

 

GitHub을 포함하면 버전 관리는 3가지 영역으로 진행된다

1) 내 컴퓨터 작업공간   ▷  2) 스테이지 영역  3) 로컬 저장소  ▷ 4) GitHub 원격저장소

                 git add                  git commit              git push

 

파일 관점에서 Git은 다시 4가지 단계로 나눌 수 있다.

(출처 : http://wit.nts-corp.com/2015/03/26/3412)

 

  • Untracked : 작업 디렉터리에 추가되었지만 Git에서는 모르는 상태
                     Add를 통해 Unmodified로 됨

  • Unmodified : 새로 파일 추가 상태 (로컬저장소에 추가)
                       화일 Edit을 통해 Modified로 됨,  Remove하면 Untracted로 떨어짐

  • Modified : 파일이 추가된 이후  수정된 상태
                   화일을 Stage하면 Staged 상태로 됨

  • Staged : Git의 스테이징 영역에 반영된 상태
                commit하면 다시 Unmodified 상태로 됨

 

3. GitHub 계정 가입

 

-  github 가입사이트 ( https://github.com/ )

 

 GitHub에 들어가서 사용자 이름, 이메일, 비밀번호를 입력

 Free와 Pro유형 중, Free 선택하고 “Finish sign up” 버튼을 클릭.

 

등록한 이메일로 인증 메일이 도착하면 사용자 인증 및 GitHub 계정 등록 완료.

 

4. Git 설치

OS별 Git 설치 설명 및 링크 https://git-scm.com/book/ko/v2/%EC%8B%9C%EC%9E%91%ED%95%98%EA%B8%B0-Git-%EC%84%A4%EC%B9%98  

 

Windows에 Git을 설치하는 방법들 

  • Git 웹사이트 http://git-scm.com/download/win에서 Git 공식 배포판을  다운로드 받아 설치
  • 'Git for Windows’ 사이트 https://gitforwindows.org/ 에서 설치(Git 자체와는 별도의 프로젝트)
  • 자동화된 설치 방식은 Git Chocolatey 패키지를 통해 이용가능
  •  GitHub Desktop 웹사이트에서 'GitHub Desktop’ 설치  : Windows에서 Git을 사용하는 또 다른 방법으로 'GitHub Desktop’을 설치. Git을 Powershell에서 사용할 수 있다. 인증정보(Credential) 캐싱과 CRLF 설정까지 가능

 

Git  설치 방법은 여기에서 설명하지 않고 설명이 잘 된 사이트를 소개 한다
https://shxrecord.tistory.com/115?category=677810

 

[Git]Windows 환경의 Git 설치

이번에 정리할 내용은 GitHub(깃허브) 사용법입니다. 개발자에게 깃허브는 많은 도움이 되니까 :) 먼저 Git을 설치해보자. (참고로 설치 옵션들의 내용은 구글링 및 구글번역을 도움받았으니 틀린

shxrecord.tistory.com

 

 

설치가 되면 아래와 같은 세개의 기능으로 소스 코드 관리가 가능하다

 

 

Git GUI  : 그래픽 사용자 인터페이스 기능으로 쉽게 관리

 

 

 

Git Bash : Shell 방식으로 리눅스 가능

 

 

 

Git CMD : Windows CMD 콘솔 창이 열림

 

 

 

 

5. Git Bash

  • 리눅스 기반의 명령어 수행을 위한 콘솔 프로그램
  • 리눅스 쉘과 같음
  • Git CMD도 제공되긴 하지만 대부분 Bash를 사용
  • [사용자]@[컴퓨터이름] [Bash이름] ~ [현재위치]

[ git bash 기본 명령어 ]

  • cd : 폴더 이동
  • mkdir : 폴더 생성
  • touch 파일이름 : 파일 생성 (빈 파일 생성)
  • ls : 현재 위치의 파일 및 폴더 보기
  • clear : 콘솔 창의 내용을 클리어해줌
  • git status : 현재 저장소 현황 보기
  • [Shift + Insert] : 붙여넣기 (Ctrl + v 안됨)

 

6. Git 사용자 등록 

  • 우선 기존에 등록되어 있는 구성 정보를 알아본다 :  git config --list
  • 이메일 등록 : git config --global user.email "이메일주소"
  • 이름 등록 : git config --global user.name "이름"

깃허브의 연동과는 상관없는 사용자 정보이다.

삭제 명령어

  • 사용자 이메일 삭제 : git config --unset user.email
  • 사용자 이름 삭제 : git config --unset user.name
  • 글로벌 사용자 이메일 삭제 : git config --unset --global user.email
  • 글로벌 사용자 이름 삭제 : git config --unset --global user.name

 

7. 로컬 저장소(Repository) 생성

   1) git bash를 실행

   2) 관리할 프로젝트 디렉토리 생성

  • 먼저 로컬에 소스코드 저장소를 생성한다. 주로 프로젝트 폴더를 저장소로 지정 한다
  • (주의: 윈도우즈는 경로표시를 역슬레시(\)를 사용, bash는 슬레시(/) 사용)
  • 저장소로 설정된 폴더는 뒤에 (master) 또는 (branch) 라는 표식이 붙는다.

   3) 프로젝트 디렉토리에 "git init" 입력.

   4) ".git" 파일이 생성되면 완료.

 

지정한 저장소를 해제하기 위한 명령어는 따로 없다. 탐색기에서 해당 폴더에 숨김 폴더로 생성되는 ".git" 폴더를 지워버리면 된다.

 

8. Git 파일생성, Git에게 관리하도록 설정, GitHub 업로드

   1) 프로젝트 디렉토리에서 t1.txt 화일 생성 ( "vim t1.txt" 등)    ====> Untracted 상태

   2) $ git add t1.txt    : Git 에게 파일을 관리할 것이라고 알려줌. ====> Unmodified로 됨

       - 로컬 저장소에 업로드할 파일 및 폴더를 추가하는 것임

       - "git add ." 또는 "git add -A" 는 현재 폴더 내에 있는 모든 폴더와 파일을 스테이징에 업로드

       - 스테이징에 있는 파일을 삭제도 가능하다.  git rm --cached 파일명

   3) $ git status         : 프로젝트 폴더 파일 상태 확인

       - 아래 그림 처럼 뉴 화일 t1.txt가 Commit되지 않은 상태로 보임

   4) $ git commit -m  "현재 커밋에 대한 설명(메모)"   

      - 로컬 저장소에 화일 업로드 

      - add는 업로드 대상 파일(폴더)이 스테이징 영역에 업로드 되고,

      - commit은 실제 저장소에 업로드 (그시점의 기록이 스냅샷 저장됨)

   5) $  git status         : 변경 사항 검색

 

   6) $git push origin master      :  변경된 내용을 원격저장소 GitHub에 올리기

 

   지금까지 커밋 및 업로드 절차를 정리하면 다음과 같다(Test 해보기)

 1. "$touch t2.txt"   : 화일 하나 생성 
 2. "$git status"      : 생성한 파일이 빨간색으로 보임
 3. "$git add ."       : 파일을 add해주면 화일명이 초록색이 된다
 4.  "$git commit m "Second-1 test 커밋(메모)"   : "working tree clean"이라는 문구가 보인다.
       더 이상 커밋할 것이 없는 상태이다  
         5.  "$git push origin master  : GitHub로 파일 올리기

 

   ☆ 특정 커밋 시점으로 되돌아가기

  • 커밋 목록 보기 : git log --oneline    : 커밋의 ID와 입력한 메모들을 볼 수 있다
  • 커밋된 시점으로 되돌리기 : git reset --hard 커밋ID
  • 최신 커밋(Head)으로 이동하기 : git reset --soft 커밋ID.
(주의 !!)
- reset시 옵션 'hard'는 변경된 파일들의 내용까지 모두 되돌린다.

  실제 t2.txt 파일이 지워진 것을 확인할 수 있다.
  뿐만아니라 파일 안에 변경된 내용까지 모두 되돌아가서 소스코드도 해당 시점으로 돌아간다.

- soft 옵션은 실제로 되돌아가는게 아닌 특정 시점 이후의 커밋 내용을 목록에서 안보이게 하는 것이다.

- 커밋할 때 생기는 스냅샷 파일들은 엮여 있기 때문에, 중간에 커밋을 reset(hard, soft 등)하게 되면 그 이후에 커밋했던 내용도 목록에서 지워진다


 

"t2.txt" 파일을 다시 만들어 커밋 후, 'reset --soft' 을 실행하면 커밋시점은 사라졌지만 해당 파일은 그대로 있다

 파일을 생성한 뒤 Commit하지 않고 Reset 하면 파일은 지워지지 않는다. 롤백(reset) 대상이 아니기 때문이다

 

 

8. Pull Request

  내가 push한 내용을 다른 사람들이 알고 공유할 수 있도록 repository 마스터에게 pull 해달라고 요청하는것이 Pull Request이다

  Pull  Request 절차는 다음과 같다

기존 프로젝트를 fork 후에 작업 및 Contribution 하는 절차이다

 

   1) Fork

       원하는 프로젝트의 저장소를 자신의 저장소로 Fork 한다.

       (프로젝트로 들어간후에 우측 상단의 Fork  클릭)

 

   2)  fork로 생성한 본인 저장소에서 clone with HTTPS를 누르고 url을 복사한다.

          - URL 형식 : https://github.com/user명/프로젝트명.git

 

   3)  Fork한 저장소를 로컬에 clone 한다.

          - $ git clone https://github.com/user명/프로젝트명.git 

 

    4) 로컬 저장소에 원격 저장소를 추가한다. github 저장소에서  확인한 url을 사용한다.

      - 원본 프로젝트 저장소를 원격 저장소로 추가

         $ git remote add 별명(remote name) https://github.com/원래 소스 user명/프로젝트명.git 

           Remote name 관례는 upstream이다

      - 원격 저장소 설정 현황 확인 $ git remote -v

 

   5) branch 생성

     - 로컬 컴퓨터에서 코드 추가 작업은 branch를 만들어 진행한다.

     - 개발을 하다 보면 코드를 전체 복사하여 독립적으로 개발을 진행할 수 있는데, 이것이 브랜치다

     - abc 라는 이름의 branch를 생성.  $ git checkout -b abc 

        (-b 옵션은 브랜치 생성 및 Switched to a new branch 'abc')

     - $ git branch    =>  abc와 master 두개가 보인다

 

   6) 코드수정 후 add, commit, push

  • 코드를 수정한다.
  • $git add .
  • $git commit -m 화일명
  • $git push origin abc 해서 자신의 github repository (origin)에 수정사항을 반영한다.. push 시에 branch 명 abc를  명시해주어야 한다. (branch가 아니면 +master)

   7) Create Pull Request

  • push가 정상적으로 완료되면 github 저장소에 Compare & pull reqeust 버튼이 활성화 되어 있다.
  • 해당 버튼을 선택하여 메시지를 작성하고 Pull Request를 생성한다.
pull 과 fetch ?
fetch 는 merge 를 수행하지 않는다.
merge는 내가 수정한 것이 변경될 수 있다
원본을 가져올 때는 fetch를 사용하는 것이 좋다.
$git fetch upstream

   8) 코드 검토후 Merge Pull Reqest

      원본 저장소 관리자는 코드 변경내역을 확인하고 Merge 여부를 결정한다.

 

   9) Merge 이후 branch 삭제 및 동기화

  • 원본 저장소에 Merge가 완료되면 로컬 코드와 원본 저장소의 코드를 동기화 한다.  $ git pull origin abc
  • 로컬의 branch는 삭제한다.   $ git branch -d abc

 

9. GitHub에서 로컬로 파일 가져오기 (Clone & Pull)

로컬에서 GitHub으로 화일을 올리는 것은 Push이고, 반대로 가져오는 것은 Pull이다

 

원격 저장소를 내 컴퓨터에 받아와 동기화하는 것은 Clone 이다. 

클론 도중에 원래 저장소에서 새 버전을 만들어  push를 할 경우  업데이트된 데이터는 pull 로 받아올 수 있다.

 

(연습 해보기)

1) 컴퓨터에서 A 폴더를 만든다

 

2)  클론(Clone)명령어로 GitHub의 B 저장소를 받아온다 git clone URL주소 .

    "."은  폴더안에 모든 파일들을 가져오는 것이다

 

3) 새 파일 생성 후 원격저장소(GitHub)에 add/commit/push 명령어로 업로드 하고, GitHub에서 새 커밋을 확인한다

   > $git add 화일명     >  $git commit -m  "메모"    >   $git push origin master

 

4) 컴퓨터에서 B폴더를 만들고(init과정 포함)새로 올린 커밋을 받아온다  $git pull origin master

 

5) GitHub의 화일들이 내 컴퓨터 B폴더와 동기화 된다

 

깃, 깃허브의 개념을 알아보고, 기초 사용법을 익혔다.  이 외에도 많은 용법이 있겠지만 여기까지 익힌 내 자신에게 칭찬을 보낸다

 

언젠가 깃허브를 새 날개 깃처럼 쉽게 사용할 수 있을 것이다.

 

반응형