Ch01-05 Git 설치와 사용준비, Local Repository, Remote Repository (Git 1-4)

김민지·2023년 4월 26일
0

Part 06. Git

목록 보기
1/2
  1. 버전관리
  • 버전관리 시스템(형상관리)
    -> Configuration Management Systems / Version Control Systems
  • 버전관리의 필요성
    -> Source Data + History(이력)을 기반으로
    -> 협업, 작업추적, 복구 등이 가능
  1. Git 등장 배경
  • Git 등장 전에는 Source Folder + 실행파일을 버전별로 카피하여 관리함
    -> 하루종일 개발한 코드가 컴퓨터가 다운되면서 날아가버릴 수 있음
    (1) Local Version Control Systems : 내 컴퓨터에서 버전 관리 가능 -> 내 컴퓨터 하드가 날아가면 전체 코드 사라짐. 버전은 관리되지만, 협업은 여전히 어려움
    (2) Centralized Version Control Systems : 중앙에서 관리하기
    -> 협업이 가능해짐
    -> commit하는 순간 배포되어 다수에게 버그 유발 가능 (서버는 바로 commit)
    -> 인터넷이 안 되면 작업 불가능
    -> 자신만의 version history를 가질 수 없음
    (3) Distributed Version Control Systems : 분산 관리
    -> commit하더라도 개인저장소 내에 적용됨 (다른 개발자에게 영향 없음)
    -> 원하는 순간에 배포(Push) 가능
    -> 오프라인에서도 작업 가능
    -> 자신만의 version history를 가짐

  • 버전관리 시스템의 종류
    -> CVCS (중앙관리) - CVS, SVN, etc.
    -> DVCS (분산관리) - Mercurial, Git, etc.

  • Git : SVN보다 빠른 속도와 많은 기능을 지원, 현재 많은 기업이 사용 중

  1. Git 기반의 서비스
    (1) Github
  • Git을 호스팅해주는 웹서비스, 협업을 위한 기능을 제공
  • 참고 : 소스코드 보안이 중요한 경우 사용을 기피함
    (2) Gitlab
  • 설치형 버전관리 시스템 : 소스코드 보안이 중요한 기업에서 주로 사용
  • 클라우드 버전관리 시스템 : 10명 이하 무료 (Github와 유사)
  • Issue tracker, Git Remote Repository, API, Team, Group 기능 제공
  • 앞으로 터미널은 Git Bash 이용! (관리자 권한으로 실행하기)
  1. Git Global Configuration
  • Git Global Username, Email
git config --global user.name <username>
git config --global user.email <email>
  • Windows유저 주의 : 가져올 때는 LF를 CRLF로 변경하고, 보낼 때는 CRLF를 LF로 변경
git config --global core.autocrlf true
  • Mac 유저 : LF만 사용
git config --global core.autocrlf input

-> CRLF : 줄바꿈 문자
Windows : CR (\r) + LF(\n)
Unix or Mac : LF (\n)
-> Windows 사용자와 Mac 사용자가 같은 Git Repository를 작업할 때, 코드에서 변경된 내용이 없어도 CRLF 차이로 인해 commit이 발생할 수 있음

  • Editor 설정
git config --global core.editor <editor>
  • 전체 설정 확인
git config --list
  • 항목별 설정 확인
git config <key>
  1. Git 기본용어
  • Repository : 소스코드가 저장되어 있는 여러 개의 Branch가 모여있는 디스크상의 물리적 공간
    -> Local Repository와 Remote Repository로 구분

  • Checkout : 특정 시점이나 Branch의 소스코드로 이동하는 것을 의미
    -> Checkout 대상 - Branch, Commit, Tag
    -> Checkout을 통해 과거 여러 시점의 코드로 이동이 가능

  • Stage : 작업할 내용이 올라가는 임시저장영역
    -> 이 영역을 이용하여 작업한 내용 중 commit에 반영할 파일만 선별하여 commit 수행가능

  • Commit : 작업할 내용을 Local Repository에 저장하는 과정
    -> 각각의 commit은 의미있는 변경단위이고, 변경에 대한 설명을 commit log로 남김
    -> 권장 - commit을 아끼지 말 것! (게임 save하는 것처럼)
    -> 참고 - commit 단위나 commit log format을 정해놓은 회사나 팀도 있음 (빌드 서버를 사용하는 경우)

  • Tag : 임의의 commit 위치에 쉽게 찾아갈 수 있도록 붙여놓은 이정표
    -> Tag가 붙은 commit은 commit id(version) 대신 tag name으로 쉽게 checkout 가능

  • Push : Local Repository의 내용 중, Remote Repository에 반영되지 않은 commit을 Remote Repository로 보내는 과정
    -> 권장 - Push하는 순간, 다른 개발자들도 영향을 받기 때문에 검증되지 않은 코드는 Push하지 않도록 함.

  • Pull : Remote Repository의 내용 중, Local Repository에 반영되지 않은 내용을 가져와서 Local Repository에 저장하는 과정
    -> 다른 팀원이 변경하고 Push한 내용을 Local Repository에 가져올 수 있음
    -> 참고 - Push 과정에서 Conflict(충돌)이 일어나서 Push가 거절된 경우, Pull을 통해 Remote Repository의 변경 내용을 Local Repository에 반영하여 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를 진행할 수 있음

  1. Local Repository 구성
  • Local Repository는 Git이 관리하는 3가지 단계로 구성되어 있음
    (1) Working Directory (작업공간) - 실제 소스 파일, 생성한 파일들이 존재
    (2) Index (Stage) - Staging area(준비영역)의 역할, git add한 파일들이 존재
    (3) HEAD - 최종 확정본, git commit한 파일들이 존재
  1. Local Repository 생성
  • Workspace 생성
