Git Step-1 : Git 시작하기
1. Git 소개
-
Linux 창시자 Linus Torvalds가 BitKeeper를 사용하면서 배운 교훈으로 만든 DVCS (Distributed Version Control System) 분산 버전 관리 시스템입니다.
-
Git이 추구하는 것은 빠른 속도, 단순한 구조, 비선형 개발을 위한 강력한 지원(수천 개의 동시 다발적인 브랜치), 완벽한 분산으로 대형 프로젝트에서도 유용하게 사용할 수 있도록 하는 것입니다.
-
DVCS는 Git 이외에도 mercurial, darcs 등이 있습니다.
-
중앙집중식 버전관리 (CVCS : Version Control System, CVS, Subversion, Perforce 등)의 단점들을 보완 하였습니다.
-
Centralized Version Control 구조가 아닌 분산환경이므로 서버의 문제가 발생하여도 작업을 이어갈 수 있으며 로컬 Repository를 이용하여 서버를 복원할 수 있습니다. Git 서버로는 주로 Github나 Bitbucket을 사용합니다.
-
오프라인에서 작업이 가능하고 거의 모든 작업이 로컬에서 이루어집니다. 만약 네트워크 연결이 불가능한 곳에서 프로젝트를 개발해야 되는 상황이라면 기존 CVCS는 버전관리가 불가능하지만 Git은 로컬 Repository에 버전관리가 가능합니다.
-
변경사항을 파일 기반의 목록으로 저장하는 delta-based version control 방식이 아닌 스냅샷 방식을 사용합니다. delta-based version control은 파일의 변경된 상태를 계산해야되는 시간이 필요하고 이러한 과정에서 문제가 발생하기도 합니다. Git은 프로젝트의 모든 스냅샷을 가지고 있기 때문에 자유자재로 빠르게 오류 없이 적용이 가능합니다. 또한 각각의 스냅샷은 변경되지 않은 파일들에 대해서 링크 정보만 가지고 있기 때문에 무겁지 않습니다.
-
-
Git의 모든 것은 저장되기 전에 체크섬(tracked)이 되고 그 체크섬에 의해 참조됩니다. 체크섬은 SHA-1 해시 메커니즘을 사용하고 컨텐츠의 해시값(40자 길이의 16진수 문자열)으로 Repository에 저장됩니다.
24b9da6552252987aa493b52f8696cd6d3b00373 형태
-
기존 VCS와 마찬가지로 커밋 전에 변경사항을 손실시킬 순 있지만 Git Repository에 스냅샷을 커밋한 후에 특히 주기적으로 원격 Repository에 Push하는 경우에는 파일이 손실될 가능성이 거의 없습니다.
-
Git의 3가지 주요 섹션(또는 States).
-
Working Directory
git이 파일의 정보를 알고 있는 상태(tracked) 파일과 알지 못하는 상태(untracked)의 파일이 존재합니다.
untracked 파일: 신규로 만들어진 파일이거나 다른 프로젝트에서 옮겨온 파일.
tracked 파일: commit된 상태의 unmodified 상태와 modified된 상태의 파일.
-
Staging Area
다음 커밋 스냅샷으로 이동하기 위해 현재 버전에서 tracked된 파일 중 수정된 파일을 표시한 상태.(git add 한 상태)
-
Repository
변경된 데이터가 로컬 Repository에 저장된 상태. (git commit한 상태)
-
-
Checkout 명령어로 Repository에서 Working Directory로 파일을 꺼내올 수 있고, Working Directory에서 add명령어로 Staging Area(Index라고도 부름)로 파일을 옮기면 다음 커밋에 들어갈 내용에 대한 정보를 저장합니다. Git Directory(.git 폴더)는 프로젝트의 메타 데이터와 개체 데이터베이스를 저장하는 Git저장소이고 가장 중요한 부분입니다. 다른 컴퓨터에서 Repository를 clone을 하면 Git Directory는 복사됩니다.
-
기본 Git 워크플로우는 Working tree의 파일을 수정하고, 다음 커밋에 포함할 내용만 선택적으로 스테이징할 수 있으며, 이 변경 내용만 스테이징 영역에 추가되며 커밋을 수행하면 스테이징 영역에 있는 파일을 가져와서 스냅샷으로 만들고 Git Directory에 영구적으로 저장합니다. 파일의 특정 버전이 Git Directory에 있는 경우 커밋된 것으로 간주하며 체크아웃 후 변경되었거나 스테이징되지 않는 경우 수정됩니다.
2. Git 설치
-
Git 공식 홈페이지에서 OS에 맞는 버전으로 설치해서 사용합니다.
-
Git 설치를 완료하면 3가지 Tool(CMD, Bash ,GUI)을 사용할 수 있습니다.
-
Git CMD: Window 명령 프롬프트와 동일한 터미널.
-
Git Bash: Unix 계열에서 사용되는 Shell.
-
Git GUI: 사용자 인터페이스 Git 프로그램.
-
-
기본적으로 설치되는 Git Tool 외에도 Git 공식 홈페이지에서 안내하는 GUI Clients나 다른 터미널 등을 이용할 수 있습니다.
https://git-scm.com/downloads/guis
3. Git 설정
-
Git을 설치하고 나면 Git의 사용 환경을 적절하게 설정해 주어야 하며 git config라는 도구로 설정 내용을 확인하고 변경할 수 있습니다. git config가 사용하는 파일은 3가지이고 각 설정은 역순으로 우선시 됩니다. (.git/config 파일이 1순위)
-
/etc/gitconfig 파일: 시스템의 모든 사용자와 모든 저장소에 적용되는 설정이고 시스템 관리자 권한이 필요합니다.
-
~/.gitconfig, ~/.config/git/config 파일: 특정 사용자(현재 사용자)에게만 적용되는 설정이고 git config --global 옵션으로 이 파일을 읽고 쓸 수 있습니다.
-
.git/config 파일: Git 디렉토리에 있고 특정 저장소(현재 작업 중인 프로젝트)에만 적용 됩니다.
-
-
사용자 이름과 이메일 주소를 설정
$git config --global user.name "tester" $git config --global user.email "tester@test.com"
(참고: –global 옵션은 시스템에서 사용자의 모든 프로젝트에 적용되므로 한번만 설정하면 됩니다. 만약 프로젝트마다 다른 이름과 이메일을 사용하고 싶으면 –global 옵션을 빼고 실행합니다.)
-
Editor 설정
git을 install 할때 Editor를 설정하지만 추후에 변경을 하고 싶다면 아래와 같이 설정하면 됩니다.
$git config --global core.editor "'Editor설치경로/Editor실행파일'" --multilnst --nosession
-
Git 설정 확인
git config –list 명령을 실행하면 설정된 모든 정보를 확인할 수 있습니다.
$git config --list user.name=tester user.email=tester@test.com ...
Git은 같은 키를 여러개 파일(위에서 언급한 3가지 설정파일)에서 읽기 때문에 동일 키에 다른 값들이 설정되어 있을 수 있습니다. 그러면 Git은 마지막에 설정된 값을 사용합니다.
git config key 명령으로 Git이 사용중인 값을 확인할 수 있다.
$git config user.name tester
사용중인 key값이 어떤 파일을 참조하고 있는지 확인하려면 다음 명령어를 실행하면 됩니다.
$git config --show-origin user.name file:C:/Users/tester/.gitconfig tester
-
Git 도움말 보기
$git help usage: git [--version] [--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>] <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
$git -h unknown option: -h usage: git [--version] [--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>] <command> [<args>]
$git commit -h usage: git commit [<options>] [--] <pathspec>... -q, --quiet suppress summary after successful commit -v, --verbose show diff in commit message template Commit message options -F, --file <file> read message from file --author <author> override author for commit --date <date> override date for commit -m, --message <message>
만약 commit 명령어에 대한 상세 도움말이 필요하면 git help commit 명령어를 실행합니다.
$git help commit
그러면 html로 된 commit 도움말 browser에 열리게 됩니다.
이 도움말은 로컬에 저장되어 있기 때문에 오프라인 상태에서도 확인이 가능합니다.
댓글남기기