Git/개념과 용어정리 8

Backup

각 브랜치나, 각 커밋과 같은 정보는 .git 디렉토리에 담겨져있고 현재 디렉토리는 현재 버전의 파일들이 담겨져있다. 만약, 컴퓨터의 고장으로 모든 데이터가 날아간다면 아마 되돌릴수 없을것이다. 이럴때 사고 예방으로 백업을 생각할수 있다. 백업의 방식으로는 별도의 저장공간이 필요한데 별도의 원격 저장소를 구현하고 관리하기는 굉장히 어려움이 따른다. 이러한 저장공간을 Git에서 별도로 제공해주는데, 이러한 임대서비스를 Git Hosting 이라고 한다. 이러한 서비스를 이용해서 현재 진행중인 중요한 프로젝트를 파일 뿐만아니라, 이전 버전들의 정보까지 다른 컴퓨터에 저장해둘수도 있고 필요한경우라던가 프로젝트를 소실한경우 다시 가져다 꺼내올수도 있다. 이처럼 원격저장소에 프로젝트를 저장해두면 프로젝트를 다시 ..

Git 2way merge 와 3way merge

기본 메인 브랜치의 상태이다. C2 의 커밋에서 각 브랜치를 2개를 생성했다. 이후 각 브랜치마다 표의 내용처럼 내용을 변경한뒤 커밋을 진행했다. T1-2 의 커밋과 T2-2 커밋을 병합하려고 한다. 이때 병합방식으로는 2way merge 와 3way merge 방식이 있는데, 먼저 2way merge의 방식을 보면 단지 2개의 커밋을 비교하는 방법이다. 병합 하려는 대상끼리 비교를 해 병합을 진행한다. 맨위부터, A끼리는 서로 변경된 내용도없고 내용도 같으므로 그대로 병합을 진행 B, 내용이 사라짐 - 깃에서는 내용 B를 남겨야하는지 비워야하는지 모름 (충돌) E,C 또는 G,M - 깃에서는 내용 어떤쪽의 내용을 남겨야하는지 비워야하는지 모름 (충돌) 이제 3way merge 방식을 보자 맨위부터, A..

Merge 병합

각 브랜치들중에서 그대로 고유한 버전으로 남겨둘수 있지만, 위의 그림처럼 3-A1 의 기능을 5 버전에 추가시켜할수도 있다. 이럴때 merge 로 병합을 시킬수 있는데, 병합될때는 충돌이 일어날수 있음을 알고있어야한다. 병합이 자동으로 이루어지는경우 서로 다른 파일들간에는 충돌이 일어나지 않는다. 같은 파일이더라도 만약 같은부분을 수정하지 않았다면 충돌이 일어나지 않는다. 병합 중 충돌이 일어나는 경우 같은 구간에서의 수정이 일어나게되면 깃은 충돌된 구간이 있음을 알려준다. 잘못된 구간이 있다면 답글남겨주세요

Branch 브랜치

프로젝트를 진행중이며, A B C 순으로 프로젝트가 커밋되었다. 이후 여러가지 버전을 만들어줘야한다고 하면. C 까지의 결과물을 토대로 진행해야하므로 위 그림처럼 파일을 통으로 복사한뒤 작업을 이어가는 방법도 있다. 다만 윗줄의 C 를 수정했을때, 아랫줄의 C 는 수정사항이 반영되지 않는다. C 까지의 결과물은 하나지만 이후의 버전을 별도로 뽑아줘야한다. 이러한 형태로 작업을 쭉 이어가면 다음과 같은 형태가 된다. 이렇게 각 분기를 만들어 내는것이 Branch 라고 한다. 이후 각 버전별 작업은 독립된 작업으로 서로에게 영향을 주지 않는다. 위의 ABCDEF 순으로 커밋된것을 Main Branch 라고하며 이 줄기의 뼈대 라고 보면되며 분기로 나눠진 C는 각 브랜치의 base 라고 칭한다. C-1.1 의..

Working Tree 와 Staging Area

