티스토리 뷰
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 commit과 git push로 레포지토리에 폴더 업로드
'Data > Engineering' 카테고리의 다른 글
[DE] Cloud Computing (AWS/AZURE/GCP) (0) | 2022.02.11 |
---|---|
[DE] 크롤링 (0) | 2022.02.05 |
[DE] Linux (0) | 2022.01.09 |