[Git] Git를 사용한 버전 제어 -1, 개요
버전 제어란?
버전 제어 시스템(VCS)은 파일 컬렉션의 변경내용을 추적하는 프로그램(프로그램 세트)입니다.
VCS는 SCM(소프트웨어 구성관리)시스템이라고 부르기도 합니다.
버전 제어는 구성관리와 관련한 방법 중 하나입니다.
VCS의 목표는,
개별 파일 또는 전체 프로젝트의 이전 버전을 쉽게 회수하는 것입니다.
또한, 프로젝트의 작업을 진행 중인 팀원들이 서로의 작업물에 영향을 주지 않고,
동시에 한 프로젝트, 동일한 파일에서도 작업을 할 수 있도록 하는 것입니다.
VCS를 사용하면,
프로젝트의 모든 변경 내용, 변경된 시간 및 변경한 사용자를 확인합니다.
각 변경 내용과 함께 변경 이유를 설명하는 메시지를 포함합니다.
전체 프로젝트 또는 개별 파일의 이전 버전을 검색합니다.
실험적으로 변경할 수 있는 분기를 만듭니다. 이를 통해 기본 분기에 영향을 주지 않고 여러 사람이 동시에 다양항 변경 작업을 수행할 수 있습니다. 나중에 유지할 변경 내용은 기본 분기에 다시 병합할 수 있습니다.
새 릴리스를 표시하기 위해 버전에 태그를 연결할 수 있습니다.
Git을 활용하여 변경내용을 추적하고, 다른 사람과 협업할 수 있습니다.
Git은 빠르고 스케일링 성능이 뛰어난 다목적 무료 오픈소스 버전 제어 도구(VCS)이며 가장 널리 사용되고 있습니다.
분산형 버전 제어
중앙 집중식 서버를 사용한 버전 제어는 한 서버가 잠재적 단일 실패 지점이기도 합니다.
Git은 분산형이므로 프로젝트의 전체 기록이 클라이언트와 서버에 모두 저장됩니다.
네트워크에 연결하지 않고 파일을 편집할 수 있습니다.
로컬로 체크인하고, 서버와 동기화하는 시점을 정할 수 있습니다.
서버가 다운되는 경우에도 프로젝트에 로컬 복사본이 있습니다.
(서버가 없어도 됩니다)
Git 용어
Git에서 자주 사용되는 용어는 아래와 같습니다.
- 작업트리(Working tree)
작업 중인 프로젝트를 포함하는 중첩된 디렉터리 및 파일 세트 - 리포지토리(Repository, repo)
작업트리의 최상위 수준에 있는 디렉터리,
Git은 프로젝트의 모든 기록 및 메타데이터를 리포지토리에 보관함.
repo 라고 줄여 부름,
bare repo는 작업트리에 포함되지 않으며 공유나 백업에 사용함.
(일반적으로 bare repo는 .git으로 끝나는 디렉터리임) - 해시(Hash)
해시함수에서 생성된 숫자로, 파일이나 다른 개체의 콘텐츠를 고정 자릿수로 나타냄.
(Git은 160비트 길이의 해시를 사용함)
해당 콘텐츠를 해시하고 결과를 이전 해시와 비교하여 파일이 변경되었는지 여부를 확인할 수 있음.
(파일해시가 변경되지 않았다면 Git은 파일 내용이 변경되지 않았다고 인식함) - 개체(Object)
Git repo에 각각 SHA-1 해시를 통해 고유하게 식별되는 네 가지 개체 유형이 포함됨.
blob 개체는 일반 파일을 포함함.
tree 개체는 디렉터리를 나타내며, 이름, 해시 및 권한이 포함됨.
commit 개체는 특정 버전의 작업트리를 나타냄.
tag는 commit에 연결된 이름임 - 커밋(Commit)
커밋 개체를 만드는 것을 의미하며, 커밋에서 DB로 이름을 가져옴
(다른 사용자도 볼 수 있도록 변경내용을 커밋하는 것) - 분기(Branch)
연결된 커밋의 명명된 시리즈임.
분기의 가장 최근 커밋을 헤드라고 함.
repo를 초기화할 때 생성되는 기본 분기를 main이라고 하며, 흔히 master라고 함.
현재 분기의 헤드는 HEAD라고 함.
개발자가 분기에서 개별적으로 작업하고 나중에 변경내용을 기본 분기에 병합(merge)할 수 있음. - 원격(Remote)
다른 Git repo에 관한 명명된 참조임.
repo를 만들 때 Git은 push,pull 작업의 기본 원격인 origin이라는 원격을 만듬. - 명령, 하위 명령, 옵션(Commands, subcommands, options)
Git 작업은 git push 및 git pull과 같은 명령을 사용하여 수행됨.
이 때, git은 명령이고, push나 pull은 하위 명령임, 하위 명령은 Git에서 수행하려는 작업을 지정함.
일반적으로 명령은 하이픈(-) 또는 이중 하이픈(--)을 사용하는 옵션과 함께 사용됨
(예시: git reset --hard)
Git 커맨드 라인 Tools
GUI를 통한 Git 사용에 제한이 있을 수 있으며, 이 때 Git Command line을 사용하여 해결할 수 있습니다.
GitHub 데스크톱, Microsoft Visual Studio Code 등의 Git용 인터페이스.
인터페이스는 모두 다르게 작동하며 각기 다른 제한 사항이 있을 수 있습니다.
Git Command line 인터페이스는 사용하는 OS와 관계없이 동일하게 작동합니다.
Git Command line을 사용하여 모든 Git 기능을 사용할 수 있습니다.
Git 구성
먼저, Terminal에서 Git이 설치되어 있는지 확인합니다.
git --version
(설치되어있지 않다면, 설치합니다)
https://ride-dev.tistory.com/52
설치되어 있다면 버전 정보를 확인할 수 있습니다.
git version 2.43.0.windows.1
Git을 구성하고 commit을 수행하기 위해 user.name 및 user.email 전역변수를 정의합니다.
git config --global user.name 이름
git config --global user.email 이메일@email.com
명령어를 사용하여 전역변수가 잘 정의되었는지 확인합니다.
git config --list
user.name=이름
user.email=이메일@email.com
Git 리포지토리 설정
Git은 특정 폴더 내에서 파일의 변경사항을 확인합니다. 작업트리(프로젝트 디렉터리)로 사용할 폴더를 만들고,
변경 내용 추적을 시작할 수 있도록 Git에 폴더를 알립니다.
Git 리포지토리를 해당 폴더로 초기화하여 Git에 변경 사항 추적 시작을 명령합니다.
먼저 프로젝트에 사용할 빈 폴더를 만든 다음, 폴더 내부에서 Git repo를 초기화합니다.
mkdir Cats
cd 명령어를 사용하여 프로젝트 디렉터리로 이동합니다.
cd Cats
리포지토리를 초기화하고, 기본 분기(branch)의 이름을 main으로 설정합니다.
Git 버전에 따라 명령어가 달라질 수 있으니 유의합니다.
Git 2.28.0이상의 경우
git init --initial-branch=main
또는 아래 명령어를 입력합니다.
git init -b main
이전 버전의 경우 아래 명령어를 입력합니다.
git init
git checkout -b main
git status 명령을 사용하여 작업트리의 상태를 확인합니다.
git status
현재 분기(branch)가 main임을 나타내는 출력을 볼 수 있습니다.
On branch main
No commits yet
nothing to commit (create/copy files and use "git add" to track)
Git 에서 도움말 보기
Git으로 수행할 수 있는 작업에 대한 도움말을 볼 수 있는 명령어가 있습니다.
git --help
도움말을 확인할 수 있습니다.
usage: git [-v | --version] [-h | --help] [-C <path>] [-c <name>=<value>]
[--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
[-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
[--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
[--config-env=<name>=<envvar>] <command> [<args>]
These are common Git commands used in various situations:
start a working area (see also: git help tutorial)
clone Clone a repository into a new directory
init Create an empty Git repository or reinitialize an existing one
work on the current change (see also: git help everyday)
add Add file contents to the index
mv Move or rename a file, a directory, or a symlink
restore Restore working tree files
rm Remove files from the working tree and from the index
examine the history and state (see also: git help revisions)
bisect Use binary search to find the commit that introduced a bug
diff Show changes between commits, commit and working tree, etc
grep Print lines matching a pattern
log Show commit logs
show Show various types of objects
status Show the working tree status
grow, mark and tweak your common history
branch List, create, or delete branches
commit Record changes to the repository
merge Join two or more development histories together
rebase Reapply commits on top of another base tip
reset Reset current HEAD to the specified state
switch Switch branches
tag Create, list, delete or verify a tag object signed with GPG
collaborate (see also: git help workflows)
fetch Download objects and refs from another repository
pull Fetch from and integrate with another repository or a local branch
push Update remote refs along with associated objects
'git help -a' and 'git help -g' list available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
See 'git help git' for an overview of the system.
기본 Git 명령
Git은 파일 시스템의 스냅샷을 만드는 것처럼 파일의 변경 내용을 저장하는 방식으로 작동합니다.
리포지토리에 있는 파일의 추적을 시작하는 몇 가지 기본 명령어를 보겠습니다.
git status
일반적으로 사용되는 Git 명령어입니다.
작업 트리(및 스테이징 영역)의 상태를 표시합니다.
현재 Git이 추적하는 변경 내용을 확인할 수 있습니다.
git add
특정 파일의 변경 내용 추적을 시작하도록 Git에 알리는 명령어입니다.
변경 내용을 스테이징한다고 표현하는데, 커밋 준비를 위해 git add를 사용하여 변경 내용을 스테이징 합니다.
추가되었지만 아직 커밋되지 않은 파일의 모든 변경 내용은 스테이징 영역에 저장됩니다.
git commit
일부 변경 내용을 스테이징한 후 git commit을 호출하여 작업을 스냅샷으로 저장할 수 있습니다.
변경 내용을 리포지토리에 새 버전으로 넣는 것을 의미하거나,
커밋한 변경내용에 고유 ID를 지정하는 작은 데이터 청크를 의미하기도 합니다.
커밋에 저장되는 데이터에는 작성자의 이름 및 메일 주소, 날짜, 수행한 작업에 관한 설명 및 이유, 선택적 디지털 서명, 이전 커밋의 고유 식별자가 포함됩니다.
git log
이전 커밋에 대한 정보를 볼 수 있습니다.
각 커밋에는 연결된 메시지(커밋 메시지)가 있으며,
git log 명령은 가장 최근 커밋에 관한 정보를 출력합니다.
git help
모든 명령에 관한 정보를 쉽게 얻을 수 있습니다.
각 명령에는 도움말 페이지가 있습니다.
에컨대, git commit --help는,
git commit --help
git commit의 사용 방법을 자세히 설명하는 페이지가 출력됩니다.