일을 하다보면 원하는데로 척척 진행되지 않을 때가 많다. 기획했던 내용 중에서 잘못된 부분을 발견하고 다시 이전 상태로 되돌리거나, 두 세가지 방안을 두고 일을 진행해나가는 경우가 있다. 현실에서 우리는 시간을 조작하는 능력이 없기에, 하나씩 하나씩 해봐야 성공인지 실패인지 알 수 있다. 물론 최대한 성공하도록 일을 진행하겠지만🙁
만약에 시간을 조작하는 능력이 있다면 어떨까? 일을 진행하다 실패하면 실패하기 전으로 시간을 되돌려서 다른 선택으로 일을 진행 할 수 있고, 실패라고 생각해서 폐기 했던 아이디어를 다시 활용할 수 있을 것이다. 현실에서는 이것이 불가능하지만, 컴퓨터에서는 가능하다. 그리고 이것을 가능하게 해주는 도구가 바로 Git이다.
Git은 데이터로 이루어진 컴퓨터 세상에서 타임머신과 같은 역할을 한다. 현재까지 진행했던 내용을 취소하고 이전 상태로 파일을 만들거나, 경우에 따라 다른 파일을 만들어 놓고 작업할 수 있다. Git을 이용하면 내가 원하는 시점에 파일의 상태를 저장하고 기록할 수 있기 때문에, 데이터의 저장 시점을 기준으로 과거 혹은 미래[1]로 얼마든지 왔다갔다 할 수 있다. Git이 없다면 일일이 버전에 따라 폴더를 나누거나 파일명을 다르게 해서 구분을 해야 하는데, 그런 일들은 Git이 다 해결해주니 우리는 파일 작업에만 집중할 수 있다.
예를 들어 보자. 둘리와 희동이가 공유폴더를 두고 각자 일을 하고 있다. 자기만 작업하는 파일은 상관이 없지만, git.txt같은 경우는 둘이 따로 작업하고 공유폴더에 올릴 경우, 내용이 덮어 씌어지는 문제가 발생할 수 있다. 이럴 경우를 방지해서 우리는 파일명을 날짜에 맞게 관리하거나, 업로드한 시점에 따라 버전명을 표시하기도 한다.
파일이 하나일 때는 날짜나 버전별로 관리하기가 쉬울 것이다. 그런데 만약 파일 100개를 관리해야 한다면 어떨까? 그리고 공유폴더에 작업하는 사람도 10명정도 된다면? 그럼 또 날짜별로 나눈 파일명을 시간별로 나눠야 하고, 버전도 세부적으로 나누어야 할 것이다. 이런 비효율적인 파일 형상관리를 Git은 상당히 편리하게 도와준다.
위 사진이 Git을 이용해서 파일의 형상관리를 한 것이다. 우리가 일반적으로 보는 GUI 상태에서는 전혀 달라진게 없어 보이고, 오히려 같은 파일에 덮어 씌운 것 아닌지 의심이 된다. 하지만 위 파일은 Git을 통해 관리되고 있고, 누가 어떤 내용을 수정했고, 어떤 파일을 추가했는지 다 알 수 있다.
다음 시간에는 도대체 Git이 저 파일들을 어떻게 관리하고 있는건지 알아보자
[1] : 여기서 말하는 미래는 데이터의 기준에서 미래다. 결코 사람의 시간 기준으로 미래에 작성될 파일을 의미하는 것이 아니다