Git & Github (2) : 구조와 명령어

NtoZ·2023년 2월 12일
0

Git

목록 보기
2/5
post-thumbnail

🚩 Git , 협업을 위한 VCS

지난 포스트에서 보았듯, Git협업을 위한 분산된 버전관리시스템이다.
이번 시간에는 Git의 기본적인 구조명령어를 살펴보도록 하겠다.


🏁 Git 특징

Git에서 자주 사용하는 키워드

  • repository 또는 repo: 저장소 / Git으로 버전 관리하는 디렉토리를 의미
  • local repository: 로컬 저장소 / 작업자의 개발 환경(PC)에 설정된 Git 저장소
  • remote repository: 원격 저장소 / GitHub 등 외부 서버에 설정된 Git 저장소
  • commit: 커밋 / 특정 상태를 기록한 것, 즉 버전을 의미. 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업
  • branch: 브랜치 / 한국어로 번역하면 가지치기 또는 갈래라고 하는데 또 다른 작업공간을 의미
  • merge: 머지 / 한국어로 병합 또는 합치기라고 하는데 특정 브랜치에서 작업한 내용을 또 다른 브랜치에 적용하는 것을 의미

Git의 기본 기능은 이력 관리입니다. 많은 프로그램이 Ctrl + Z (undo)와 Ctrl + Y (redo)를 제공하는데, Git은 전체 소스 파일을 대상으로 해당 기능을 제공하고, 협업에 필요한 다양한 기능을 가지고 있습니다.
➡️ 아래하 한글에서는 단순히 수평적인 undo와 redo를 제공하지만 (예: 한 보 앞, 뒤),
Git에서는 커밋된 모든 소스 파일을 대상으로 언제든지 undo와 redo가 가능하다.
(예: 1월에 커밋한 version과 9월에 커밋한 version으로의 선회가 자유로움)

🔼 따라서 git은 branch를 제공함으로써 A안, B안, C안 등을 병렬적으로 준비할 수 있게 한다.
많은 회사에서 새 기능을 만들거나 버그를 수정할 때 브랜치를 만들고 코드 리뷰 후 메인 브랜치에 머지merge하는 방식을 사용한다고 한다.


🏁 Git Data 전송 구조

Git을 통한 Data 전송은 어떻게 이루어지는가?

Git Data Transport CommandGit data
🔼`HEAD` : 현재 작업중인 Branch를 가리킨다.
workspace(작업디렉토리) - index(staging area, 스테이징 영역)
- local repository(HEAD) - remote repository(원격 저장소)

Git의 전송 구조
➡️ git add : 파일을 Working directory(작업공간)에서 Git이 추적할 수 있는 index(staging 영역)으로 옮겨준다. (GIT🧐 : 이제 변경사항이 있는지 우리가 항상 추적 할게! )
➡️ git commmit : 현재 변경된 작업 상태에 대한 점검을 마치고, 원격 저장소(remote repository)로 전송하기 직전의 지역 저장소(local area)로 옮겨준다.
➡️ git push : 커밋되어 HEAD에 존재하는 변경 사항을 원격 저장소(remote repository)로 옮겨준다. ※ 단, 원격저장소에 덮어 씌우기 이전 다른 팀원이 git push했다면 원격저장소가 변경된 상태이므로, git pull을 먼저 해주어야 다른 팀원의 코드를 날려먹지 않을 수 있다.
➡️ git fetch : git fetch는 로컬 Git에게 원격 저장소에서 최신 메타데이터 정보를 확인하라는 명령을 전달한다. 단 fetch는 원격 저장소에 변경사항이 있는지 확인만 하고, 변경된 데이터를 로컬 Git에 실제로 가져오지는 않다.
➡️ git pull : 원격 저장소에서 변경된 메타데이터 정보를 확인할 뿐만 아니라 최신 데이터를 복사하여 로컬 Git에 가져온다. fetchmerge 명령어가 합쳐진 것이 pull이다.

git addgit commit의 차이: git commit 명령어가 변경 이력을 남길 사점에는 작업 디렉토리에 있는 변경 내용은 고려하지 않고, 스테이징 영역에 넘어온 변경 내용만 사용되기 때문에 이 두 개의 공간을 서로 햇갈려 한다면 난감한 상황에 빠질 수 있다.
이렇게 작업 디렉토리와 스테이징을 구분하면 변경 이력을 남길 때 작업 디렉토리에 있는 변경 내용을 한 번에 몽땅 기록하지 않고, 조금씩 나누어서 기록할 수 있다는 장점이 있다. 이를 통해, 각 변경 기록(commit)에 논리적으로 하나의 변경 사항을 담기가 용이한데 이렇게 하면 나중에 버그를 추적하거나 변경 이력을 롤백(roll back)할 때도 이점이 있다.


🏁 Git 명령어 정리

$ cd ~


참고자료

profile
9에서 0으로, 백엔드 개발블로그

0개의 댓글