[Git] add, commit 하기

이전에서 만든 프로젝트 디렉토리 안에 파일을 추가해보자.

간단한 파이썬 계산 파일을 만들고 이를 프로젝트 디렉토리 안에 저장한다.

def add(a, b):
	return a+b
    
def sub(a, b):
	return a-b

ls 명령어를 통해 파일을 확인해보면 다음과 같이 파일이 저장된 것을 확인할 수 있다.

이 상태를 TestDir 디렉토리의 첫 번째 버전으로 남겨보자. 이 경우, commit을 사용한다. 

commit을 처음할 때 꼭 해야하는 설정이 있는데, Git에 commit한 사람을 알려주는 것이다. 누가 commit을 했는지를 기록하는 것이다. 그래야 추후에 누가 commit을 했는지 알 수 있기 때문이다. 혼자 진행하는 경우에는 필요하지 않을 수 있지만, 협업을 하는 경우에는 반드시 남겨야 한다. 

 

git config

git config user.name "name"
git config user.email "email@gmail"

위의 코드와 같이 이름과 이메일을 등록해주는 것이다.

이제부터 commit을 하게 되면 그 커밋에는 이름과 이메일이 함께 저장될 것이다.

 

git commit 

커밋은 commit하는 순간에 프로젝트 디렉토리의 모습을 하나로 기록하게 된다. 즉 새로운 버전을 만든다는 것을 의미한다.

이 커맨드 뒤에 커밋에 관한 정보(커밋 메시지)를 추가하여 실행시켜준다. 이때 옵션 '-m'을 사용한다. 결과적으로는 다음과 같다.

git commit -m "commit msg"

이 커맨드를 실행하면 다음과 같은 화면을 볼 수 있다.

마지막 줄을 살펴보면, "커밋을 하기위해 add된 것이 하나도 없고 untrack 상태인 파일이 존재한다"고 나온다. 

untracked는 git에 의해 아직 추적되지 않고 있다는 것인데, 아직 git으로 무엇을 해주지 않았기 때문에 버전 관리 대상이 아닐 경우 나타나는 상황이다. 

커밋을 하기 전에는 커밋할 파일을 미리 지정해주어야 한다. 수정된 파일의 모습이 커밋에 포함될 것이라고 지정하는 것이다. 
이러한 사전 작업을 add 라고 한다. 

그럼 add를 하고 다시 commit을 수행해보자.

 

git add

git add 커맨드 뒤에 수정된 모습을 커밋에 반영하고 싶은 파일의 이름을 적어주면 된다. 

git add filename.py

이 작업을 수행하고 다시 commit을 수행하면 결과는 다음과 같다. 

이 출력 결과는 commit이 정상적으로 되었다는 것이고, 그 결과를 보여주는 것이다. 

위의 root-commit 은 이 커밋이 프로젝트의 첫 커밋이라는 것을 의미한다. 그 옆에는 작성한 커밋 메시지가 나타난다. 아래에 1개의 파일이 추가된 것(changed)을 확인할 수 있고, "5 insertions(+)"는 calculate.py에 5줄이 추가되었다는 것을 의미한다.

 

git add .

위의 경우는 모든 파일을 담게 된다. 

 

★add와 commit 한꺼번에 하기

git commit -am "msg"

위와 같이 -am 옵션을 부여하면 commit 전에 add하지 않아도 담을 수 있다. 하지만, 새로 추가된(untracked) 파일이 없을 때만 사용할 수 있다.


Git의 작업 영역

add 와 관련하여 꼭 알아야할 사항이 있다. 

Git은 내부적으로 크게 3가지 종류의 작업 영역을 두고 동작한다. 

  1. working directory
  2. staging area
  3. repository

첫 번째 작업 영역인 working directory작업을 하는 프로젝트 디렉토리를 말한다. 여기서는 TestDir 디렉토리가 될 것이다. 

두 번째 작업 영역인 staging areagit add를 한 파일들이 존재하는 영역이다. 커밋을 하게되면 staging area에 있는 파일들만 커밋에 반영된다. 

세 번째 작업 영역인 repository는 working directory의 변경 이력들이 저장되어 있는 영역이다. 즉, 커밋들이 저장되는 영역인 것이다.

 

정리를 해보면,

  • working directory에서 뭔가 작업을 하고
  • 작업한 파일들을 git add 해주고
  • 커밋을 하면 staging area에 있던 파일들의 모습이 사진처럼 이 repository에 저장되는 것이다. 

중요한 점은 만약 2개의 파일을 수정하고 add를 하나의 파일만 한다면 commit을 했을 경우, add를 수행한 파일만 커밋에 반영된다는 것이고 이는 즉, staging area에 올렸는지 여부에 따라 그 최신 모습이 커밋에 반영되는지가 달라진다는 것이다. 


commit 주의사항

commit에 대해 정리해보면, 

  1. 처음으로 커밋을 하기 전 사용자의 이름과 이메일 주소를 설정
  2. 커밋 메시지 남기기(git commit -m)
  3. 커밋을 하기 전에는 어떤 파일을 커밋에 반영할 지 지정해주기(git add)