mir.pe (일반/밝은 화면)
최근 수정 시각 : 2024-11-15 16:36:54

Git

기트에서 넘어옴

파일:나무위키+유도.png  
은(는) 여기로 연결됩니다.
미국의 대학교에 대한 내용은 Georgia Institute of Technology 문서
번 문단을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
, 에 대한 내용은 문서
번 문단을
번 문단을
부분을
부분을
참고하십시오.

[[컴퓨터공학|컴퓨터 과학 & 공학
Computer Science & Engineering
]]
[ 펼치기 · 접기 ]
||<tablebgcolor=#fff,#1c1d1f><tablecolor=#373a3c,#ddd><colbgcolor=#0066DC><colcolor=white> 기반 학문 || 수학( 해석학 · 이산수학 · 수리논리학 · 선형대수학 · 미적분학 · 미분방정식 · 대수학( 환론 · 범주론) · 정수론) · 이론 컴퓨터 과학 · 암호학 · 전자공학 · 언어학( 형태론 · 통사론 · 의미론 · 화용론 · 음운론) · 인지과학 ||
하드웨어 구성 SoC · CPU · GPU( 그래픽 카드 · GPGPU) · ROM · RAM · SSD · HDD · 참조: 틀:컴퓨터 부품
기술 기계어 · 어셈블리어 · C/ C++ · C# · Java · Python · BIOS · 절차적 프로그래밍 · 객체 지향 프로그래밍 · 해킹 · ROT13 · 일회용 비밀번호 · 사물인터넷 · 와이파이 · GPS · 임베디드 · 인공신경망 · OpenGL · EXIF · 마이크로아키텍처 · ACPI · UEFI · NERF · gRPC · 리버스 엔지니어링 · HCI · UI · UX · 대역폭 · DBMS · NoSQL · 해시( SHA · 브루트 포스 · 레인보우 테이블 · salt · 암호화폐) · RSA 암호화 · 하드웨어 가속
연구

기타
논리 회로( 보수기 · 가산기 · 논리 연산 · 불 대수 · 플립플롭) · 정보이론 · 임베디드 시스템 · 운영 체제 · 데이터베이스 · 프로그래밍 언어{ 컴파일러( 어셈블러 · JIT) · 인터프리터 · 유형 이론 · 파싱 · 링커 · 난해한 프로그래밍 언어} · 메타데이터 · 기계학습 · 빅데이터 · 폰노이만 구조 · 양자컴퓨터 · 행위자 모델 · 인코딩( 유니코드 · MBCS) · 네트워크 · 컴퓨터 보안 · OCR · 슈퍼컴퓨터 · 튜링 머신 · FPGA · 딥러닝 · 컴퓨터 구조론 · 컴퓨터 비전 · 컴퓨터 그래픽스 · 인공지능 · 시간 복잡도( 최적화) · 소프트웨어 개발 방법론 · 디자인 패턴 · 정보처리이론 · 재귀 이론 · 자연어 처리( 기계 번역 · 음성인식) · 버전 ( 버전 관리 시스템 · Git · GitHub)

<colbgcolor=#ffffff,#1f2023><colcolor=#413000,#ddd> Git
파일:Git 로고.svg
종류 버전 관리 시스템(VCS)
라이선스 GPLv2
개발 리누스 토르발스
언어 C(49.9%), Shell(37.8%) 등
최초 공개일 2005년 4월 7일
버전 v2.47.0
파일:홈페이지 아이콘.svg | 파일:GitHub 아이콘.svg 파일:GitHub 아이콘 화이트.svg | #

1. 개요2. 상세
2.1. 개발 비화
3. 구조4. 장단점
4.1. 장점4.2. 단점
5. 서버 호스팅 및 저장소
5.1. 서비스식 Git 저장소5.2. 자체 호스팅
6. 클라이언트7. Git 사용법 배우기
7.1. 타 형상 관리 도구를 사용하던 사람이라면
8. 기타

[clearfix]

1. 개요


(Git)은 리누스 토르발스가 개발한 분산형 버전 관리 시스템(VCS)이다.

2. 상세

