[깃(Git)] 1. 작업 공간 및 흐름

깃(Git)의 4가지 작업 공간

image

워크스페이스(workspace)

  • 우리가 작업하는 일반적인 공간이며, 깃을 쓰기 이전의 처음 상태이다.
  • git add 명령어 이전의 변경 사항은 워크스페이스에 기록된다.

인덱스(index)

  • 변경되는 모든 파일 및 폴더를 추적하는 공간이며, 스테이징 공간(staging area)로도 불린다.
  • git add 명령어로 워크스페이스 공간에 있는 작업물을 이 공간으로 보낸다.
  • 관심 있고, 최종적으로 커밋하고자 하는 작업물을 이 공간에 두면 된다.
  • 한 번 인덱스에 올라갔던 파일은 깃에서 지속하여 추적한다.

로컬 레포지토리(local repository)

  • 최종적으로 커밋된 작업물이 놓이는 공간이다.
  • git commit 명령어로 인덱스에 있는 파일을 이 공간으로 보낸다.
  • 최종적으로 작업한 내용이 이 공간에 기록된다.

리모트 레포지토리(remote repository)

  • 깃 호스팅 공간으로, 인터넷으로 연결된 별도의 공간이다.
  • 최종 작업물을 여기에 저장하고 타인과 공유한다.
  • 여러 사람이 같이 협업할 때 이 공간을 사용한다.
  • git push 명령어로 로컬 레포지토리 공간에 있는 작업물을 이 공간으로 보낼 수 있다.
  • git fetchgit pull 명령어로 이 공간에 있는 작업물을 로컬 레포지토리로 가져올 수 있다.
  • 이 공간에 있는 작업물을 보통 협업에서 가장 최신 버전의 작업물이라고 간주한다.
  • GitHub, BitBucket, GitLab 등이 이 공간을 구현한 깃 호스팅 서비스이다.

기본 동작 흐름

일반적인 작업 흐름

  • 일반적으로 작업 흐름에서 공간은 워크스페이스 -> 인덱스 -> 로컬 레포지토리 -> 리모트 레포지토리를 거치게 된다.
1
2
3
4
5
6
7
8
9
10
11
12
13
# 터미널에서 디렉토리를 하나 생성 후, 깃 사용을 위해 초기화
$ mkdir git_ex
$ cd git_ex
$ git init

# 파일 두 개 생성
$ touch a
$ touch b

$ ls
'''
a b
'''
  • 위 두 가지 파일은 워크스페이스 공간에 놓여있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
$ git status
'''
On branch master

No commits yet

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	a
	b

nothing added to commit but untracked files present (use "git add" to track)
'''
  • 위에서 만든 작업물 중 a에만 관심이 있다.(파일의 내용과 변경 히스토리 등을 추적하고 싶다.)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
# 워크스페이스에 있는 작업물을 인덱스 공간으로 이동
$ git add a

$ git status
'''
On branch master

No commits yet

Changes to be committed:
  (use "git rm --cached <file>..." to unstage)
	new file:   a

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	b
'''

# 최종적으로 커밋하여 작업 내용 저장, 인덱스 공간의 작업물을 로컬 레포지토리 공간으로 이동
$ git commit -m 'a 파일 추가'
'''
[master (root-commit) 237a7be] a 파일 추가
 1 file changed, 0 insertions(+), 0 deletions(-)
 create mode 100644 a
'''

$ git status
'''            
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	b

nothing added to commit but untracked files present (use "git add" to track)
'''

# a 파일에 내용 추가
$ echo "this is a" > a
$ cat a    
'''
this is a
'''

$ git status
'''
On branch master
Changes not staged for commit:
  (use "git add <file>..." to update what will be committed)
  (use "git restore <file>..." to discard changes in working directory)
	modified:   a

Untracked files:
  (use "git add <file>..." to include in what will be committed)
	b

no changes added to commit (use "git add" and/or "git commit -a")
'''

# 다시 인덱스 공간으로 올리고 커밋
$ git add a 
$ git commit -m 'a 파일 수정'  
'''
[master e4c095d] a 파일 수정
 1 file changed, 1 insertion(+)
'''

$ git status                 
'''
On branch master
Untracked files:
  (use "git add <file>..." to include in what will be committed)
	b

nothing added to commit but untracked files present (use "git add" to track)
'''

# 커밋 로그 확인
$ git log
'''
commit e4c095d7cb8218896cbf4e29d4abfd1ce1f0369b (HEAD -> main)
Author: 6mini <real6mini@gmail.com>
Date:   Mon May 30 11:24:29 2022 +0900

    a 파일 수정

commit 237a7beef80798caa69d3f3249630286eff51746
Author: 6mini <real6mini@gmail.com>
Date:   Mon May 30 11:23:29 2022 +0900

    a 파일 추가
'''

# 깃허브 리모트 레포지토리로 이동
$ git remote add origin git@github.com:6mini/git-example.git
$ git branch -M main
$ git push -u origin main

# 한 번 등록 후에는 아래와 같이 명령 가능
$ git push origin main

작업 내역 받아오기

  • 위 과정을 개발자 A가 진행했고, 개발자 B가 이어서 작업하려고 한다.
  • 만약 개발자 B가 A의 프로젝트를 처음 다운로드하는 상황에서는 git clone을 사용한다.
1
$ git clone git@github.com:6mini/git-example.git
  • 만약 처음 다운로드하는 상황이 아니고, 업데이트된 작업 내역을 받아오고 싶다면 git pull을 사용한다.
1
$ git pull origin main

작업 공간 정리

1
2
3
4
git add: workspace -> index
git commit: index -> local repository
git push: local repository -> remote repository
git pull, fetch: origin repoistory -> remote repository

정리

  • 깃은 분산 버전 관리 도구로, 작업 내역을 저장할 수 있고 여러 사람과 협업할 때 필수적으로 쓰인다.
  • 깃에는 워크스페이스, 인덱스, 로컬 레포지토리, 리모트 레포지토리의 4가지 공간이 있다.
    • 보통 왼쪽에서 오른쪽 순으로 작업 흐름을 가져간다.
    • 보통 리모트 레포지토리에서 최신 업데이트된 작업 내역을 받아온다.
    • 리모트 레포지토리로는 GitHub, BitBucket, Gitlabs와 같은 깃 호스팅 서비스를 사용한다.
0%