LainyZine: 프로그래머 가이드 🐣

git init 사용법: Git 저장소를 생성(초기화)하는 방법

Git은 소스 코드의 버전 관리를 도와주는 도구입니다. 일반적으로 프로젝트 단위로 Git 저장소를 만들어 사용하며, 소스 코드 파일을 Git으로 관리하기 위해서는 먼저 Git 저장소를 초기화해야합니다. 이 때 저장소를 초기화하기 위해 사용하는 명령어가 git init입니다.

반면에 GitHub 상의 오픈소스를 개발하거나, 이미 만들어져 있는 프로젝트 개발에 참여할 때는 git clone으로 원격 저장소를 로컬에 복제해와서 사용합니다.

직접 프로젝트를 만들어 본 경험이 없다면 git init보다 git clone이 더 익숙할 수도 있습니다. 이 글에서는 git init 명령어로 Git 저장소를 초기화하고 첫 커밋을 해보고, GitHub 저장소에 Push하는 방법을 소개합니다.

git init 명령어로 저장소 초기화하기

프로젝트를 시작하고 소스 코드를 Git으로 관리하고자 한다면 먼저 git init으로 저장소를 초기화해야합니다. 기본적인 사용법은 간단합니다. 저장소로 사용하고자 하는 디렉터리로 이동한 다음 git init을 인자없이 실행하면 됩니다.

git init

중요한 것은 먼저 저장소로 사용할 디렉터리로 이동해야한다는 점입니다. 이 때 디렉터리에 파일의 존재 유무는 중요하지 않습니다. Git 저장소를 초기화하더라도 디렉터리에 있는 내용을 자동으로 Git 저장소에 추가하지는 않기 때문에 빈 저장소로 초기화되는 것은 같습니다.

여기서는 /tmp 아래에 빈 디렉터리를 하나 만들고, git status 명령어로 Git 저장소 디렉터리가 아닌 것을 확인해보겠습니다.

$ mkdir -p tmp/git-init
$ cd /tmp/git-init
$ git status
fatal: not a git repository (or any of the parent directories): .git

아직 git init을 실행하지 않았기 때문에, Git 저장소가 아니라는 에러 메시지가 출력됩니다. 이 메시지에서 중요한 힌트를 얻을 수 있는데, Git 저장소는 .git 디렉터리로 관리됩니다.

먼저 디렉터리가 비어있는 것을 확인하기 위해 ls로 파일 목록을 출력해버봅니다.

$ ls -al
total 0
drwxr-xr-x   3 lainyzine  staff   96  5 15 15:14 .
drwxr-xr-x  24 lainyzine  staff  768  5 15 15:13 ..

아무 파일도 없습니다. 이 상태에서 git init을 실행합니다.

$ git init
Initialized empty Git repository in /tmp/git-init/.git/

이 메시지를 자세히 살펴보면, 현재 디렉터리 아래에 .git 디렉터리를 만들고 여기에 Git 저장소를 초기화한다는 것을 알 수 있습니다.

첫 커밋 이전의 Git 저장소 상태 확인하기

저장소가 초기화되면 어떤 변화가 있을까요? 먼저 한 번 더 ls를 실행해보겠습니다.

$ ls -al
total 0
drwxr-xr-x   3 lainyzine  staff   96  5 15 15:16 .
drwxr-xr-x  24 lainyzine  staff  768  5 15 15:13 ..
drwxr-xr-x  10 lainyzine  staff  320  5 15 15:16 .git

.git 디렉터리가 생성된 것을 알 수 있습니다. 바로 여기서 Git 저장소가 관리됩니다.

이번에는 Git 저장소의 상태를 확인하는 git status와 커밋 로그를 보여주는 git log를 실행해보겠습니다.

$ git status
On branch master
No commits yet
nothing to commit (create/copy files and use "git add" to track)

$ git log
fatal: your current branch 'master' does not have any commits yet

Git 저장소가 초기화 되었기 때문에 저장소 정보가 출력됩니다만, 메시지를 요약해보면 아직 저장소에 커밋이 없다는 의미입니다.

첫 커밋하기: git add, git status, git commit

git init으로 저장소를 초기화했습니다만, 보통 첫 커밋까지를 저장소 초기화 작업이라고 이야기하곤 합니다. 이는 Git에서 첫 커밋은 루트 커밋으로 특별하게 취급되기 때문입니다. 최초 커밋은 rebase하는 방법도 다르고, git add로 추가한 내용을 되돌리는 방법도 다릅니다.

그래서 저장소를 처음 초기화하면, Git 저장소에서 필수적으로 사용하는 .gitignore 빈 파일을 만들고 첫 커밋을 만들어주는 경우가 일반적입니다. .gitignore는 Git 저장소에서 관리하지 않을 파일들을 나열해놓는 특수한 용도로 사용되는 설정 파일입니다. 여기서도 빈 .gitignore 파일을 만들고 바로 커밋해보겠습니다.