mkdir git_ws

-> mkdir : making directory

  • Working Directory 생성 (Workspace로 이동한 뒤에)
cd git_ws
mkdir test_project
  • Git init : 폴더에서 Git를 초기화하는 명령어를 사용하면 해당 폴더를 Git이 관리하기 시작
cd test_project
git init
  • .git 확인 : .git 폴더가 생성된 것을 확인 -> .git로 이동해서 파일을 살펴보면 Git 관련 파일들이 생성된 것을 확인가능
ls -all   # 숨겨진 파일까지 모두 확인 가능한 명령어
  • 파일 생성 : Working Directory에 파일을 생성
    -> touch 명령어 - 빈 파일을 생성
touch test.txt
ls  # 확인해보기
  • Git Status : Git에 존재하는 파일 확인
git status
  • Git Add : Working Directory에서 변경된 파일을 Index(stage)에 추가
git add <filename>
  • Git Commit : Index(stage)에 추가된 변경사항을 HEAD에 반영(확정)
git commit -m "commit에 대한 설명" <filename>
  1. Remote Repository 생성, Push, Pull하기
  • Github에서 'Create Repository' 버튼 클릭

  • Github Token 생성
    : 얼마전부터 보안상의 이유로 Remote Repository 접속시 비밀번호 대신 Token을 사용

  • Remote Repository 등록
    : Local Repository에 연동할 Remote Repository를 등록 (Token 사용)

git remote add origin https://github.com/MJLOO/test_project.git
  • Remote Repository 등록 with username, token
git remote add origin https://<username>:<token>@github.com/MJLOO/test_project.git

-> 이렇게 등록하면 매번 유저네임과 토큰을 입력할 필요가 없어짐

  • Remote Repository 정보 확인
git remote -v
  • Remote Repository에 변경내용 Push하기
    : Local Repository(HEAD)에 반영된 변경내용을 Remote Repository에도 반영하기 위해서는 Git Push를 사용
    -> Git Push
git push origin <branchname>
git push origin master/main
  • Remote Repository 확인
    : Remote Repository 페이지에서 새로고침하면 Push된 파일이 보임

  • Local Repository에 Pull하기
    : Remote Repository의 내용에 맞춰 Local Repository를 갱신하려면 Git Pull 사용
    -> Git Pull

git pull origin <branchname>
git pull origin master/main
  • 정리 : 습관처럼 git status로 확인해보고, 뭔가 남아있다면 add, commit. 문제가 없다면 push로 remote로 보내주기 or pull로 local로 가져오기
  1. README File
  • 프로젝트에 대한 설명, 사용방법, 라이센스, 설치방법 등에 대한 내용을 기술하는 파일
  • 나, 직장동료, 프로그램 사용자를 위해 존재
  1. '.gitignore'
  • Git 버전 관리에서 제외할 파일목록을 지정하는 파일
  • 사용자가 원하지 않는 파일들을 자동으로 commit 대상에서 제외시켜 줌
  1. Default Branch
  • master or main
  • View all branches에서 branch 이름을 바꿀 수 있음
  • Settings에서 repository 생성시 정해지는 default branch 이름을 직접 정할 수 있음
  1. Remote Repository 복제하기 (Git Clone)
  • Local Repository를 생성하지 않은 상태에서 Git Clone 명령을 사용하여 Remote Repository를 Local에 복제할 수 있음
  • Git Clone
    : 앞서 폴더를 만들고
    -> Git init으로 해당 폴더를 초기화하고
    -> Remote Repository를 등록하고
    -> Remote Repository의 내용을 Pull하는 모든 과정을 Git Clone으로 할 수 있음
git clone https://github.com/<respository>.git
git clone https://github.com/MJLOO/HelloGit.git
  • Git Clone with username and token
git clone https://<username>:<token>@github.com/<repository>.git
  1. Branch
  • Branch 조회 (Local Branch)
git branch
  • Branch 조회 (Remote Branch)
git branch -r
  • Branch 조회 (Local + Remote)
git branch -a
  • Branch 생성
git branch <branchname>
  • Branch 이동
git checkout <branchname>
  • Branch 생성 + 이동
git checkout -b <branchname>
  • GitHub에서 Branch 확인
    : Local Repository에 생성된 Branch는 Remote Repository(GitHub)에서 보이지 않음
    -> Branch Push
git push origin <branchname>
  • Branch 삭제 (Local Repository)
git branch -d <branchname>
  • Branch 삭제 (Remote Repository)
git push origin --delete <branchname>

<제로베이스 데이터 취업 스쿨>

0개의 댓글