#Git이란 ?

Git은 컴퓨터 파일의 변경사항을 추적하고 여러 명의 사용자들 간에 해당 파일들의 작업을 조율하기 위한 분산 서버 관리 시스템 이다. 소프트웨어 개발에서 소스코드 관리에 주로 사용되지만 어떠한 집합의 파일변경사항을 지속적으로 추적하기 위해 사용될 수도 있다. 기하학적 불변 이론을 바탕으로 설계되었고, 분산 버전 관리 시스템으로써 빠른 수행 속도에 중점을 두고 있는 것이 특징이며 데이터 무결성, 분산, 비선형 워크플로를 지원한다.
Git은 현재 가장 널리 쓰이는 분산형 버전 컨트롤 프로그램(Distributed Version Control System, DVCS)중 하나이다. 저장소에서 프로젝트를 꺼내오면 내 컴퓨터에 저장소가 만들어지고 모든 변경 이력이 저장된다. 그리고 여러 곳의 원격 저장소를 등록항 사용할 수 있다. 커밋은 우선적으로 로컬 저장소에 기록되며, 원격 저장소에 저장하려면 푸쉬(Push)작업을 수행하면 된다. 원격 저장소의 변경사항을 내 로컬 저장소에 반영하려면 풀(Pull)작업을 수행한다.
*워크플로(workflow)는 작업 절차를 통한 정보 또는 업무의 이동을 의미하며, 작업 흐름이라고도 부른다. 워크 플로는 작업 절차의 운영적 측면이다. 업무들이 어떻게 구성되고, 누가 수행하며, 순서가 어떻게 되며, 어떻게 동기화를 시킬지, 업무를 지원하기 위한 정보가 어떻게 흐르는지 그리고 업무가 어떻게 추적되는지입니다. (작업의 흐름도, 작업 절차, 업무의 이동성)
#Git에서 일어나는 일, 주로 사용하는 용도
-똑같은 환경에서 시작(환경 설정)
서버개발자중 한명이 환경을 구성하고 모두 같은 환경에서 개발하여 불필요한 시간을 없애고 서로 주고 받는 와중에 일어나는 충돌을 최소화 한다. 프레임워크를 갖추고 공통으로 쓰는 코드들을 미리 넣어두고, 테스트 코드나 샘플코드들을 넣어주어서 프로젝트 개발 시작하기 전에 팀원 모두 같은 코드로 테스트할 수 있는 환경도 제공할 수 있다.
-내가 작업한 것을 로컬저장소에서 원격저장소로 밀어내거나(push) 원격저장소에서 최신 형상을 내 작업공간인 로컬저장소로 당겨온다.(pull)
-이전 형상으로 돌아가기
일반적으로 혼자서 로컬에서 개발하는 경우 단지 save를 함으로서 이전 기억은 남기지 않고 계속 현재의 형상만 계속 보고있거나 프로젝트를 복사 붙여넣기로 백업을 해두거나 정도의 매우 손이 많이가는 귀찮은 일들로 백업을 해두지만 git에서는 자신이 원하는 작업했떤 시점으로 다시 돌아갈 수 있다. 많은 실수를 하여 코드가 이미 돌이킬 수 없을 정도로 못쓰는 코드들을 많이 적어두는 경우 또는 이미 지웠지만 다시 생각해보니 꼭 필요한 코드들 때문에 불가피하게 돌아가야 한다면 git은 그것을 가능하게 해준다.
#Git의 장점
-소스코드를 주고 받을 필요 없이, 같은 파일을 여러 명이 동시에 작업하는 병렬개발이 가능하다.
-브랜치를 통해 개발한 뒤, 본 프로그램에 합치는 방식(Merge)으로 개발을 진행할 수 있다.
-분산 버전관리이기 때문에 인터넷이 연결되지 않은 곳에서도 개발을 진행할 수 있으며, 중앙 젖아소가 날라가버려도 다시 원상복구 할 수 있다.
-팀 프로젝트가 아닌, 개인 프로젝트일지라도 GIT을 통해 버전 관리를 하면 체계적인 개발이 가능해지고, 프로그램이나 패치를 배포하는 과정도 간단해진다(pull을 통한 업데이트, patch 파일배포)