단, Git 커밋 작업이 처음이라면 먼저 다음 문서를 참고해서 Git 사용자의 정보를 설정하는 것을 추천합니다. 지정하지 않으면 커밋의 Author 정보로 시스템 정보가 대신 기록 됩니다.

$ touch .gitignore
$ git add .gitignore
$ git commit -m'Initialize Git repository'
[master (root-commit) 1e5de50] Initialize Git repository
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 .gitignore

메시지를 자세히 보면 root-commit이 생성된 것을 확인할 수 있습니다. 다시 git statusgit log로 저장소 상태를 확인해봅니다.

$ git status
On branch master
nothing to commit, working tree clean

$ git log
commit 1e5de5049ed0c942c9fa3d1f5ff8bd83361060c0 (HEAD -> master)
Author: Lainyzine <lainyzine.com@gmail.com>
Date:   Sat May 15 15:44:02 2021 +0900

    Initialize Git repository

첫 커밋을 추가하니 더 이상 저장소에 커밋이 없다는 메시지가 나타나지 않습니다. 여기까지 저장소 초기화가 끝났습니다.

원격 GitHub 저장소에 Push하기

온전히 로컬에서만 작업하는 경우, 앞에서 소개한대로 Git 저장소를 초기화하고 사용해도 무방합니다. 하지만 협업을 하거나 개인 프로젝트라도 소스 코드를 안전하게 관리하기 위해 원격 저장소를 함께 사용하는 게 일반적입니다.

로컬에서 초기화한 저장소를 GitHub에 올리려면, 먼저 Github에서 저장소를 만들어야합니다. GitHub 계정이 없다면 새로 하나 만들어줍니다.

GitHub에 로그인하고, 오른쪽 위의 + 버튼을 클릭하고, New repository를 클릭해줍니다.

GitHub에서 먼저 저장소를 생성합니다

저장소 생성 폼이 나타나면, 먼저 저장소 이름을 입력해줍니다. Public, Private 여부는 프로젝트 성격에 따라 선택해줍니다.

저장소 이름과 공개 여부를 선택합니다

스크롤을 내리면 저장소 초기화하면서 README나 .gitignore 파일을 초기화해주는 옵션이 있습니다. 로컬에서 초기화한 내용을 올리고 싶은 경우 전부 체크를 해제합니다(기본값입니다). Create repository 버튼을 클릭합니다.

GitHub에서 초기화해주는 옵션은 모두 체크 해제합니다

저장소가 생성되면 안내 페이지가 나타납니다. 안내 페이지에서는 저장소를 새로 초기화하고 Push하는 방법, 초기화가 되어있는 저장소를 Push하는 방법, 다른 버전 관리 도구의 저장소를 임포트 하는 방법을 소개하고 있습니다.

이 예제에서는 두 번째 방법, 즉 초기화가 되어있는 저장소를 Push하는 방법을 따라서 진행합니다.

저장소에 Push하는 방법에 대한 안내가 나타납니다

아래 명령어를 차례대로 실행해주면 됩니다. GitHub에서는 2021년 5월 현재 기본 브랜치를 main으로 사용하고 있어서 브랜치를 main으로 변경하는 과정도 포함되어있습니다. 아래 내용을 따라서 명령어를 차례로 실행합니다.

SSH 프로토콜로 Git에 Push할 때 인증 문제가 발생한다면, 아래 문서를 참고해서 GitHub 접속용 키를 먼저 등록해야합니다.

$ git remote add origin git@github.com:lainyzine/git-init.git
$ git branch -M main
$ git push -u origin main
Enumerating objects: 3, done.
Counting objects: 100% (3/3), done.
Writing objects: 100% (3/3), 233 bytes | 233.00 KiB/s, done.
Total 3 (delta 0), reused 0 (delta 0), pack-reused 0
To github-lainyzine:lainyzine/git-init.git
 * [new branch]      main -> main
Branch 'main' set up to track remote branch 'main' from 'origin'.

다시 GitHub에서 저장소를 확인해보면, 앞에서 저장소를 초기화하고 커밋한 내용이 GitHub 저장소에 추가된 것을 확인할 수 있습니다.

로컬에서 커밋한 내용을 GitHub에서도 확인할 수 있습니다

Git 저장소를 삭제하는 방법

로컬에서 Git 저장소를 삭제하고자 한다면 .git 디렉터리를 삭제하면 됩니다.

$ rm -rf .git
$ git status
fatal: not a git repository (or any of the parent directories): .git

더 이상 Git 저장소가 아니므로 git status 명령어를 실행하면 Git 저장소가 아니라는 에러가 발생합니다.

로컬 프로젝트 디렉터리에서 .git을 삭제하는 경우 복구할 수 있는 방법이 없습니다. 따라서 앞에서 소개한대로 GitHub나 다른 원격지의 저장소를 함께 사용하고, 자주 Push하는 것을 추천합니다.

추천 문서

LainyZine은 쿠팡 파트너스 활동에 따른 수수료를 제공받습니다.