- Git: 버전 관리 시스템 (VCS; Version Control System).
- 원하는 시점마다 버전(커밋)을 만들고 자유롭게 돌아다닐 수 있음.
- 동료의 버전으로 이동도 가능, 동료의 버전과 내 버전을 비교해 최신본으로 업데이트 가능.(pull)
- 개인컴퓨터, USB, 회사서버, 클라우드(GitHub 등)에서 사용 가능. (저장 공간만 있으면 가능)
- GitHub: Git 클라우드 저장소.
CLI 버전 관리
- Command Line Interface.
- bash 이용.
Command Line 명령어
~
: 디렉토리 맨앞에서 루트폴더를 의미함. (최상위 폴더; 보통 바탕화면)
pwd
: 현재 디렉토리를 보여줌.
ls
: 현재 디렉토리의 폴더와 파일을 보여줌.
ls -al
: 숨김 파일 숨김 폴더 까지 보여줌.
cd
: change directory 의미. 위치를 변경.
rm -rf
: 파일 삭제.
로컬 저장소 버전 관리(Git)
- 프로젝트 폴더안에 로컬 저장소(.git)가 위치하고,
- 로컬 저장소에는 커밋(버전 정보), 원격 저장소 주소(GitHub), 스테이지(stage) 등 저장.
- git은 추적안됨, 수정없음, 수정함, 스테이지됨 총 4가지로 로컬 저장소 파일을 추적.
- 추적안됨은 상태는 파일이 프로젝트 폴더에 있지만 한번도
git add
되지 않은 파일. (stage에 없는 파일)
- 작업 공간(working directory) 밖에 있는 파일이라고 인식.
git init
- Git초기화. 로컬 저장소(.git) 생성.
- 원격 저장소에서 내 컴퓨터로 코드를 다운로드하면 로컬 저장소가 자동으로 생성.
- 한 프로젝트 폴더에 하나의 로컬 저장소만 유지해야 함.
- 로컬 저장소를 생성하면
(master)
표시. (master branch)
$ git init // 로컬 저장소 생성.
Initialized empty Git repository in ~~
git add
- 커밋으로 만들 프로젝트 폴더의 파일을 로컬 저장소의 스테이지로 복사하는 것을 의미.
- 변경 사항이 있는 경우에는 덮어 씌우고, 변경 사항이 없는 경우에는 그대로 존재.
- 한번 스테이지에 올렸던 파일은 수정이 없어도 스테이지에 존재. (수정 없음 상태로 존재)
$ git add README.md // README.md 파일 추가.
git add .
을 이용하면 프로젝트 폴더의 전체파일 추가 가능.
$ git add . // 전체 파일 추가.
$ git commit -m "메인페이지생성"
[master f578a1a] 메인페이지생성
2 files changed, 12 insertions(+) // 2파일 추가. 12줄의 인설션.
create mode 100644 app.js // app.js
create mode 100644 index.html // index.html
- 의미 있는 변동사항을 구분해서 추가 해야하는데,
- 그 이유는 커밋으로 만들었을 때 의미있는 버전관리를 할 수 있음.
- 예를 들어 특정한 디버깅을 위해 수정한 파일이 10가지라면 그 10가지를 하나의 커밋으로 만들어야 함.
- 단순 백업이 아닌 의미있는 버전관리를 해야, 미래의 내가 히스토리를 보고 파악 가능. (협업에서도 이점)
git commit -m "설명"
- 커밋 생성. (버전이 만들어짐)
git commit
은 스테이지에 올라온 파일을 감싸 커밋으로 만들어 로컬 저장소 내부에 저장되고 스테이지의 파일은 유지 됨.
- git의 커밋은 변경 사항의 모음이 아니고, 하나의 최종 코드모음.
- 하지만 변경된 파일이 아니면 그대로 가져와 저장하는 것이 아니고, 변경되지 않았다는 내용으로 기록. (용량 낭비를 줄임)
- 기존 SVN은 변경 사항만 저장하여 한 버전을 보려면 맨 처음 커밋부터 계산해야 해서 느렸던 반면 git은 한결 빠르게 이용 가능.
$ git commit -m "README.md 추가" // 설명 부분에 상세 내용 적음.
[master (root-commit) 42b5ceb] README.md 추가
1 file changed, 3 insertions(+) // 1개의 파일이 변경 되었고, 3줄 인설션.
create mode 100644 README.md // README.md
git log
$ git log
Date: Fri Dec 2 22:44:24 2022 +0900
README.md 추가
Date: Fri Dec 2 22:59:53 2022 +0900
메인페이지생성
원격 저장소에 올리기(GitHub)
- GitHub 프로젝트 저장소(원격 저장소) 생성 이후 진행.
git remote add
- 프로젝트 폴더에 원격 저장소(remote) 주소 추가(add).
// 로컬 저장소와 "https://github.com/---/test.git"의 원격 저장소 연결.
// 원격 저장소 주소를 origin으로 설정함.
$ git remote add origin https://github.com/---/test.git
git push
$ git push origin master // origin은 위에서 설정한 원격 저장소 주소, master는 branch master를 의미.
Enumerating objects: 7, done.
Counting objects: 100% (7/7), done.
Delta compression using up to 8 threads
Compressing objects: 100% (4/4), done.
Writing objects: 100% (7/7), 759 bytes | 126.00 KiB/s, done.
Total 7 (delta 0), reused 0 (delta 0), pack-reused 0
To https://github.com/coldair426/test.git
* [new branch] master -> master
- 다른 사람의 원격 저장소에 업로드 할 경우에는 권한이 있을 경우 가능.
원격 저장소에서 받아오기
git clone 주소 .
- 원격 저장소를 로컬 저장소로 받아오기.
- 로컬 저장소(.git)가 자동으로 생김.
$ git clone https://github.com/---/test.git .
Cloning into '.'...
remote: Enumerating objects: 7, done.
remote: Counting objects: 100% (7/7), done.
remote: Compressing objects: 100% (4/4), done.
remote: Total 7 (delta 0), reused 7 (delta 0), pack-reused 0
Receiving objects: 100% (7/7), done.
git pull
- 원격 저장소가 업데이트 되었을 때, 내 로컬 저장소를 업데이트.
git push
와 비슷함.
$ git pull origin master // origin은 저장한 원격 저장소 주소. master는 mater branch의미.
remote: Enumerating objects: 5, done.
remote: Counting objects: 100% (5/5), done.
remote: Compressing objects: 100% (2/2), done.
remote: Total 3 (delta 0), reused 3 (delta 0), pack-reused 0
Unpacking objects: 100% (3/3), 341 bytes | 14.00 KiB/s, done.
From https://github.com/coldair426/test
* branch master -> FETCH_HEAD
f578a1a..eeeedcb master -> origin/master
Updating f578a1a..eeeedcb
Fast-forward
README.md | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
여러 줄로 커밋 쌓기
- 위에서는 mater branch(자동으로 생성)에 한 줄로 커밋을 쌓았음.
- 혼자 작업하는 경우에는 큰 문제가 없지만 협업 과정에서 문제가 발생할 수 있음.
- 이를 해결하기 위해 branch를 만들어 여러 줄로 커밋을 쌓고 합침.
- **합치게 되면 여러 브랜치가 하나의 커밋을 가리킬 수도 있음.
- HEAD는 현재 작업하는 로컬 branch를 가리킴.
git branch
$ git branch cat // cat branch 생성.
git checkout
- 로컬 branch의 시점을 이동. (HEAD 변경)
$ git checkout cat // cat branch로 이동.
Switched to branch 'cat' // 이동 됨을 보여줌.
(master) 에서 (cat)으로 바뀜.
git merge
- master branch의 최신 커밋(base)에 다른 브랜치의 최신 커밋(compare)을 합치는 명령어.
- base가 될 커밋(master branch)으로 로컬 브랜치를 이동(HEAD)한 뒤 명령어로 머지함.
(master)
$ git merge oct // oct branch를 master branch와 머지.
Updating 56dbb52..18f5eff
Fast-forward
index.html | 1 +
1 file changed, 1 insertion(+)