C 언어
Cpp 언어
Kotlin
Android App
알고리즘
Git/CI/CD
Git 개요
Git이란?
리누즈 토발즈가 Linux Source를 관리하기 위해 만든 형상관리 툴

Git의 특징
 - 다른 버전 관리 툴과는 달리 네트워크에 접근하거나 중앙 서버에 의존하지 않는다.
 - 로컬 내에 git 작업 디렉토리를 두고 있으며, 이는 전체 기록과 각 기록을 추적할 수 잇는 정보를 포함하는 완전한 형태의 저장소이다.
 - Git은 각 파일을 세 가지 상태, Commited, Modified, Staged 로 구분하여 관리한다.
State Locate 설명
Commited Git Directory Git Directory 데이터가 로컬 데이터베이스에 저장된 상태
Modified  Working Directory(*) 수정한 파일이 아직 로컬 데이터베이스에 저장되지 않은 상태
Staged  Staging Area(index) Staging Area(index) 현재 수정한 파일이 곧 Commit할 상태
 - Working Directory 안의 파일들은 아래 네 가지 상태,  Untracked / Unmodified / Modified / Staged 로 구분하여 관리한다.
Tracking State 설명
Untracked Untracked 새로운 파일이 추가된 상태. (이전 Snapshot에는 없는 파일의 상태)
Tracked Unmodified 아무런 수정이 없는 상태 (Clean한 상태)
Modified 파일이 수정된 상태.
Staged Staging된 상태. (git add에 의해서 Staging Area로 들어간 상태. Commit으로 변하기 직전!)


Git Concept
 - DVCS(Distributed Version Control System)이다. -> 개인이 서버이자 클라이언트가 될 수 있다.
 - Snapshot으로 데이터를 저장하고 Checksum으로 데이터를 관리한다.
 - Checksum은 SHA-1 Hash를 사용하여 파일의 내용이나 디렉토리 구조를 사용한다.
   예 : fe59f1fffadf27b48545ce96e1a2f43981798883
 - Push를 제외한 모든 작업은 Remote Repository에 어떠한 영향도 끼치지 않는다.
 - Commit을 만드는 것이 자신의 수정사항을 Remote Repository에 반영하는 것이 아니다.
 - Push(또는 Upload)하지 않는 이상, 자신의 Working Directory에 남아있는 것이다.
   즉, 자신의 Working Directory에서는 어떠한 작업을 해도 상관이 없다.

Git 주요 용어 정리

용어 설명
저장소 (Repository) 작업자가 변경한 모든 내용을 추적하는 공간
작업 트리 (Working Tree) 저장소를 어느 한 시점을 바라보는 작업자의 현재 시점이다.
체크 아웃 (Checkout) 작업자의 작업트리를 저장소의 특정 시점과 일치 하도록 변경하는 작업
스테이징 영역 저장소에 커밋하기 전에 커밋을 준비하는 위치. 인덱스 영역이라고도 한다.
(변경사항을 적용하기 전에 한번 더 변경사항을 정리하고 다듬을수 있는 기회를 제공한다. 변경사항을 추가하기 위해서는 git add 를 사용한다. 커밋 예정인 변경사항이 있다고 보면 된다.)
브랜치(branch) 특정 Commit을 가리키는 포인터이며 변경이 가능하다.
브랜치라는 것은 하나의 개발 라인을 의미 한다. 한개의 프로젝트에서도 여러개의 개발 라인이 존재 할 수 있다. 

가장 기본이 되는 master branch에서 버그 수정이나 특정 기능을 추가하기 위해서 개발라인을 따로 두고 작업할 수 있다.
이러한 브랜치에는 HEAD(branch head)라는 것이 있는데 이는 한개의 브랜치 내에서 가장 최근에 커밋이 된 reference이다. 예를 들면 branch apple에 3개의 commit이 있는데 이중에 가장 최근에 추가된 커밋이 HEAD가 된다.
태그(tag) 특정 Commit을 가리키는 포인터. 단, 한 번 설정되면 변경할 수 없다. (포인터 상수 개념)
HEAD 현재 작업 중인 git에서 사용중인 Branch를 가리키는 포인터.
master master 브랜치는 복사해온 저장소 내의 HEAD의 복사본이다.
origin  origin 은 단지 git가 복사해 온 저장소를 가리키기 위해 기본적으로 사용하는 이름
   


참조 Site
1: http://rogerdudler.github.io/git-guide/index.ko.html
2: https://backlog.com/git-tutorial/kr/intro/intro1_1.html
.