깃 리포지토리는 깃 저장소(워크스페이스)라고 할 수 있다. 깃에게 어느 디렉토리에 저장소를 만들어야하는지 수동으로(Manually) 지시해야 한다. 즉 깃에게 한 프로젝트를 수행할 새로운 저장소를 생성하라고 지시해야 한다. 깃 리포지토리는 그 프로젝트의 이력을 갖고 있는 깃 작업 공간이다. 각각의 리포지토리는 독립적이며 각자 자신만의 이력을 가지고 있다.
만약에 깃을 사용하고 싶고 여러가지 프로젝트 폴더가 있다고 하면, 그 각각의 프로젝트 폴더에 가서 깃 저장소를 생성해야 하고 깃에게 이것을 알려줘야한다.
git init 새 저장소를 초기화 한다. 우리가 있는 디렉토리가 무엇이든 새 저장소의 홈이 된다. 프로젝트당 한번만 실행된다.
git init을 하게 되면 어떤 일이 일어날까?
->git init을 하면 .git이라는 디렉토리를 만든다. . 으로 시작하는 폴더는 숨겨진 폴더이다.
만약에 상위 폴더에 git repository를 초기화 했다면, 그 아래 하위 폴더의 모든 것도 git에서 추적된다.
1. 어떤 프로젝트를 위해 하위 디렉토리에서 변경하는 파일이나 폴더도 깃에 의해 추적된다.
2. 별개의 저장소를 하위에 만들고 싶어도 그 안에 리포지토리를 다시 초기화 하지 않는다. (DO NOT INIT A REPO INSIDE OF A REPO!!) 만약에 저장소를 다시 만들고 싶다면 .git을 지우고 다시 만들어야 한다.
따라서 초기화하기 전에는 git status 를 실행하자.
git status 를 하게 되면 결과값으로 변경사항이 나오게 된다.
어떤 프로젝트를 할 때, 체크포인트들을 만들게 되는데, 각각의 체크포인트들은 깃에서 커밋이라고 불린다. 하나의 깃 리포지토리에는 엄청나게 많은 커밋들이 있다. 커밋은 파일을 저장하는 것 이상으로 어떤 것을 구축하는 것이다. 커밋하기 전에 먼저 수정해서 파일에 저장을 하고 커밋을 해야한다. 수정되어 저장된 폴더 파일이 묶여서 하나의 커밋으로 된다. 즉 따라서 파일 하나하나를 수정하여 저장한 뒤 묶어서(프로젝트) 변화를 기록한 것이 커밋이라고 할 수 있다.
Commit을 하는 과정은 다음과 같다.
Work on Stuff-> Add Changes(우리가 커밋에 포함시키고 싶은 특정 변경사항을 호출하는 중간 단계) -> Commit
예를 들어 어떤 프로젝트에서 하루 종일 또는 오전 내내 작업했다고 하자. 만약에 7개의 파일을 변경했다고 하자. 이때 파일 변경한 것을 그룹화해서 각각 독립적으로 커밋할 수 있다. 따라서 파일 하나하나를 모두 커밋할 필요가 없이, change들을 핀셋으로 뽑듯이 커밋에 포함하고 싶은 특정 변경사항을 몇 가지 선택하여 그룹화 하여, Commit을 할 수 있다.
커밋하기 위해 변경사항들을 스테이지(Staging Area)에 올리는 명령어이다.
(Git add를 하기 전에 work on stuff 즉 파일을 만들거나 변경하거나 하는 작업을 했을 때, git status 를 실행한 경우 Untracked files: characters.txt outline.txt라고 나온다.)
git add file1 file2와 같은 방식으로 git add를 실행한다.
이렇게 되면 file1과 file2가 stage area로 올라가서 commit을 할 때 이 두 파일이 포함될 것이다.
한번에 모든 파일을 stage에 올릴라면 git add .이라는 명령어를 사용한다.
커밋할 때마다, 깃은 변경사항을 요약하거나 묘사하는 메시지가 스냅샷에 포함될 것을 기대한다. (ex Add branded navbar, Add team members to about page)
git commit
git commit -m "my message" (beginner에게 추천하는 방식)
git commit 도 입력을 하면 메시지를 입력하라고 창이 뜬다.
이제 만약 commit 한 파일을 수정하게 되면, git에 의해서 tracked 되어서 파일이 modified 되었다고 뜬다.
git log은 git commit을 실행했을 때 벌어지는 일들을 보여주는 것이다.