Git
모두가 행복한 GIT똥찬 개발

우리가 Git 을 사용해야 하는 이유?
▶ 소스코드나 작업물을 관리할 때 편리하기 때문입니다.
Git 이란?
● Git은 분산형 버전관리 시스템 입니다. (Distributed Version Control System)
버전 관리 시스템이란? (Version Control System)
● VCS은 사용자 프로젝트에 포함된 파일의 변경 내역을 추적할 수 있도록 하는 도구 또는 방법론입니다.
▶ 가장 단순한 버전 관리 시스템

소프트웨어 형상관리
SoftWare Configuration Management 줄여서 SCM이라는 단어를 쓰기도 하는데, SW 개발 및 유지 보수 과정에서 발생하는 소스코드, 문서, 인터페이스 등 각종 결과물에 대한 형상을 만들고 이를 형상에 대한 변경을 체계적으로 관리, 제어하기 위한 활동입니다.
형상관리는 일반적으로 version control, revision control, source control, source code management, SCM 등 동일한 의미로 사용됩니다.
버전관리 시스템(VCS) vs 분산형 버전관리 시스템(DVCS)

▶ 기존 버전 관리 시스템은 중앙 서버에 소스코드와 history를 직접 저장하는 방식
▶ 분산 버전 관리 시스템은 여러 개발 PC와 저장소에 분산해서 저장하는 방식
중앙집중식 버전관리 - SVN(Subversion)
▶ 각 개발자만의 version history를 관리할 수 없다.
▶ commit 한 내용에 실수가 있을 시에 서버에(다른 개발자에게) 바로 영향을 미치게 되고 만약 중앙 서버에 문제가
생기면 협업이 불가능
분산형 버전관리 - Git
▶ 모든 작업자가 원본을 가질 수 있다.
▶ 개별 history를 관리할 수 있기 때문에 네트워크를 사용하지 못하는 상황에서도 대부분의 작업 진행이 가능하다.
Git은 누가 만들었을까요?
리눅스의 창시자인 리누스 토발즈가 Linux 커널을 관리할 목적으로 개발되었다.
Git 저장소 만들기
저장소(Git repository) - 파일이나 폴더를 저장해 두는 곳
▶ Git은 원격 저장소와 로컬 저장소 두 종류의 저장소를 제공합니다.
▶ 원격 저장소(Remote Repository): gitHub와 같은 전용 서버에서 관리되며 여러 사람이 함께 공유하
기 위한 저장소
▶ 로컬 저장소(Local Repository): 내 PC에 파일이 저장되는 개인 전용 저장소

반드시 기억해야 할 3 상태 - 논리적인 구분

Git bash를 사용합시다
▶ git bash는 window의 cmd , linux와 mac의 terminal 과 같은 역할을 한다.
▶ Git bash를 이용하면 window 에서도 리눅스의 명령어를 쓸 수 있다.

깃 순서
1.저장소 생성하기 --> git init
2.감시하고 있는 파일 상태 --> git status
3
git 프로그램에 사용자 정보 설정
git config --global user.email "email@naver.com"
git config --global user.name "blabla"
4.
파일에 상태 변경
추척을 선택(git add 파일명.확장자)
그 시점에 현 상태를 스냅샵 찍어서 보관
git commit -m'로그인 기능 완료';
5
기록된 로그를 확인하기
git log
git log --oneline
6
git hub 저장소 생성 후 연결 방법
6_1. 저장소 부터 만들고 셋팅한다.
6_2. 기존 코드에 저장소를 연결 한다.
7
gitignore.txt --->파일명 변경 ---> .gitignore
gitignore.txt 파일은 절때 스펠링이 틀려서는 안된다!!!
1. 깃이그노어 홈페이지로 이동한 뒤

2. 검색창에 windows, macOS, Eclipse 를 생성한다
3. Ctrl a + c + v로 gitignore.txt 파일에 붙여 넣은뒤
3. gitignore.txt 파일을 .gitignore 로 변경한다
4. git bash 다시 키면 bin 폴더와 settings 폴더가 사라진다
5. Git hub 홈페이지로 가서 코드 주소창을 복사 해준다

