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
'Git' 카테고리의 다른 글
[stash] 변경 사항을 커밋하기 보단 임시저장하고 싶어요 (0) | 2022.05.21 |
---|---|
[restore & reset] 변경사항, 커밋을 초기화하고 싶어요 (0) | 2022.05.20 |
[log & reflog] 이전 commit 내역들과 변경사항을 확인하고 싶어요 (0) | 2022.05.19 |
브랜치 (0) | 2022.05.18 |
gitGit (0) | 2021.09.02 |