오픈소스계의 영원한 아이돌 리누스 토르발스는 리눅스 커널을 관리하는 기존 툴이 엉망인 것에 너무 빡친 바람에 Git이라는 소스관리 툴을 만든다. 리누스는 하도 빡친 나머지, 단 2주만에 완성하는 기염을 토했다.
오픈소스의 승리 중에서.
Git은 매우 빠른 속도와 분산형 저장소 지원이 특징이다. 방대한 Linux 커널 소스 코드를 생각해 보면, 속도 문제는 매우 중요하다. 오픈 소스 개발의 특성상 여럿이 달려들어 자기 맘에 드는 걸 하기도 하며, 또한 뭘 하나 잘못 붙였다 이상한 걸 건드려 망하기 쉬운데, Git는 이런 환경의 특성에 맞게끔 제작되었다.

Git 자체는 오픈 소스이며 저장소는 git.kernel.org이다.(이 소스 코드도 자기 자신인 Git으로 관리되어 있다.)

git clone으로 프로젝트를 클론한 후 빌드해 볼 수 있으며, 전체 저장소를 클론하고 싶지 않다면 kernel.org에서 원하는 버전의 tar 파일을 찾아서 다운로드할 수 있다.

GitHub git/git이라는 미러 저장소도 있으며, 정확히 동일한 내용을 가지고 있다. 다만 저장소 설명에 나와있듯 배포 전용 저장소이기 때문에 PR, 이슈 등을 받는 일반적인 저장소는 아니다.

2.1. 개발 비화

Git의 개발 비화를 다룬 만화

리누스 토르발스는 초기에 리눅스 커널 소스 코드를 관리할 때 SVN(Subversion)이나 CVS(Concurrent Versions System) 같은 기존의 버전 관리 시스템을 아예 사용하지 않았다. 사용하지 않은 이유는 기능이 마음에 들지 않았다는게 정설이며, 수많은 사람들이 보내오는 메일링 리스트로 다른 개발자의 기여 내용을 관리하고 있었다. 그러다가 그도 결국 버틸 수 없었는지 버전 관리 시스템을 사용하기로 결정했는데, 그가 선택한 것은 BitKeeper[1]라는 프로그램이었다. BitKeeper는 상용 S/W였지만 분산 처리 기능과 비교적 빠른 성능 덕분에 사용했다고 한다. 토르발스의 이런 선택은 자유 소프트웨어 진영으로부터 지탄을 받았으나 자유 소프트웨어 진영에서도 마땅한 대안을 제시하지는 못했다.

그러다가 BitKeeper 쪽에서 리버스 엔지니어링을 문제로 일부 리눅스 개발자들을 제한하는 일이 발생했다. 그런 일이 발생하자 토르발스는 BitKeeper를 계속 쓸지 아니면 다른 버전 관리 시스템을 사용할지 결정해야 했는데, 토르발스의 선택은 제3의 길이었다. 그냥 자신이 직접 버전 관리 시스템을 만들기로 결정했고 그렇게 뚝딱뚝딱 직접 만든 게 바로 Git이었다. 단 2주 만에 완성했다고 한다. 그리고 리눅스 커널 소스를 Git을 이용해서 관리하기 시작했다. 이 때문에 팽당한 BitKeeper는 유료 정책도 포기하고 무료로 풀었으며 심지어 아파치 라이선스로 소스까지 공개한 상태지만 대세를 거스를 순 없었다. 현재는 Git이 SVN, Mercurial, CVS 등 여타 버전 관리 시스템들을 큰 격차로 누르고 압도적인 점유율을 차지하고 있다. #

리누스가 리눅스 저장소에 적용하며 등장했다는 상징성과 유명세 덕에 단번에 큰 관심을 끌었다. 그 이전까지 많이 쓰이던 SVN이나 추격자였던 Mercurial을 단번에 제치고 많은 사용자를 확보했으며, 리누스의 이름값에 모여든 활발한 참여자들의 기여를 통해 지속적으로 기능이 추가 보완되면서 더욱 인기를 끄는 상승 작용이 반복되어 부동의 점유율을 자랑하게 되었다. 2010년 이후로 토르발스는 더 이상 메인 컨트리뷰터로 활동하지 않고 리포지토리를 다른 사람에게 넘긴 상태. 현재 gitster와 peff 등이 메인 컨트리뷰터로 활동하고 있다.

