-
Notifications
You must be signed in to change notification settings - Fork 0
/
Copy pathgit-basics.qmd
70 lines (51 loc) · 4.3 KB
/
git-basics.qmd
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
---
editor:
markdown:
wrap: sentence
---
# 자동화된 버전 관리 {#git}
\index{git} \index{버전 관리}
누군가 무엇을 했는지, 언제 했는지를 추적하기 위해서 버전 관리를 어떻게 사용할 수 있는지 탐색해보자.
다른 사람과 협업을 하지 않더라도, 자동화된 버전 관리가 다음 상황보다 훨씬 더 낫다:
[![Piled Higher and Deeper by Jorge Cham, http://www.phdcomics.com/comics/archive_print.php?comicid=1531](images/git/phd101212s.png){fig-align="center" width="263"}](http://www.phdcomics.com)
이전에 위와 같은 상황에 처했었다.
같은 문서에 대해서 거의 동일한 다수 버전을 관리하는 것은 우스꽝스러워 보인다.
일부 워드프로세서에는 이런 상황을 좀 더 잘 처리하도록 하는 기능이 있다.
예를 들어, 마이크로소프트 워드 "변경 내용 추적(Track Changes)"이나 구글 문서(Google Docs)의 버전 기록 기능이 그것이다.
버전 관리 시스템은 문서의 기본 버전으로 시작한 후, 각 단계마다 변경한 이력을 저장한다.
테이프로 생각하면 이해하기 쉽다.
테이프를 되감으면 문서를 시작한 지점으로 돌아가고, 각 변경 사항을 다시 적용하면 가장 최신 버전이 된다.
![변경 사항이 순차적으로 저장된다.](images/git/play-changes.svg){#fig-play-changes fig-align="center" width="468"}
변경 사항을 문서 그 자체와 별개로 생각하면, 동일한 기반 문서에 서로 다른 변경 사항을 적용해보는 식으로 "재생(playback)"할 수 있고, 이를 별도의 문서 버전을 관리하는 것으로 간주할 수 있다.
예를 들어, 두 사용자가 같은 문서에 독립적으로 변경 작업을 수행할 수 있다.
![다른 버전이 저장될 수도 있다.](images/git/versions.svg){#fig-git-playback fig-align="center" width="271"}
만약 충돌이 발생하지 않는다면, 심지어 동일한 문서에 두 가지 변경 사항을 모두 적용할 수도 있다.\
\index{버전 관리!병합}
![여러 버전이 병합될 수도 있다.](images/git/merge.svg){#fig-merge fig-align="center" width="260"}
버전 관리 시스템은 사용자를 대신해서 변경 사항을 기록하고, 파일 버전을 생성하며 파일을 병합하는 데 유용한 도구이다.
버전 관리 시스템을 사용하면 어떤 변경 사항을 다음 버전에 반영할지 결정할 수 있는데, 이를 **커밋(commit)**이라고 부른다.
또한 커밋에 관한 유용한 메타 정보도 보관한다.
특정 프로젝트와 프로젝트 메타 정보에 대한 완전한 커밋 이력은 **저장소(repository)**에 보관된다.
저장소는 협업하는 여러 동료의 컴퓨터 간에 동기화될 수 있다.
\index{커밋} \index{저장소}
::: callout-tip
### 버전 관리 시스템의 오랜 역사
\index{버전 관리!시스템}
자동화된 버전 관리 시스템은 전혀 새로운 것이 아니다.
1980년대부터 RCS, CVS, Subversion 같은 도구가 존재했고, 많은 대기업에서 사용되어 왔다.
하지만 다양한 기능의 한계로 인해 이들 중 다수는 이제 레거시 시스템(legacy system)으로 간주된다.
최근에 등장한 Git과 [Mercurial](http://swcarpentry.github.io/hg-novice/) 같은 도구는 *분산(distributed)* 기능을 제공한다.
이는 저장소를 반드시 중앙 서버에 둘 필요가 없다는 의미이다.
이러한 최신 시스템에는 동시에 여러 저자가 동일한 파일을 편집하는 것을 가능하게 하는 강력한 병합(merge) 도구도 내장되어 있다.
:::
::: callout-tip
### 논문 작성 시 버전 관리
\index{논문 작성}
- 논문을 작성하면서 정말 멋진 문단을 초안으로 작성했지만, 나중에 망쳐버렸다고 상상해 보자.
어떻게 해야 *정말 멋진* 결론 부분이 포함된 문서 버전을 되살릴 수 있을까?
과연 가능할까?
- 공동 저자가 5명 있다고 가정해 보자.
이들이 논문에 반영한 변경 사항과 의견(comment)을 어떻게 관리할 수 있을까?
마이크로소프트 워드나 리브레오피스 Writer를 사용한다면 `변경 내용 추적` 기능으로 변경 사항을 반영하면 어떻게 될까?
이러한 변경 내역을 계속 보관하고 있을 수 있을까?\
:::