GIT - 기본지식

솔비·2024년 1월 29일
0

🗂️ GIT

목록 보기
1/6
post-thumbnail

버전관리(Version Control)란?


파일 변경 사항을 시간에 따라 기록하고, 필요할 때 특정 버전을 다시 호출할 수 있는 시스템을 일컫는다.
간단히 설명하자면 동일한 정보에 대해 여러 버전을 정의하고 관리하는 것을 의미

🧷 사용하는 이유
1. 협업

  • 다수의 개발자가 동시에 작업할 수 있는 환경을 보다 안전하고 효율적으로 만들어준다.
  1. 백업 & 복구
  • 관리자의 실수로 버전이 꼬였을 때 언제든지 이전 버전 혹은 검증된 버전으로 롤백해 이상 상태를 복구할 수 있다.
  1. 히스토리 추적 & 관리
  • 이전 버전(이력; history)을 확인할 수 있고 필요한 경우 특정 버전으로 롤백할 수 있다.



버전관리 시스템의 종류


  1. CVS
    • 1980년대 만들어진 형상관리 시스템
    • commit 중 오류 발생 시 Rollback 이 되지 않는 등의 문제
    • 이후 SVN 으로 대체됨
  1. SVN
    https://subversion.apache.org/
    • 2000년대 만들어졌고, 현재까지 두루 사용 중
  1. Git
    https://git-scm.com/
    • SVN 보다 빠른 속도와 많은 기능을 지원
    • 현재 많은 기업이 사용 중





    GIT


Before
🧷 Local Version Control Systems
• 내 컴퓨터에서 버전 관리 가능 → 내 컴퓨터 하드가 날아가면 전체 코드 사라짐
• 버전은 관리되지만, 협업은 여전히 어려움

Now
🧷 Distributed Version Control Systems
• commit 하더라도 개인저장소 내에 적용됨 (다른 개발자에게 영향 없음)
• 원하는 순간에 배포(Push) 가능
• 오프라인에서도 작업 가능
• 자신만의 version history를 가짐

➡️ Git이 여기에 해당함 !!





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 point, 아끼면 똥됩니다.)
    • 참고 - 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 는 주종관계가 성립. 예 - dev branch 를 main branch 에 merge
    • Merge 되는 과정에서 Confict (충돌) 이 발생하는 경우
      Diff 를 수정하여 Conflict 를 해결한 뒤 Merge 를 진행 할 수 있음





1. Local Repository




A. Working Directory 생성

# --- 파일만들 경로 이동 ---

박솔비@솔비의gram MINGW64 ~
$ cd OneDrive/

박솔비@솔비의gram MINGW64 ~/OneDrive
$ cd Documents/

# --- 📌 git_ws 폴더생성 ---

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents
$ mkdir git_ws

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents
$ cd git_ws/

# --- test_project 폴더생성 ---

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws
$ mkdir test_project

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws
$ cd test_project/

# --- 📌 git init :  해당 폴더를 Git 이 관리하기 시작 ---

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project
$ git init
Initialized empty Git repository in C:/Users/solbi/OneDrive/Documents/git_ws/test_project/.git/

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master) 📌관리하기 시작했다는 뜻

# --- test 텍스트파일 생성 ---

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master)
$ git add test.txt



B. Index (stage) 로 add

# --- 현재 status 확인 ---
박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master)
$ git status
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
        test.txt

nothing added to commit but untracked files present (use "git add" to track)

# --- test 텍스트파일 add ---

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master)
$ git add test.txt



C. HEAD로 commit

이 단계부터 version이 매겨짐

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master)
$ git commit -m "first commit" test.txt
[master (root-commit) 551df05] first commit
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 test.txt

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master)
$ git status
On branch master
nothing to commit, working tree clean

🧷 Git이 관리하는 파일 확인방법

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master)
$ ls -all
total 4
drwxr-xr-x 1 박솔비 197121 0 Jan 29 15:52 ./
drwxr-xr-x 1 박솔비 197121 0 Jan 29 15:45 ../
drwxr-xr-x 1 박솔비 197121 0 Jan 29 16:02 .git/
-rw-r--r-- 1 박솔비 197121 0 Jan 29 15:52 test.txt

🧷 git Status





2. Remote Repository


A. 등록

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master)
$ git remote add origin https://sxlbl:{토큰복사본}@github.com/sxlbl/zerobase

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master)
$ git remote -v
origin  https://sxlbl:{토큰복사본}@github.com/sxlbl/zerobase (fetch)
origin  https://sxlbl:{토큰복사본}@github.com/sxlbl/zerobase (push)



B. Push | Local > Remote

박솔비@솔비의gram MINGW64 ~/OneDrive/Documents/git_ws/test_project (master)
$ git push origin master
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 205 bytes | 205.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
remote:
remote: Create a pull request for 'master' on GitHub by visiting:
remote:      https://github.com/sxlbl/zerobase/pull/new/master
remote:
To https://github.com/sxlbl/zerobase
 * [new branch]      master -> master

📌 local에서 commit한 test.txt 파일이 git에 push됨



C. Pull | Remote > Local


Daily Study Note
profile
Study Log

0개의 댓글