오픈 소스가 기존에 치열하게 경쟁하던 상용 소프트웨어업체들을 무시하고 시장 경제를 망가뜨리는 공산주의라고 까던 마이크로소프트는 결국 그 자신들도 Git을 잘 써먹다 못해 Visual Studio 기본 버전 관리 시스템으로 Git을 박아버린 데다 아예 대표적인 저장소인 GitHub를 인수해 버렸고, 구글, 트위터, 모질라 재단 등에서도 Git을 잘 써먹고 있다. 국내에서 유명한 파일 시스템 기반 PHP 위키 엔진인 모니위키도 Git으로 관리되고 있다. 윈도우의 경우 2020년 기준으로 90%까지 Git 처리가 완료되었는데, 하루 8,500건의 커밋(Commit)과 더불어 1,760번의 빌드를 거친다고 한다.

3. 구조

파일:1AF67FA3-613F-437A-A43E-736CD5F435D9.jpg
Git 구동 원리
일단 Git은 '로컬 저장소'라는 이름으로 전체 데이터를 작업 폴더에 넣어 관리한다. 이는 전체 기록과 각 기록을 추적할 수 있는 정보를 포함하고 있는 저장소이다. 즉 자기 컴퓨터에 모든 파일을 다 받아서 하는 셈. 위키로 치자면 위키 전체를 작업자의 컴퓨터에 전부 다 받아서 수정하는 것과 같다.[2] 이 '로컬 저장소' 는 해당 작업자의 작업을 버전별로 저장하고 관리하는 중간 관리 역할도 하면서, 동시에 해당 작업자와 다른 작업자의 작업을 '각기 다른 사람의 로컬 저장소'로 다원화하는 역할도 가지고 있다. 즉 위키로 치자면 여러 기여자가 메인 서버의 편집 버전 숫자 증가를 공유하는 것이 아니라, 각 유저별로 나름 자기 버전의 편집 버전을 올려가다가, 필요해지면 서버와 각 유저가 작업을 마친 원하는 버전을 통합시켜 서버 단위의 편집 버전을 +1 올리는 것이다.

작업이 끝나면 Git 원격 저장소로 다시 발행하는데, 여기에서도 메인 저장소와 합치기 전 메인 저장소와 격리시키고 따로 개발할 수 있는 가지라는 걸 만들어 가지의 개발이 완료될 시 메인 저장소와 합치고 가지는 삭제시키는 가지치기를 할 수 있으며, 또한 개발 중간중간 꼬리표를 매겨 개발을 더 수월하게 할 수 있다.

4. 장단점

4.1. 장점

4.2. 단점

5. 서버 호스팅 및 저장소

5.1. 서비스식 Git 저장소

5.2. 자체 호스팅

외부에서 제공되는 서비스 형태가 아닌, 설치형 Git 서버는 리눅스 서버라면 별다른 추가 프로그램 없이 리눅스의 기본 프로그램(SSH 등)과 배포본에 들어있는 패키지 만으로도 서버를 구동할 수 있다. 유닉스 계열 서버에서도 손쉽게 설정할 수 있다.

윈도라면 마이크로소프트 Azure DevOps(구 Team Foundation Server)를 통해 Git 서버를 구성하여 사용할 수 있다. 서버 자체에서 기존 TFS와 git 방식을 동시에 지원한다. 다만 MS에서 제공하는 서버를 사용하기 싫다면 간단한 대안이 없었는데, GitBucket이라는 JVM 기반에 Scala로 GitHub를 흉내내어 작성된 오픈 소스 프로그램이 등장했다. JVM 구동으로 메모리를 많이 먹는 단점을 제외하면 HTTP는 물론 SSH와 메일 알림 같은 여러 서버 기능을 자체적으로 지원하며, GitHub의 상당히 많은 기능을 매우 비슷하게 구현해 놓았기 때문에 GitHub을 쓰던 사람이라면 거의 그대로 사용할 수 있고, 그렇지 않더라도 GitHub처럼 매우 쉽게 쓸 수 있다는 장점이 있다.

6. 클라이언트

Git을 사용하는 방법은 많다. CLI로 사용할 수도 있고 GUI를 사용할 수도 있다. 이 책에서는 Git CLI 사용법을 설명한다. Git의 모든 기능을 지원하는 것은 CLI뿐이다. GUI 프로그램의 대부분은 Git 기능 중 일부만 구현하기 때문에 비교적 단순하다. CLI를 사용할 줄 알면 GUI도 사용할 수 있지만 반대는 성립하지 않는다. GUI를 사용하고 싶더라도 CLI가 기본으로 설치되는 도구이기 때문에 CLI 기준으로 설명하겠다.
Progit의 CLI 챕터에서 발췌.(강조 문구는 원문에서도 강조된다.)
일단 커맨드 프롬프트 방식 Git은 리눅스 바이너리 코드를 중심으로, 타 운영 체제의 경우엔 호환성 레이어를 거쳐 실행하는 방식으로 제작되어 있다. 운영 체제 포팅 작업에서 일어날 수 있는 차이를 피할 수 있는 대신 비리눅스 환경의 경우 용량이 상당히 크다는 약점이 있다.