Repository 는 각 버전을 저장하는 저장소로 알고있다. 그럼 각 버전이 어떤과정으로 버전이 만들어지는지 알아보자 간단히 말해 Working Tree 는 버전을 만들기 전 작업공간으로 작업자가 실질적인 수정사항을 반영하는 곳 이라고 보면된다. Staging Area 는 작업자가 워킹트리에서 작업한파일을 이제 저장소로 보낼 준비를 하는 곳 이라고 보면되겠다. Working Tree 실제 작업하고 있는 로컬 디렉토리의 현재 상태를 의미 작업자는 이 워킹트리에서 파일을 수정, 추가, 삭제할수 있고 워킹트리에서의 모든 작업은 아직은 임시적인 상태로 볼수있다. Staging Area Commit 을 위해 변경사항을 저장하는 곳이다. 워킹 트리에서 변경된 파일들 중 Git에게 원하는 파일만 선택해 Stagin..

Git - Commit 과 Snapshot

위의 사전적의미로는 저지르다 라고한다. 조금 위험한듯한 느낌을 받을수 있지만, 그렇게 틀린말은 아닌것같다. 다른 동사로는 저장하다 라는 의미를 가지고 있다. 무언가 저질렀을때의 상황을 보면 저지르다 라는건 상황은 이미 벌어졌고 다시 돌이킬수 없는듯한 상황이 그려진다. 그렇다면 대강 뜻은 저장은 하지만, 바꿀순 없다라고 생각하면 될것같다. 리포지토리에 수정사항을 이처럼 Commit 한다는것은 기록에 추가되고 한번 생성된 커밋은 변경할수없게 된다. 커밋을 하게되면 해당 시점에 변경사항과 소스 코드를 캡쳐처럼 저장해야하는데, 이러한 순간을 저장하는것은 스냅샷 이라고한다. 이러한 스냅샷은 버전기록을 남기고, 시간이 지남에 따라 코드 변경사항을 추적해야할때 스냅샷을 이용해 다시 특정시점으로 되돌릴수있게된다. 잘못..

Git 저장소 Repository

깃의 저장소는 두가지 로컬 저장소와 원격 저장소로 나눠진다. 로컬 저장소는 내 PC 같이 개인의 저장소에 저장해둘수 있는곳을 의미한다. file 하나를 저장했다고 치자. 작업을 이어가던 도중 집에 번개를 맞는바람에 컴퓨터가 먹통이 되어버렸다. 한달동안 작성했는 파일이 한순간에 날아가는 불상사가 벌어지고 말았다. 만약, 작업자가 다른 컴퓨터나, 클라우드같은 저장소에 저장해뒀다면 어떨까 이렇게 작업자가 원격으로 자료를 저장하거나, 또는 가져올수있는 저장소를 원격 저장소라고 한다. 이렇게 각 작업자의 환경에서 자료를 수정, 추가 작업을 한 뒤 원격 저장소로 저장시키는 작업을 하거나, 원격 저장소에서 작업된 자료를 가져올수 있게됨으로 협업이 이루어지는 과정을 알수 있다. 잘못된 내용이 있다면 답글 남겨주세요

Git - 깃이란?

깃은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 스냅샷 스트림 기반의 분산 버전 관리 시스템이다. 간단히 말하자면 분할적으로 버전을 효율적으로 관리할수있는 도구를 의미한다. 이러한 도구가 왜 필요할까? 위와 같은 상황으로 설명이 된다. 언제 어떤 작업을했었는지, 어떤 내용이 언제 추가했는지, 언제 삭제됐는지 같이 자료가 바뀌게 됨으로 헷갈리게 되는 상황이 발생될것이다. 프로그래밍 코드는 한 프로젝트 내에서 협업하는 개발자들끼리 서로 수정하는 사항이 굉장히 많을것이다. 누가 언제 뭘했는지 일일이 물어보고 다닐수도 없다. 이렇게 다수의 인원 혹은 개인이 버전을 관리하는데에 있어 도움을 주는것이 Git 이다. Git 의 주요기능 ① 버전관리 위의 상황처럼 문..