git init 명령어로 Git 저장소 생성하기
git init
는 새로운 Git 저장소(repository)를 생성할 때 사용하는 Git 명령어 입니다.
Git 사용할 때 보통 다른 사람이 이미 생성해 놓은 Git 원격 저장소를 git clone
명령어를 통해 내려받는 경우가 많고, 직접 Git 저장소를 생성하더라도 프로젝트 초기에 딱 한 번만 사용하기 때문에 생소하게 느껴질 수도 있는 명령어입니다.
하지만 저처럼 모든 개인 프로젝트를 항상 Git으로 버전 관리를 하는 분들에게는 의외로 자주 사용하게 되는 명령어 입니다.
실습 디렉토리 준비
일단 Git으로 버전 관리를 하고 싶은 디렉토리로 이동합니다. 저는 실습을 위해서 새로운 디렉토리를 생성하고, 그 안에 파일 몇개를 생성하였습니다.
$ mkdir our-project
$ cd our-project
$ touch a.js b.js c.js .env
$ ls -al
total 0
drwxr-xr-x 6 dale staff 192 26 Sep 14:04 .
drwxr-xr-x 52 dale staff 1664 26 Sep 14:03 ..
-rw-r--r-- 1 dale staff 0 26 Sep 14:04 .env
-rw-r--r-- 1 dale staff 0 26 Sep 14:04 a.js
-rw-r--r-- 1 dale staff 0 26 Sep 14:04 b.js
-rw-r--r-- 1 dale staff 0 26 Sep 14:04 c.js
이 상태에서 git status
명령어를 쳐보면, 이 곳은 Git 저장소가 아니라는 에러가 뜹니다.
➜ our-project git status
fatal: not a git repository (or any of the parent directories): .git
Git 저장소 생성
여기서 git init
명령어를 실행하면, 현재 디렉토리를 기준으로 Git 저장소가 생성됩니다.
$ git init
Initialized empty Git repository in /Users/dale/temp/our-project/.git/
Git 저장소가 되었다는 가장 큰 증거는 디렉토리 내부에 .git
디렉토리가 생긴다는 것입니다.
$ ls -d .git
.git
이 디렉토리에는 Git이 버전 관리를 하기 위한 메타 정보가 담겨있으며, 구체적으로 어떤 내용인지는 Git을 사용할 때 크게 중요하지 않습니다. 정말 중요한 것은 이 디렉토리를 지우는 순간, 해당 Git 저장소의 모든 변경 이력은 소실되고 일반 디렉토리로 돌아온다는 것입니다.
이 상태에서 다시 git status
명령어를 쳐보면, 아직까지 커밋(commit) 이력이 없다고 나옵니다. 그리고 디렉토리에 있는 모든 파일이 아직 Git으로 버전 관리가 되지 않고 있다고 나열됩니다.
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.env
a.js
b.js
c.js
nothing added to commit but untracked files present (use "git add" to track)
.gitignore 생성
Git 저장소를 생성할 때 간과하기 쉬운 부분이 .gitignore
파일을 생성해놓는 것입니다.
.gitignore
파일은 Git으로 버전 관리를 하면 안 되거나, 할 필요가 없는 경로를 정의하는데 쓰입니다.
예를 들어, 디렉토리 내의 특정 파일이 DB 비밀번호나 API 비밀키처럼 민감한 정보를 담고 있는데, 이 파일이 Git 저장소에 올라가 Github와 같은 서비스를 통해 외부에 공개가 된다면 보안 사고가 나겠지요. 😰
또한, 동영상처럼 용량이 크고 사람 눈으로 해독하기 불가능한 파일들은 Git 저장소에 올리면 저장소를 복제하는 시간만 오래 걸리게 할 것입니다.
그래서 프로젝트 초기에 이러한 파일들의 경로를 .gitignore
파일에 등록해놓는 것이 매우 중요합니다.
대표적인 예로, .env
파일은 많은 자바스크립트 프로젝트에서 개발자들이 로컬 컴퓨터에 임의의 환경 변수를 설정하기 위한 용도로 사용합니다.
따라서 이 파일은 .gitignore
파일에 등록을 해야 보안적으로 안전하고 개발자 간에 불필요한 코드 충돌을 피할 수 있습니다.
본 실습에서는 .gitignore
파일을 생성하고, 위에서 디렉토리를 생성할 때 함께 생성해놓은 .env
파일을 등록하겠습니다.
$ echo .env > .gitignore
$ cat .gitignore
.env
이제 다시 git status
명령어를 쳐보면 .env
파일이 무시되고, .gitignore
파일이 Git으로 버전 관리할 파일로 잡히는 것을 볼 수 있습니다.
$ git status
On branch master
No commits yet
Untracked files:
(use "git add <file>..." to include in what will be committed)
.gitignore
a.js
b.js
c.js
nothing added to commit but untracked files present (use "git add" to track)
최초 커밋 남기기
자, 이제 안전하게 생성한 Git 저장소의 첫번째 커밋을 남길 수 있습니다.
먼저, git add
명령어로 디렉토리 내의 모든 파일이 Git으로 관리되도록 추가해줍니다. (.env
파일은 위에서 .gitignore
파일에 등록했으므로 당연히 제외가 되겠지요?)
$ git add -A
$ git status
On branch master
No commits yet
Changes to be committed:
(use "git rm --cached <file>..." to unstage)
new file: .gitignore
new file: a.js
new file: b.js
new file: c.js
다음, git commit
명령어로 커밋을 생성하면서 메시지를 남깁니다.
$ git commit -m "init commit"
[master (root-commit) a48c527] init commit
4 files changed, 1 insertion(+)
create mode 100644 .gitignore
create mode 100644 a.js
create mode 100644 b.js
create mode 100644 c.js
$ git status
On branch master
nothing to commit, working tree clean
원격 저장소에 올리기
생성한 Git 저장소를 혼자서 로컬에서만 사용하실 분은 여기까지가 끝입니다. 하지만, 많은 경우 Github와 같은 서비스에 원격 저장소를 만들어 놓고 다른 개발자들과 협업을 하는 경우가 많을 것입니다.
먼저, Github에 원격 저장소를 하나 생성하고, git remote
명령어를 이용해서 로컬 저장소에 연결합니다.
$ git remote add origin https://github.com/<본인 계정>/our-project
마지막으로, git push
명령어를 사용해서 원격 저정소에 모든 파일을 업로드합니다.
$ git push -u origin master
Enumerating objects: 4, done.
Counting objects: 100% (4/4), done.
Delta compression using up to 12 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (4/4), 264 bytes | 264.00 KiB/s, done.
Total 4 (delta 0), reused 0 (delta 0)
To https://github.com/<본인 계정>/our-project
* [new branch] master -> master
Branch 'master' set up to track remote branch 'master' from 'origin'.
마치면서
이상으로 git init
명령어를 사용해서 간단한 Git 저장소의 생성해보고 추가적으로 챙겨야할 부분에 대해서 알아보았습니다.