Github

Github 시작하기

1. Git이란?

깃(Git)은 형상 관리 툴이다.
일반적으로 형상 관리란 특정 문서나 파일이 변경되었을 때 이렇게 변경된 내용을 기록하고 관리하는 것을 의미한다. 즉, 어떤 문서가 언제, 어떻게, 왜 변경되었는지를 잘 관리하고 싶다면 이런 형상 관리를 이용해 변경에 대한 부분을 관리하는 것이다.

깃은 일반문서가 아닌 소스코드의 변경점을 관리하는 형상 관리 툴이다.

2. Github란?

깃이 형상 관리 툴로 소스코드의 변경점을 관리한다고 했는데, 이런 소스 코드를 여러 사람들과 공유하며 협업을 하고 싶다면 인터넷을 이용해야 한다. 이런 깃을 웹 호스팅 서비스 기능으로 지원하는 사이트가 Github다.

깃허브가 협업에 좋은 이유

  • 원하는 시점으로 복원 가능
  • 변경된 내역 확인 가능
  • 여러 사람들의 병렬적으로 작업 가능, 작업한 내용들의 충돌 방지

3. 동작원리

4. 시작하기

  1. git을 설치한다.
  2. github에 가입하고 레퍼지토리(원격 저장소)를 생성한다.
  3. github에 올리고 싶은 폴더,파일이 있는 폴더에서 마우스 우클릭을 이용해 git bash here을 실행하고, 실행된 git bash에서 ‘git init’을 입력해서 해당 폴더에 비어있는 로컬 저장소를 초기화시킨다.
  4. ‘git add ./폴더,파일명’을 이용해서 원하는 폴더,파일을 스테이징해준다.
  5. ‘git commit -m “원하는메시지내용”‘을 이용해서 스테이징한 폴더,파일을 커밋해준다.
  6. ‘git remote add origine 원격 저장소주소’
  7. ‘git push -u origin main’을 이용해서 커밋한 폴더,파일을 원격 저장소로 푸시해준다.(원래는 main대신 master라는 단어를 사용했지만 인터넷에서 인종차별적 언어를 제거하자는 프로젝트를 통해 master대신 main으로 바뀌게 되었다.)
  8. 이렇게 원격 저장소에 올라온 폴더,파일과 히스토리를 다른 이가 받아오고 싶으면 ‘git clone’을 통해 다른 이의 로컬 저장소에 클론해줄 수 있다.

5. 브랜치

브랜치란 커밋을 가리키는 포인터의 역할이다. 커밋은 시계열 방식으로 저장되는데 이 커밋들 중 한 커밋을 골라 현 상태를 표시해주고 이때 브랜치가 한 커밋을 골라주는 느낌이다. merge는 다른 브랜치를 그대로 가져온다. 그래서 브랜치가 나왔다가 합병된 것을 알 수 있다. rebase는 다른 브랜치에 있던 커밋을 main브랜치로 복사해서 가져온다. 그래서 브랜치가 나왔다가 합병된 것을 모른다. 마치 하나의 main브랜치에서 모든 작업이 이루어진 것처럼 보인다.(=커밋 아이디가 바뀐다)

기본적으로 github에서 main브랜치라는 하나의 흐름을 통해 작업이 수행된다. 이때 A와 B라는 인원이 동시에 작업을 하는데 서로 영향을 받지 않으며 작업을 하고 싶을 때 main브랜치에서 2개의 브랜치를 만들어내고 이 브랜치 안에서 각자 작업을 수행하게 된다. 그리고 각자 작업이 끝나면 main브랜치에 각자의 브랜치를 병합하여 다시 하나로 만들어 줄 수 있다.

브랜치란 github를 통해 협업을 할 때 개인의 작업들이 서로 영향을 받지 않게 기본. 만약 A와 B가 같은 파일을 동시에 수정을 하는데 실시간으로 수정내용이 반영된다면 문제가 생길 수 있다. 이런 문제점을 막기 위해 A수정은 1브랜치에서, B수정은 2브랜치에서 진행하고 수정이 끝난 브랜치들을 하나로 합치면 서로 충돌하지 않고 수정을 할 수 있다.

5.1 브랜치 전략

