[zero-base/] DS Part 6. Git - 42일차 스터디 노트

손윤재·2024년 1월 30일

제로베이스 DS 22기

목록 보기
43/55
post-thumbnail

Git 기반 서비스

❕ Github

  • http://github.com
  • Git을 호스팅 해주는 웹 서비스, 협업을 위한 기능을 제공
  • 소스코드 보안이 중요한 경우 사용을 기피한다.

❕ Gitlab

  • http://gitlab.com
  • 설치형 버전관리 시스템으로 소스코드 보안이 중요한 기업에서 주로 사용한다.
  • 클라우드 버전관리 시스템은 Github와 유사하다. (10명 이하 무료, Github보다 저렴)
  • Issue tracker, Git Remote Repository, API, Team, Group 등의 기능을 제공하고 있다.

Git Global 환경설정

Github에 가입한 email 주소와 username을 등록

  $ git config --global user.name <username>
  $ git config --global user.email <email>

CRLF 설정

  $ git config --global core.autocrlf true
  • Windows 같은 경우는 carriage-return(\r)과 line feed(\n)가 같이 들어가는 반면에MacOS에서는 line feed(\n)만 들어가게 된다.

  • 내용이 바뀌지 않았는데 CRLF 차이로 버전이 다르다고 인식하면 문제가 생길 수 있다.

  • WindowsOS일 경우 가져올 때는 LFCRLF로 변경하고, 보낼 때는 CRLFLF로 변경하도록 설정한다. 그러면 MacOS에서 올린 파일과 충돌없이 사용할 수 있다.


Git 기본 용어


🔰 Repository

  • 소스코드가 저장되어 있는 여러 개의 Branch가 모여있는 디스크상의 물리적 공간

  • Local Repository와 Remote Repository로 구분
    프로젝트시 두 저장소의 Sync(synchronization, 동기화)를 맞춰서 진행한다.


🔰 Checkout

  • 특정 시점이나 Branch의 소스코드로 이동하는 것을 의미

  • Checkout을 통해 과거 여러 시점의 코드로 이동이 가능하다.

  • Checkout 대상 : Branch, Commit, Tag

  • 버전관리 시스템은 commit을 통해 version을 계속 매기게 된다.
    특정 버전에 Tag를 달아서 관리할 수 있다.
    특정 버전에서는 여러 Branch로 나뉘기도 한다.


🔰 Tag

  • 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표

  • 의미가 있는 version에는 Tag를 달아놓는다.

  • Tag가 붙은 commit은 commit id (version)대신 tag name으로 쉽게 checkout이 가능하다.


🔰 Stage

  • 작업할 내용이 올라가는 임시 저장 영역

  • 이 영역을 사용해 작업한 내용중 commit에 반영할 파일만 선별하여 commit을 수행할 수 있다.

  • Local Repository는 3가지 단계로 구성되어 있는데

    • Working Directory (작업공간)은 Win 폴더로 눈으로 볼 수 있는 파일들이 저장되어 있는 공간이다.
    • Stage(Index)는 Working Directory에 있는 파일들 중 Git에서 관리할 파일을 선정해 git add 로 등록한 파일들이 존재하는 공간이다.
    • HEAD 영역에는 수정 후 version을 매겨 git commit 한 파일들이 존재하는 공간이다.

🔰 Commit

  • version을 매기는 행위로 작업한 내용을 Local Repository에 저장하는 과정

  • 각각의 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log로 남긴다.
    ⭐ commit의 메시지는 변경에 대한 내용을 담은 의미있게 작성하는 것이 좋다.

  • commit을 아끼지 말 것!


🔰 Push

  • Local Repository의 내용 중 Remote Repository에 반영되지 않은 commit을 Remote Repository로 보내는 과정

  • push하는 순간 다른 개발자들도 영향을 받을 수 있으므로 실행이 되는지 검증을 한 후 push한다! 검증되지 않은 코드는 push하지 말 것!


🔰 Pull

  • Remote Repository에 있는 내용 중, Local Repository 에 반영되지 않은 변경 내용을 가져와서Local Repository에 저장하는 과정

  • Remote Repository와 Local Repository의 Sync를 다시 맞추고 싶을 때 pull을 한다.

  • 다른 팀원이 변경하고 Push 한 내용을 Local Repository 에 가져올 수 있다.

  • Remote Repository와 Local Repository에서 같은 부분이 수정될 경우 충돌이 발생할 수 있다.

  • Push 과정에서 Conflict(충돌)이 일어나서 Push가 거절된 경우,
    Pull을 통해 Remote Repository의 변경 내용을 Local Repository에 반영해 Sync를 맞춰서 Conflict를 해결 한 뒤 다시 Push를 시도한다.


🔰 Branch

  • 특정 시점(commit 단위)에서 분기하여 새로운 commit을 쌓을수 있는 가지를 만드는 것

  • 개발의 주축이 되는 branch를 master branch(혹은 main branch) 라고 한다.

  • 모든 branch는 최종적으로 다시 master branch에 merge(병합)되는 형식으로 진행 된다.


🔰 Merge

  • Branch의 반대개념으로 하나의 Branch를 다른 Branch와 합치는 과정이다.

  • Merge되는 두 Branch는 주종관계가 성립한다.
    ex> dev branch를 main branch에 merge

  • Merge되는 과정에서 Conflict(충돌)이 발생하는 경우
    Diff 를 수정하여 Conflict를 해결한 뒤 Merge를 진행 할 수 있다.

profile
ISTP(정신승리), To Be Data Scientist

0개의 댓글