티스토리 뷰

Data/Engineering

[DE] Git

jeong_reneer 2022. 1. 11. 23:28

1. 버전 관리

1) Version Control System (VCS) : 버전 관리 시스템

- 파일 변화를 시간에 따라 기록 → 특정 시점의 버전 꺼내오기 가능

- 각 파일 또는 프로젝트 전체를 이전 상태로 되돌릴 수 있음

 

2) Local Version Control System (LVCS) : 로컬 버전 관리 시스템

- 데이터베이스를 사용하여 버전 관리

ex) RCS(Revision Control System) : Patch Set(파일에서 변경되는 부분) 관리

 

3) Centralized Version Control System (CVCS) : 중앙집중식 버전 관리 시스템

- 파일을 관리하는 서버 별도 존재 + 클라이언트가 서버를 통해 파일을 받아 사용

- 장점 : 꼼꼼하고 쉽게 관리 가능

- 결점 : 중앙 서버가 다운되면 (중앙 DB가 있는 하드디스크에 문제가 생기면) 프로젝트의 모든 히스토리 잃음

 

4) Distributed Version Control System (DVCS) : 분산 버전 관리 시스템

- 클라이언트가 저장소 + 히스토리 전부 복제

- 서버 복원 가능

- 많은 수의 원격 저장소 존재 가능 → 동시에 다양한 그룹과 다양한 방법으로 협업 가능

ex) Git, Mecurial, Bazaar, Darcs

 

 

2. Git

1) Git : 리눅스 창시자(Linus Torvalds)가 Linux 커널 코드를 관리할 목적으로 개발한 DVCS

- 빠른 속도, 단순 구조, 비선형적 개발 (동시다발적 브랜치), 분산 처리, 대형 프로젝트에 유용 (속도, 데이터 크기)

- 거의 모든 명령을 로컬에서 실행

 

2) 데이터 처리 방법 : 시간순으로 프로젝트의 스냅샷을 저장

- 데이터를 파일 시스템 스냅샷의 연속으로 취급하여 크기가 아주작음

- 커밋하거나 프로젝트 상태를 저장할 때마다 파일이 존재하는 순간을 중시

- 파일이 달라지지 않았으면 이전 상태 파일에 대한 링크만 저장하며 파일 새로 저장 X

 

 

3) 관리하는 파일 상태 : Committed, Modified, Staged

(1) Committed : 데이터가 Local DB에 안전하게 저장된 상태

(2) Modified : 수정한 파일을 아직 Local DB에 commit 하지 않은 상태

(3) Staged : 현재 수정한 파일을 곧 commit 할 것이라고 표시한 상태

 

3. GitHub

1) Github : Git 저장소 호스팅을 지원하는 웹 서비스

* (웹) 호스팅 : (서버의) 일정 공간을 나눠 임대하는 것 

2) GUI 지원

3) 수많은 오픈 소스 존재 : Git 호스팅, 이슈 트래킹, 코드 리뷰 등 프로젝트 진행

 

4. Set Up

1) Git

[Windows] Git bash 사용 → Linux command 사용 가능

[다른 OS] 터미널 그대로 사용

- 유저 네임, 이메일 설정, 설정 확인

82104@DESKTOP-E0BIMFI MINGW64 ~/YbigtaGit (master)
$ git config --global user.name "HJ Im"
$ git config --global user.email "jeonggg119@yonsei.ac.kr"
$ git config --list
....
user.name=HJ Im
user.email=jeonggg119@yonsei.ac.kr
....

 

2) GitHub

- 새로운 리포지토리 생성

 

5. Basic

1) git init : Git 저장소 시작

저장소로 사용하고 싶은 디렉토리(폴더)로 들어간 뒤, git bash 실행

→ git init

→ .git (숨김 폴더) 자동 생성 : 변경 내용 저장됨, 삭제 시 변경 내용 추적 불가

$ git init
Initialized empty Git repository in C:/Users/82104/YbigtaGit/.git/

 

2) git remote add <원격 저장소 이름> <url>

cf) 원격 저장소 이름으로 origin 많이 사용

git remote -v : 원격 저장소 확인

$ git remote add origin https://github.com/jeonggg119/Ybigta.git

$ git remote -v
origin  https://github.com/jeonggg119/Ybigta.git (fetch)
origin  https://github.com/jeonggg119/Ybigta.git (push)

 

3) git status : 파일들의 상태 확인

* 파일 상태

Untracked : 스냅샷에도 Staging Area에도 포함되지 않은 파일 (관리 대상 X)

Tracked : 이미 스냅샷에 포함되어 있던 파일 (관리 대상 O)  

   = Unmodified(수정 X) + Modified(수정 O, commit X) + Staged(곧 commit으로 저장소에 기록할) 상태

 

 

 

4) git add <파일명1> <파일명2> : 특정 파일들 Staged 상태로 만들기

git add . : 모든 파일들 Staged 상태

$ vim hi.txt

$ git status
starting fsmonitor-daemon in 'C:/Users/82104/YbigtaGit'
On branch master
No commits yet
Untracked files:
  (use "git add <file>..." to include in what will be committed)
        hi.txt