#Git 관련 용어들
◎ 기본용어
-Repository
: 저장소를 의미하며, 저장소는 히스토리, 태그, 소스의 가지치기 혹은 branch에 따라 버전을 저장한다. 저장소를 통해 작업자가 변경한 모든 히스토리를 확인할 수 있다.
-Working Tree
: 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점
-Staging Area
: 저장소에 커밋하기 전에 커밋을 준비하는 위치
-Commit
: 현재 변경된 작업 상태를 점검을 마치면 확정하고 저장소에 저장하는 작업
-Push
: 로컬 저장소의 내용 중 원격 저장소에 반영되지 않은 커밋을 원격 저장소에 Commit내용을 업로드하는 것을 의미
-Pull
: 푸시와 반대로 원격 저장소에 있는 내용 중 로컬 저장소에 반영되지 않은 내용을 가져와서 로컬 저장소에 저장하는 과정을 의미. 이를 통해 다른 팀원이 변경하고 푸시한 내용을 로컬 저장소로 가져올 수 있다. 푸시 과정에서 충돌(Collision)이 일어나서 푸시가 거절된 경우, 풀을 통해 원격 저장소의 변경 내용을 반영한 뒤 다시 Push를 시도해야 한다
-Head
: 현재 작업중인 Branch를 가리킨다
-Branch (깃에서 가장 중요한 개념)
: 커밋을 단위로 구분된 소스코드 타입라인에서 분기해서 새로운 커밋을 싸을 수 있는 가지를 만드는 것, 혹은 그 가지를 branch라고 한다. 가지 또는 분기점을 의미하며, 일련의 작업을 독립적으로 만들기 위한 개념이다. 특정 시점(마지막 Commit)에서 여러가지 작업을 해야할 때, 여러 작업을 동시에 진행 할 수 있게 한다. 브랜치 중에 개발의 주축이 되는 브랜치를 마스터 브랜치(Master Branch)라 하며, 모든 브랜치는 마스터 브랜치에서 분기되어 최종적으로 다시 마스터 브랜치에 병합(Merge)되며 개발이 진행된다.
-Head
: 현재 작업중인 Branch를 가리킨다
-Merge
: 다른 Branch의 내용을 현재 Branch로 가져와 합치는 작업을 의미한다
◎ 주요 명령어
-git init
: 깃 저장소를 초기화한다. 저장소나 디렉토리 안에서 이 명령을 실행하기 전까지는 그냥 일반 폴더이다. 이것을 입력한 후에야 추가적인 명령어들을 줄 수 있다.
-git help
:명령어를 잊어버렸을 때 커맨드 라인에 "git help"를 치면 21개의 가장 많이 사용하는 깃 명령어들이 나타난다. 좀 더 자세하게 "git help init"이나 다른 용어를 타이핑하여 특정 깃 명령어를 사용하고 설정하는 법을 이해할 수 있다.
-git status
:저장소 상태를 체크한다. 어떤 파일이 저장소 안에 있는지, 커밋이 필요한 변경사항이 있는지, 현재 저장소의 어떤 브랜치에서 작업을 하고 있는지 등을 볼 수 있다.
-git clone
:원격 저장소의 저장소를 내 local에서 이용할 수 있게 그대로 복사해 가져온다
-git add
:이 명령이 저장소에 새 파일들을 추가하진 않는다. 대신, 깃이 파일들을 지켜보게 한다. 파일을 추가하면, 깃의 저장소"스냅샷"에 포함된다.
-git comiit
:깃의 가장 중요한 명령어이다. 파일을 수정한 후, 저장소의 "스냅샷"을 찍기 위해 사용하는 명령어이다. 보통 "git commit -m "Message hear." 형식으로 사용한다. -m은 명령어 다음 부분을 메세지로 남긴다는 뜻이다.
-git push
:로컬 컴퓨터에서 자업하고 당신의 커밋을 깃허브에서 온라인으로도 볼 수 있기를 원한다면, 이 명령어로 깃허브에 변경사항을 "push"한다.
-git pull
:로컬 컴퓨터에서 작업할 때, 작업하고 있는 저장소의 최신 버전을 원하면, "git pull"을 통해 깃허브로부터 변경사항을 다운로드할 수 있다
-git log
:커밋 내역을 확인해보고 싶을 때 사용하는 명령어이다.
-git branch
:여러 협업자와 작업하고 자신만의 변경을 원한다면 이 명령어로 새로운 브랜치를 만들고, 자신만의 변경사항과 파일 추가 등의 커밋 타임라인을 만든다. 새 브랜치를 "hello"로 지정하고 싶다면 "git branch hello"라고 쓸 수 있다
-git checkout
:현재 위치하고 있지 않은 저장소를 체크아웃 할 수 있다. 이것은 체크하길 원하는 저장소로 옮겨가게 해주는 탐색 명령이다. 만일 master브랜치를 들여다보고 싶으면, "git checkout master"를 사용할 수 있다.
-git merge
:브랜치에서 작업을 끝내고, 모든 협업자가 볼 수 있는 master브랜치로 병합할 수 있다. "git merge hello"라고 입력한다면 hello브랜치에서 만든 모든 변경사항을 master로 추가한다.
#Git을 호스팅해주는 웹 서비스들
버전관리 시스템을 지원하는 웹호스팅 서비스의 기능을 통해 push, pull, request같은 이벤트에 반응하여 자동으로 작업(배포 등)을 실행하게 할 수 있다.
깃 저장소를 서버대신 유지 및 관리해주는 서비스다. 다른 유저들과 함께 온라인으로 하나의 프로그램을 제작하는 것도 가능하며 많은 오픈소스 프로그램들이 Github를 통해서 전 세계 개발자들에 의해 제작되고 있다. GitHub는 현재 MS가 인수하여 모회사로 있고 주로 개인은 GitHub, 회사는 GitLab을 사용한다.



※ GIT GUI : 너무 많은 git명령어들을 자유자재로 외울 자신이 없을 땐 GUI를 사용할 수도 있다.
ex) GitHub Desktop, SourceTree, GitKraken(이쁨)
'잡담' 카테고리의 다른 글
| 2021.12.27~2022.01.02 모르는 내용 정리 (자주나오는 개념, 단어 등) (0) | 2022.01.03 |
|---|---|
| 스파게티 코드 (0) | 2021.12.30 |
| 개발자를 시작하면서 (TMI가득) (0) | 2021.12.27 |
댓글