Git란 무엇인가?


당신은 아마도 손으로 버전 관리를 해본 적이 있을 것입니다. report.docx, report_final.docx, report_final_v2.docx, report_final_ACTUAL.docx가 들어 있는 폴더는 버전 관리의 최악의 형태입니다. 두 파일 사이에 무엇이 변경되었는지 알 수 없고, 두 사람이 동시에 만든 편집을 병합할 수 없으며, 세 개 앞의 복사본에서 삭제한 좋은 단락을 되찾을 수 없습니다.
Git은 이 문제를 제대로 해결합니다. 프로젝트의 스냅샷을 시간에 따라 기록하는 도구로서, 전체 히스토리가 복사본의 더미 대신 한 곳에 있습니다. 이 도구 자체는 당신의 컴퓨터에서 실행되는 작은 프로그램입니다. git으로 시작하는 명령을 터미널에 입력하면 텍스트로 답변합니다.
Git이 당신을 위해 해주는 것
기본적으로 Git은 프로젝트의 타임라인을 유지합니다. 저장할 가치가 있는 지점에 도달할 때마다 **커밋**을 기록합니다. 이는 모든 파일의 스냅샷과 무엇이 변경되었는지, 그리고 왜 변경되었는지를 설명하는 짧은 메시지입니다. 나중에 그 타임라인을 다시 살펴보면 프로젝트가 어떻게 현재 상태에 도달했는지 정확히 볼 수 있습니다. 다음은 프로젝트의 커밋을 나열하는 git log 명령으로 출력한 실제 타임라인입니다 (--oneline 플래그는 각 커밋을 한 줄로 단축합니다):
$ git log --oneline
a1b2c3d 비밀번호 강도 표시기 추가
9f8e7d6 가입 양식 유효성 검사 수정
5c4b3a2 프로젝트 구조 설정이는 프로젝트 히스토리의 세 가지 저장된 지점입니다. 최신 항목이 맨 위에 있고, 각각 짧은 ID와 작성자가 작성한 메시지가 있습니다. (이와 같은 모든 예시에서 $로 시작하는 줄은 터미널에 입력한 명령이며 $ 자체는 포함되지 않고, 그 아래의 줄들은 Git의 응답입니다.) 다음 몇 장에서 이 히스토리를 생성하고 읽는 모든 명령을 배우게 됩니다. 지금은 Git이 항상 돌아갈 수 있는 스냅샷 시리즈로 작업을 기록하고 있다는 아이디어를 유지하세요.
프로젝트에 이와 같은 히스토리가 있으면 많은 일이 가능해집니다. 무엇이 변경되었는지, 누가 변경했는지 볼 수 있습니다. 위험한 아이디어를 한쪽에서 시도해볼 수 있으며, 작동하지 않으면 깔끔하게 버릴 수 있습니다. 전체 히스토리를 가진 전체 프로젝트를 다른 사람에게 넘길 수 있습니다. 두 사람이 같은 코드를 편집할 때 Git은 그들의 작업을 결합하고 의견이 다른 지점을 표시하여 사람이 해결할 수 있도록 합니다. 이 네 가지 능력(히스토리, 안전한 실험, 공유, 작업 결합)은 Git이 거의 모든 전문적인 코드베이스에서 실행되는 전체 이유입니다.
final_v2_ACTUAL 복사본의 더미는 Git이 끝내도록 만들어진 문제이며, 처음으로 하나를 삭제할 때 정말 좋은 기분이 든다고 약속합니다. Git과 GitHub는 다른 것입니다
이것은 처음에 거의 모두를 혼동시키므로 여기 있습니다. Git은 버전 관리 도구입니다. 당신의 컴퓨터에서 실행되고, 커밋을 기록하며, 작동하기 위해 인터넷 연결이나 계정이 필요하지 않습니다. **GitHub**은 Git 저장소를 온라인으로 저장하고 그 주변에 것들을 추가하는 웹사이트입니다. 코드를 공유하고, 서로의 변경을 검토하고, 문제를 보고하고, 협업할 수 있는 장소입니다.
차이를 가장 명확하게 느끼려면: GitHub 계정을 만들지 않고도 매일 Git을 사용할 수 있습니다. 저장소를 공유하는 곳에 두어 다른 사람이나 다른 기계가 접근할 수 있도록 하려면 GitHub만 필요합니다. Git은 엔진입니다. GitHub는 그것이 생성하는 것을 호스팅할 수 있는 한 곳입니다. GitLab과 Bitbucket과 같은 다른 곳도 있으며, 모두 내부에 동일한 Git 저장소를 호스팅합니다.
Git의 유래
Git의 역사는 왜 그런 식으로 작동하는지 많이 설명합니다. 2005년 Linux를 시작한 같은 사람인 Linus Torvalds가 작성했습니다. Linux 커널은 전 세계에 흩어져 있는 수천 명의 자원봉사자에 의해 만들어지며, 몇 년 동안 그들은 BitKeeper라는 상용 도구를 사용하여 그 모든 작업을 조정했고, 그 뒤에 있는 회사는 오픈소스 프로젝트가 무료로 사용하도록 허용했습니다.
2005년 그 무료 배치가 무너졌고, 커널 커뮤니티는 갑자기 거대하고 빠르게 움직이는 코드베이스를 관리할 도구가 없었습니다. 당시 이용 가능한 다른 것은 그 규모를 따라잡을 수 없었습니다. 그래서 Torvalds는 커널 작업에서 2주일을 물러났고 자신의 버전 관리 도구를 작성했으며, 정확히 그 문제로 형성된 몇 가지 확고한 목표가 있었습니다.
그는 그것이 분산되기를 원했으므로, 모든 기여자가 자신의 기계에 전체 프로젝트 히스토리를 가지고 있을 것이고 중앙 서버와 확인하지 않고 작업할 수 있을 것입니다. 그는 그것이 빠르기를 원했으며, 중앙 서버 없이는 사람들이 기다리지 않도록 충분히 빠릅니다. 그리고 그는 무결성을 보장하기를 원했으므로 아무도 조용히 히스토리를 변경할 수 없고 디스크 오류가 프로젝트를 손상시킬 수 없습니다.
이 목표들이 Git이 오늘날 작동하는 방식입니다. 프로젝트를 clone할 때 작업할 전체 히스토리를 얻으며, 이는 분산 목표입니다. 와이파이가 없는 비행기에서 커밋, 브랜치, 히스토리를 탐색할 수 있습니다. 그리고 모든 커밋은 정확한 내용에서 계산된 지문으로 표시되므로, 단 하나의 바이트가 변경되면 지문이 일치하지 않고 Git이 알아챕니다. Torvalds가 서둘러 2005년에 만든 설계 결정은 지금 Git을 사용할 때마다 의존하는 결정입니다.
clone이 오프라인으로 작업할 전체 히스토리를 제공하는 이유이고, 모든 커밋이 지문을 얻는 이유입니다. 수년간 사용할 도구에 대한 편리한 배경입니다. 이 핸드북이 다음으로 가는 곳
정신 모델이 준비되면, 트랙의 나머지는 작업을 수행하는 것입니다. 당신의 첫 번째 저장소는 0에서 시작합니다. 터미널을 열고, Git이 설치되어 있지 않으면 설치하고, 폴더를 커밋할 수 있는 저장소로 변환합니다. 거기에서 변경을 저장하는 일상적인 루프, 브랜칭, 병합, GitHub에서의 협업 흐름을 배우게 됩니다. 용어가 항상 당신을 혼동시키면, 용어집에는 이 문서의 모든 Git 어휘에 대한 짧은 정의가 있습니다.