브랜치전략은 여러 개발자가 하나의 저장소를 사용하는 환경에서 효과적인 개발을 하기 위해 나온 개념이다. 몇가지 브랜치 전략들을 알아보자.

  • github flow
    github에서 만든 단순한 구조의 브랜치 전략이다. main브랜치를 중심으로 작업용 브랜치들을 여러개 만들고 각 작업을 작업용 브랜치들에서 수행하고 다시 main브랜치에 merge하는 방식이다. 이 방식은 수시로 배포하기 좋은 구조다.

  • git flow
    좀 더 정형화된 github flow라고 생각하면 된다. 많은 기업들이 사용하는 형태로 인력이 많고 배포가 정기적일 경우 용이한 전략이다. 총 5가지의 브랜치가 있다.
  • 브랜치 종류
    • 메인브랜치 ( 계속 유지되는 브랜치 )
      • main : 현재 배포 중인 브랜치
      • develop : 다음에 배포할 버전업 브랜치
    • 보조브랜치 ( 목적을 이루면 삭제되는 브랜치 )
      • feature : develop에서 추가할 기능구현하는 브랜치 / 기능구현 이후 develop에 merge된다.
      • release : develop에서 main으로 merge하기전 검사(QA)가 진행되는 브랜치 / 오류발견,수정 후 main,develop에 merge된다.
      • hotfix : main에서 생긴 오류를 수정하기 위한 브랜치 / 오류수정 이후 main,develop에 merge된다.
  • gitlab flow

6. 명령어 및 용어 모음

  • git clone “깃주소” : 깃주소에 있는 내용 복사해오기
  • git add . : 모든 내용 스테이징
  • git commit -m “커밋메시지” : 해당 커밋메시지로 커밋
  • git push origin main : main브랜치에 푸쉬
    • git push origin 푸시할브랜치명
  • git pull : 연결된 깃주소에서 풀
    • git fetch origin 후 git merge와 같은 작업
  • git diff : 다른 부분 보여주기
  • git branch : 브랜치들 출력
    • D “브랜치명” : merge안한 브랜치까지 모두 삭제
    • d “브랜치명” : merge한 브랜치만 삭제
  • git checkout : 브랜치에서 나옴
  • git log : 커밋내역 출력
    • –oneline : 한줄로
    • –patch : 내용
  • git merge :
    • –abort : merge 취소
    • –continue : merge 계속진행
    • «< Head 밑, ===== 밑 : 최신커밋(main브랜치) 내용, merge로 합치려는(가져오는) 브랜치 커밋내용
  • git rebase :
    • git rebase -i HEAD~숫자
  • ^ : 한 커밋 위로
  • ~숫자 : 숫자만큼 커밋 위로
  • HEAD : 최신 커밋을 가리키는 용어
  • reset : HEAD가 예전 커밋을 가리키게 설정(마치 최근 커밋을 한 적이 없는 것처럼 만들어버림)
    • –soft : ex) git reset –soft HEAD~ : 한 커밋 전으로 소프트 리셋( 스테이징 했던건 그대로 처리됨 )
    • –mixed : 디폴트값이다 ex) git reset –mixed HEAD~ : 한 커밋 전으로 믹스드 리셋( 스테이징 했던것 처리 안됨. 그냥 아예 한 커밋 전으로 돌아감 )
    • –hard : ex) git reset –hard HEAD~ : 한 커밋 전으로 하드 리셋( 아예 추적된 것까지 풀림 )
    • 즉, soft와 mixed은 방금 한 작업들을 수정하고 싶을 때 사용, hard는 방금 한 작업들을 그냥 아예 삭제하고 싶을 때 사용한다고 생각하면 쉽다
  • revert : reset과 같은 느낌이지만 reset은 그냥 되돌아가버린다면, revert는 되돌아가는 것을 커밋하는 느낌이다. 그래서 공유되고 있는 커밋이라면 revert로 작업해주는 것이 좋다.
  • cherry-pick : merge하지 않을 브랜치에서 원하는 커밋만 골라 뽑아내는 명령어 ex) git cherry-pick 커밋명1, 커밋명2 …
  • git stash : stack형태 저장공간에 스테이징만 되고 커밋되지 않은 내용들 저장
    • list :
    • pop :

충돌막기

  1. main에 바로 merge하지 않음
  2. main에 merge할 branch에서 먼저 git rebase main 를 실행시키고
  3. 그 다음에 main에서 git merge branch명 을 실행한다.

results matching ""

    No results matching ""