Git

작업 공간

테오구 2022. 5. 18. 13:57
728x90

Git에는 크게 4가지 작업 공간이 있습니다.

Workspace

개발자가 작업하는 일반적인 공간입니다.

git add 명령러 이전에는 변경 사항들은 workspace에 기록됩니다.

index

변경된 모든 파일 및 폴더들을 추적하는 공간입니다. staging Area라고도 이야기 합니다.

git add 명령어로 workspace 공간에  작업물들을 이 공간으로 보낼 수 있습니다.

우리가 관심 있고 최종적으로 커밋하고자 하는 작업물들을 이 공간으로 두면 됩니다.

한 번 index에 올라갔던 파일들은 git에서 계속해서 추적합니다.

local repository

- 최종적으로 커밋된 작업물들이 놓이게 되는 공간입니다.

- git commit 명령어로 index에 있는 파일들을 이 공간으로 보낼 수 있습니다.

- 최종적으로 우리가 작업한 내용이 이 공간에 기록됩니다.

remote repository

- 일명 Git 호스팅 공간으로 인터넷으로 연결된 별도의 공간입니다. 최종 작업물들을 여기에 저장하고 다른 사람들과 공유합니다.

- 여러 사람이 같이 협업할 때 이 공간을 사용합니다.

- git push 명령어로 local repository 공간에 있는 작업물들을 이 공간으로 보낼 수 있습니다.

- git fetch나 git pull 명령어로 이 공간에 있는 작업물들을 local repository로 가져 올 수 있습니다.

- 이 공간에 있는 작업물들을 보통 협업에서 가장 최신 버전의 작업물이라고 간주합니다.

- GitHub,  BitBucket, GitLab 등이 이 공간을 구현한 Git 호스팅 서비스입니다.

# 예시를 위한 간단한 git 작업 공간을 만듭니다.
$ mkdir git_example
$ cd git_example
$ git init

간단한 파일을 두 개 만들어봅시다.

# 새로 생긴 파일은 workspace 공간에 놓입니다.
$ touch a
$ touch b

위 파일들은 아직 git add 하지 않았으므로 workspace공간에 놓이게 됩니다.

workspace 공간에 있는 작업물은 git status에서 확인할 수 있습니다.

# workspace 공간에 놓인 파일들은 `추적하지 않는 파일` 목록에 들어갑니다.
$ git status

현재 브랜치 main

아직 커밋이 없습니다

추적하지 않는 파일:
  (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
	a
	b

커밋할 사항을 추가하지 않았지만 추적하지 않는 파일이 있습니다 (추적하려면 "git add"를 사용하십시오)

a의 파일의 내용과 히스토리등을 추적하고 싶다고 합시다. git add를 통해 이 파일을 index공간에 둡니다.

 

# git add 명령어로 workspace 공간에 있는 작업물을 index 공간으로 옮깁니다.
$ git add a

git status입력

# index 공간에 놓인 파일들은 `커밋할 변경 사항` 목록에 들어갑니다.
$ git status

현재 브랜치 main

아직 커밋이 없습니다

커밋할 변경 사항:
  (스테이지 해제하려면 "git rm --cached <파일>..."을 사용하십시오)
	새 파일:       a

추적하지 않는 파일:
  (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
	b

git commit -m 명령어로 index 공간에 있는 작업물을 local repository 공간으로 보낼 수 있습니다.

# git commit 명령어로 index 공간에 있는 작업물을 local repository 공간으로 보냅니다.
$ git commit -m "a 파일을 추가한다"

[main (최상위-커밋) b014111] a 파일을 추가한다
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a

내용을 수정하고 git add, git commit을 해줍시다.

# 아무 내용이 없는 a 파일에 내용을 추가해줍니다.
$ echo "this is a" > a
$ cat a

this is a

a 파일은 이전에 git add 로 git이 추적 중인 파일입니다. 따라서 이런 a 파일의 변경 사항을 git status 에서 확인할 수 있습니다.

# "커밋하도록 정하지 않은 변경 사항"를 통해 a파일이 수정되었음을 알 수 있습니다.
$ git status

현재 브랜치 main
커밋하도록 정하지 않은 변경 사항:
  (무엇을 커밋할지 바꾸려면 "git add <파일>..."을 사용하십시오)
  (use "git restore <file>..." to discard changes in working directory)
	수정함:        a

추적하지 않는 파일:
  (커밋할 사항에 포함하려면 "git add <파일>..."을 사용하십시오)
	b

커밋할 변경 사항을 추가하지 않았습니다 ("git add" 및/또는 "git commit -a"를
사용하십시오)

이제 다시 git add 하여 index 공간으로 올리고 git commit 으로 커밋합니다.

$ git add a
$ git commit -m "a 파일을 수정한다"

local repository에 기록된 커밋 로그들은 다음처럼 git log 로 확인할 수 있습니다.

$ git log

commit c008c4785eeb14a395b4aa6cf9fa3b9e5896f5a4 (HEAD -> main)
Author: grab <grab@gmail.com>
Date:   Tue Aug 17 21:21:45 2021 +0900

    a 파일을 수정한다

commit b014111c82fa239b771b2b6d6bdc567282e7b325
Author: grab <grab@gmail.com>
Date:   Tue Aug 17 20:34:32 2021 +0900

    a 파일을 추가한다

local repository에 있는 이 작업 내역들을 remote repository에 올려봅시다.

깃헙페이지에 들어가서 저장소를 만들어줍니다.

$ git remote add origin 깃 저장소 url
$ git branch -M main
$ git push -u origin main

작업 공간 정리

위에서 실습해본 Git 명령어와 작업 공간의 흐름을 정리하면 다음과 같습니다.

 
git add : workspace -> index
git commit : index -> local repository
git push : local repository -> remote repository
git pull, fetch : origin repoistory -> remote repository
728x90