CLI의 경우 윈도우, macOS, 리눅스를 전부 지원하며, 공식 사이트에서 내려받을 수 있다. 일부 GUI 툴들은 내부적으로 커맨드라인 툴을 호출하게 되어있기도 하다. Git 설치 후 구동 조건의 충족이나 꼬였을 때의 대처, 고급 버전 관리와 같은 기능(특히 커밋 이후 이전 버전으로의 롤백 등)들은 CLI가 훨씬 편리하거나 CLI에서만 지원하므로 문제가 생기면 CLI 사용법을 찾아보는 것이 좋다.

Git 자체에도 gitk와 git-gui라는 GUI 툴을 기본 제공하고 있으나, 프롬프트에서 명령어를 쳐야 실행 가능하고 기능이 한정적이라 아래의 소프트웨어를 주로 사용한다.

윈도우/ 진영은 SourceTree, 리눅스 진영은 SmartGit을 주로 사용한다. 또한 디자인과 기능 면에서 좋은 평가를 받는 GitKraken과 GitHub에서 직접 내놓은 GitHub Desktop도 있다. 윈도우 전용으로는 SubVersion 시절부터 유명했던 TortoiseGit가 있는데, 윈도우 탐색기와 연동되는 방식이라 사용하기 쉽고, SubVersion 시절에 많이 쓰였던 TortoiseSVN과 사용법이 거의 같기 때문에 SubVersion 쓰던 사람들이 넘어오기 좋다.

Visual Studio를 사용하는 환경이라면 Git 프로젝트를 사용하면 자동으로 내장된 자체 Git GUI가 나타나므로 이걸 사용해도 상관없다. 물론 SourceTree 같은 외부 툴을 그대로 사용해도 된다. 메뉴에서 찾아 들어가려면 보기(V) -> 팀 탐색기(M)를 따라 들어가면 된다. 단축키는 아래와 같다.
프로젝트 생성 시 리포지토리 생성도 가능하다.

7. Git 사용법 배우기

인터넷에 공개된 자료가 매우 많다. 여기서 주의해야 할 점이 있는데, 상당수의 입문 자료에서는 보통 branch를 분리하라고 하지만 현실 프로젝트에서는 그렇게 하다가 나중에 merge 단계에서 더 큰 충돌이 발생하는 경우가 많아 함부로 branch 기능을 사용하는 것에 주의해야 한다. 매우 거대한 기능을 개발할때나 앞으로 합칠 생각이 없는 버전을 따로 쓰고 싶을 때 사용되는 편이다. branch를 정석으로 사용하는 모습을 보고 싶으면 여러 오픈 소스 프로젝트를 살펴보는 것이 좋다.

7.1. 타 형상 관리 도구를 사용하던 사람이라면

타 도구를 사용하던 사람을 위한 소개 자료도 제법 존재한다. 깃 관련 도움말을 아무리 봐도 영 감이 오지 않고 두렵다면 읽어볼 만하다. 기존 툴의 용어를 최대한 사용해서 쉬운 이해를 돕도록 작성되어 있다. 물론 기존 도구에 아예 없던 기능이면 어쩔 수 없다.(...)

8. 기타



[1] 사이트는 www.bitkeeper.org이다. 오픈 소스 전환 후 현재는 개발 중지 상태이다. 아래 설명 참조. 출처 [2] Git이 아니더라도 DVCS(분산 버전 관리 시스템)에 해당하는 Mercurial이나 Bazaar도 해당하는 사항이다. [3] 물론 프로그래밍을 업으로 삼거나 전공 수준 이상으로 학습하는 사람 중에서 GitHub 관리를 안 하는 사람은 드물지만, 입문자나 그동안 혼자 본인 컴퓨터의 로컬에서만 작업해 본 사람은 Git 사용법을 배우는 것 하나만으로도 골머리를 앓는 경우가 많다. [4] 구글에서 한 Git 강연 [5] https://www.zdnet.co.kr/view/?no=20170227105154