6. $git colne 주소를 입력해주면 복사가 된다!
Git 명령어
● init
: git init 명령어를 수행하면 숨겨진 폴더 .git 이 생성됩니다. 이것을 저장소라고 하는데 깃은 이 폴더의 모든 변경 내용을 여기에 저장합니다. 즉 .git 폴더를 지우면 더 이상 깃으로 폴더의 변경사항을 추적할 수 없습니다.
● status
: 깃이 폴더의 현재 변경 상태를 보는 명령어입니다.
● reset
: 스테이징 된 (add 취소) 파일을 취소할 수 있습니다.
▶ 폴더의 전체 변경 사항을 취소할 수도 있습니다.
● commit
: 깃이 폴더의 변경 내용을 저장하는 단위를 "커밋(commit)"이라고 부르는데, add 명령어 이후 Staging Area 상태에 등록된 파일들만 commit 을 할 수 있고 명령어 실행 후에 Repository에 저장된다.
▶ 매번 변경사항을 스테이징하고 커밋 하는 게 번거롭다면 -a 옵션을 사용하자.
● log
: 스테이징을 거쳐 커밋 한 결과를 로그(log)라는 형식으로 확인합니다.
▶ 많은 로그를 한 줄로 편하게 보기 위해서 --oneline 옵션도 자주 사용합니다.
GitHub에서 원격 저장소 만들기
● Create repository

원격 저장소를 내 PC로 가져 오기
▶ HTTPS 방식으로 가져 오기
▶ SSH 방식으로 가져 오기
● Clone
: 사용할 위치를 지정하고 Git Bash를 열어서 원격지에 생성된 저장소를 복제할 수 있습니다.
원격 저장소에 작업물 공개 하기
▶ SSH Key를 만들고 public key를 GitHub에 등록을 해 봅시다.
(Secure Shell)는 원격지 호스트 컴퓨터에 접속하기 위해 사용되는 인터넷 프로토콜이다.
GitHub 접속할 때 비밀번호 대신 key를 제출하는 방식이다.
● Git Bash에서 명령어 ssh-keygen 을 입력해주세요

▶ 생성된 private, public key

▶ 생성한 공개키를 GitHub에 등록해야 합니다. (profile -> Settings -> SSH and GPG Keys)

● push
파일을 새로 생성 또는 작업 후 add, commit 을 마치고 원격 저장소로 작업물을 공개할 수 있습니다.
▶ SSH 키 등록 후 원격 저장소(Git Hub)에 처음 push를 한다면 다음과 같은 문구를 확인할 수 있습니다.

● pull
원격 저장소에서 로컬 저장소로 소스나 변경된 파일을 가져오는 명령어입니다.
브랜치 만들어 보기

▶ 깃에서 중요한 또 하나의 개념은 "브랜치(branch)"입니다.
▶ 깃은 기본적으로 master(main)라는 이름의 브랜치 하나를 가지고 있습니다.
● branch
▶ 로컬 저장소에 있는 현재 브랜치 목록을 보여 준다.
● checkout
▶ 깃에서 브랜치 간 이동은 "checkout"라고 표현합니다.
● log --graph
▶ 현재 repository의 작업 흐름(branch, commit, merge)에 대하여 알아보기 쉽게 그래프로 보여 줍니다.
병합하기(merge)

▶ feature 브랜치에서 개발을 완료 후 커밋하고 다시 원래 작업하던 곳으로 가기 위해서는 main 브랜치에
반영해야 한다. 이것을 merge이라고 부릅니다.
▶ 단 기준이 되는 main 브랜치로 이동한 뒤, feature 브랜치를 main에 merge 해야 합니다.
● merge
HEAD
▶ 위치를 좀 더 정확하게 보여주는 정보가 있는데 바로 "머리(HEAD)"라고 부르는 것입니다.
▶ 헤드는 여러 가지로 뻗어있는 브랜치와 커밋 목록에서 현재 위치를 보여 줍니다.
▶ 현재 위치(HEAD)에서 한 단계 과거로 가능 명령어 입니다.
▶ 현재 위치에서 해당하는 숫자만큼 과거로 갑니다.
▶ HEAD 대신 커밋 hash를 사용할 수도 있다. (콕 집어서 이동합니다)
● 다시 최신으로 돌아오고 싶다면
Git Bash에 익숙해 졌다면?

실무에서 사용하는 Git 사용 전략
