"git"이라는 단어를 들을 때마다 터미널 앞에 구부정하게 앉아 있는 개발자들을 떠올리더라도 비난하지 않겠습니다. 이 버전 추적 도구는 코드를 위해 만들어졌고, 지난 수십 년간 그 세계에서 살아왔으니까요. 하지만 Git의 핵심은 시간이 지남에 따라 파일에 가해진 변경 사항을 추적하는 매우 영리한 방법일 뿐입니다. Git은 그 파일에 무엇이 들어 있는지 알지도 못하고 관심도 없습니다. C 스크립트든 메모 파일이든 상관없이 동일하게 변경 사항을 추적합니다.
저는 프로그래머가 아닌 업무에도 매일 Git을 사용하며, 이러한 사용 방식은 코딩과는 전혀 관련이 없습니다. Git이 사실은 파일의 이력을 추적하는 도구라는 점을 이해하고 나면, 더 이상 개발자 전용 도구가 아니라 훨씬 더 많은 상황에서 유용한 도구가 됩니다.
이제 내 메모는 스스로 동기화됩니다
버전 관리가 되는 기기 간 노트북으로 Git 사용하기
제가 Git을 사용하는 가장 기본적인 사례 중 하나는 메모를 동기화하는 것인데, 생각보다 훨씬 쉽습니다. 저는 일반 텍스트 Markdown 메모 폴더(연구 자료, 메모, 무작위 아이디어, 코드 조각, 잃어버리고 싶지 않은 텍스트 등)를 보관하고 있으며, 이 폴더 전체가 하나의 Git 저장소입니다.
계정이나 특정 앱 없이는 액세스할 수 없는 독점 데이터베이스에 메모를 쌓아두는 대신, 일반 폴더 내에 일반 텍스트나 Markdown 파일로 보관하면 Git이 이를 추적하게 할 수 있습니다. 변경 사항을 커밋할 때마다 Git은 해당 파일들의 상태를 저장하므로, 무엇이 변경되었는지 확인하거나 변경 사항을 되돌리거나 삭제한 내용을 복구할 수 있습니다.
또 다른 장점은 Git의 분산 설계입니다. 모든 기기에 메모의 전체 복사본을 가질 수 있고, GitHub, GitLab, Gitea 또는 직접 호스팅하는 서버와 같은 서비스를 모든 것이 동기화되는 중앙 지점으로 사용할 수 있습니다. 메모는 오프라인에서도 작동하며, 동기화를 유지하기 위해 특정 업체에 종속될 필요도 없습니다.
내 Linux 설정은 더 이상 고장 나지 않습니다
설정을 항상 복구할 수 있도록 dotfiles 추적하기
저는 가상 머신과 Linux 서버에 걸쳐 여러 개의 Linux 설치를 유지하고 있습니다. 다양한 실험을 하면서 시스템을 자주 망가뜨리기 때문에 이러한 설치 환경은 종종 초기화되거나 재설치됩니다. 터미널, 셸 프롬프트, 키 바인딩을 설정하느라 오후 시간을 다 보내본 적이 있다면, 새 기기를 설정할 때 기억을 더듬어 모든 것을 다시 설정해야 하는 막막함을 잘 아실 겁니다. Git의 작은 마법을 dotfile 관리와 결합하면 그러한 번거로움을 피할 수 있습니다.
Dotfile은 홈 디렉토리에 있는 숨겨진 설정 파일입니다. .bashrc, .vimrc, .config/i3/config와 같은 파일들은 다양한 프로그램과 시스템 측면에 대한 세밀하게 조정된 설정을 담고 있습니다. 이를 Git 저장소에 저장하면 지금까지 수행한 모든 조정 사항의 전체 이력을 얻을 수 있고, 몇 가지 명령어로 설정을 복제할 수 있습니다.
관련 기사
Linux 사용자라면 알아야 할 5가지 프로그램
Linux는 단순한 백업 OS 그 이상이며, 이 프로그램들이 그것을 증명합니다.
저의 특정 워크플로우는 ~/.dotfiles에 bare 저장소를 만들고, 홈 디렉토리 전체를 저장소로 바꾸지 않고도 홈 디렉토리에 대해 Git 명령을 실행할 수 있게 해주는 간단한 별칭(alias)을 사용하는 것입니다. 키보드 단축키를 변경하거나 셸 별칭을 업데이트할 때, 업데이트된 파일을 스테이징하고 커밋합니다. 또한 서로 다른 기기를 위한 브랜치를 만들어 동일한 저장소 내에서 서로 다른 설정을 추적할 수도 있습니다.
이제 모든 글을 Git으로 작성합니다
기사, 초안, 편집 전체 이력이 내장된 상태로
저는 모든 기사를 Markdown으로 작성하며, 이들은 모두 Git 저장소 안에 있습니다. 이는 제 메모 동기화 방식과 매우 유사하지만, 제가 작성하는 모든 기사가 Git 저장소 안에 존재하도록 확장할 수 있습니다.
여기서의 주요 기능은 diff 명령어입니다. 피드백을 받거나 여러 번의 수정본 중에서 어떤 버전을 선택해야 할지 확실하지 않을 때, git diff를 실행하여 추가, 삭제, 편집한 모든 줄을 확인할 수 있습니다. 이렇게 하면 Google Docs에서 여러 문서를 나란히 열거나 복잡한 파일 이름을 사용하여 버전을 구분해야 하는 번거로움을 덜 수 있습니다. 파일은 하나뿐이며, Git이 모든 것을 기억하는 힘든 작업을 대신 해줍니다.
브랜치 기능도 여기서 유용하게 쓰입니다. 다른 관점, 구조 또는 초안의 개별 부분을 실험하고 싶을 때 브랜치를 만들고 자유롭게 작업한 다음, 원본 초안과 병합하거나 원본 파일을 영구적으로 변경하지 않고 폐기할 수 있습니다. 진행 중인 초안을 망칠까 봐 걱정하지 않고 실험할 수 있는 그 자유는 값을 매기기 어려우며, Git은 실제로 그 과정을 훨씬 쉽게 따라가고 추적할 수 있게 해줍니다.
Git은 코딩보다 훨씬 더 큰 범위를 다룹니다
이러한 방식 외에도 단일 파일의 변경 사항을 추적해야 하는 거의 모든 작업에 Git을 사용할 수 있습니다. 요점은 Git이 이러한 작업에만 가장 적합한 도구라는 것이 아닙니다. 글쓰기, 메모, 설정 파일 관리를 위해 특별히 설계된 앱들이 있습니다. 하지만 이미 Git을 알고 있다면, 아주 기초적인 수준이라 하더라도, 다양한 사용 사례에 걸쳐 이를 활용함으로써 배워야 하거나 관리해야 할 도구를 하나 줄이고, 비용을 지불해야 하는 동기화 서비스를 하나 줄이며, 필요할 때마다 강력한 버전 이력을 얻을 수 있습니다.
관련 기사
네, 터미널을 다뤄야 할 것입니다. Git을 한 번도 사용해 본 적이 없다면 이 과정이 위협적으로 들릴 수도 있습니다. 하지만 결국에는 진정으로 유용한 기술을 습득하게 될 것이며, 더 중요하게는 파일에 대한 완전한 통제권을 갖게 될 것입니다. 데이터가 기기를 떠저는지, 언제 떠저는지, 어떤 서비스 제공업체를 신뢰하는지, 어떤 편집기를 사용하는지, 얼마나 자주 파일을 동기화하는지 등을 스스로 결정하게 됩니다. 또한 실용적인 결과물을 얻으면서 Git 학습을 시작하기에도 아주 좋은 방법입니다.