nothing to commit (create/copy files and use "git add" to track)

$ git add hi.txt

$ git status
On branch master
No commits yet
Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
        new file:   hi.txt

 

5) git commit -m "<commit message>" : commit 하기 (Staging Area → Repository)

git log : commit 히스토리 조회

$ git commit -m "first commit"
[master (root-commit) 06fa973] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hi.txt

$ git status
On branch master
nothing to commit, working tree clean

$ git log
commit 06fa9734c2c9e6324266fb3905aa1a070aad6ae5 (HEAD -> master)
Author: HJ Im <jeonggg119@yonsei.ac.kr>
Date:   Wed Jan 12 01:54:46 2022 +0900

    first commit

 

6) git push <원격 저장소 이름> <브랜치 이름> : 로컬 저장소 변경 사항 반영

cf) 원격 저장소 이름은 보통 orgin, 브랜치 이름은 보통 master

$ git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 211 bytes | 211.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/jeonggg119/Ybigta.git
 * [new branch]      master -> master

 

7) git pull <원격 저장소 이름> <브랜치 이름> : 원격 저장소 변경 사항 반영

$ git pull origin master
remote: Enumerating objects: 4, done.
remote: Counting objects: 100% (4/4), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 645 bytes | 35.00 KiB/s, done.
From https://github.com/jeonggg119/Ybigta
 * branch            master     -> FETCH_HEAD
   06fa973..4283b94  master     -> origin/master
Updating 06fa973..4283b94
Fast-forward
 hi2.txt | 1 +
 1 file changed, 1 insertion(+)
 create mode 100644 hi2.txt

8) git clone <url> : 원격 저장소 내용 복사해오기

$ git clone https://github.com/jeonggg119/Ybigta.git
Cloning into 'Ybigta'...
remote: Enumerating objects: 6, done.
remote: Counting objects: 100% (6/6), done.
remote: Compressing objects: 100% (3/3), done.
remote: Total 6 (delta 0), reused 3 (delta 0), pack-reused 0
Receiving objects: 100% (6/6), done.

 

6. Branch

1) 목적 : 다른 사람의 영향을 받지 않고 작업하기 위해 사용

 

2) branch 생성 및 이동

git branch : branch list 확인

git branch <브랜치 이름> : branch 생성

git checkout <브랜치 이름> : branch로 이동

git checkout -b <브랜치 이름> : branch 생성과 이동을 동시에

cf) * 있는 브랜치 = 현재 브랜치

$ git branch
* master

82104@DESKTOP-E0BIMFI MINGW64 ~/YbigtaGit (master)
$ git branch master2

82104@DESKTOP-E0BIMFI MINGW64 ~/YbigtaGit (master)
$ git branch
* master
  master2

82104@DESKTOP-E0BIMFI MINGW64 ~/YbigtaGit (master)
$ git checkout master2
Switched to branch 'master2'

82104@DESKTOP-E0BIMFI MINGW64 ~/YbigtaGit (master2)
$ git branch
  master
* master2

 

3) git merge <병합할 브랜치 이름> : branch 병합

Ex) master2 브랜치에서 새로운 commit을 한 상황

82104@DESKTOP-E0BIMFI MINGW64 ~/YbigtaGit (master2)
$ git checkout master
Switched to branch 'master'

82104@DESKTOP-E0BIMFI MINGW64 ~/YbigtaGit (master)
$ git merge master2
Updating 4283b94..d61ccd6
Fast-forward
 hi3.txt | 0
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 hi3.txt

https://learngitbranching.js.org/?locale=ko

 

7. Conflict

1) Conflict : 각각의 브랜치에서 동일한 파일을 수정하여 커밋한 후 병합할 때 발생

2) 해결 방법 : 충돌이 일어난 파일을 수정 후 다시 커밋

 

8. PR (Pull Request)

1) 목적 : push 권한이 없는 프로젝트에 기여하고 싶을 때 사용

2) 순서 : fork → clone, remote 설정 → branch 생성 → 작업 후 add, commit, push → pull request 생성

→ 원작자가 코드 확인 후, merge pull request (원본 저장소 관리자의 역할) → 로컬 저장소와 원본 저장소 동기화

 

9. Folder Upload

< 깃허브 레포지토리에 로컬 폴더 전체 업로드 하는 방법 >

 

git clone <url> 통해 로컬에 레포지토리와 연결되는 폴더 생성 후, 
그 폴더 안에 업로드할 폴더(or 파일) 다 넣고 새로 git bash 시작

$ git status
$ git add *
$ git commit -m "<커밋 로그>"
$ git remote -v
$ git push origin main

 

git status : Working directory 상태 확인

git add : Staging area로 폴더 이동

git commitgit push로 레포지토리에 폴더 업로드

 

'Data > Engineering' 카테고리의 다른 글

[DE] Cloud Computing (AWS/AZURE/GCP)  (0) 2022.02.11
[DE] 크롤링  (0) 2022.02.05
[DE] Linux  (0) 2022.01.09
댓글
공지사항