[Git] CLI 버전 관리

Chanki Hong·2022년 12월 1일
0

Git&Github

목록 보기
1/3
post-thumbnail

  • Git: 버전 관리 시스템 (VCS; Version Control System).
    • 원하는 시점마다 버전(커밋)을 만들고 자유롭게 돌아다닐 수 있음.
    • 동료의 버전으로 이동도 가능, 동료의 버전과 내 버전을 비교해 최신본으로 업데이트 가능.(pull)
    • 개인컴퓨터, USB, 회사서버, 클라우드(GitHub 등)에서 사용 가능. (저장 공간만 있으면 가능)
  • GitHub: Git 클라우드 저장소.

CLI 버전 관리

  • Command Line Interface.
  • bash 이용.

Command Line 명령어

  • ~: 디렉토리 맨앞에서 루트폴더를 의미함. (최상위 폴더; 보통 바탕화면)
  • pwd: 현재 디렉토리를 보여줌.
  • ls: 현재 디렉토리의 폴더와 파일을 보여줌.
    • ls -al: 숨김 파일 숨김 폴더 까지 보여줌.
  • cd: change directory 의미. 위치를 변경.
    • cd ..: 상위 폴더로 이동.
  • 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

  • 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(+)

0개의 댓글