
git
버전 관리 도구
github
인터넷상(원격)에서 깃으로 관리한 프로젝트 호스팅(관리) 서비스
sourcetree
깃을 편히 쓰는 도구
git 명령어
기본 배경 지식
CLI 명령어 기반 인터페이스
윈도우 : git bash
명령어는 암기가 아닌 숙달의 대상 (더블클릭과 같다)
pwd - 현재 경로 확인하기
ex) 내pc - c드라이브 - ~
1) 절대경로
2) 상대경로 : 점으로 나타냄 상위경로는 쩜쩜
ls 현재 경로의 파일 및 폴더 조회
ls -a 숨김 파일 및 폴더까지 조회
ls -al 리스트형태로 자세하게 조회
=> 파일 이름 맨 앞에 점이 붙어있다. ex) .hello
clear 화면 비워라
cd <경로> <경로>로 이동하기
cd .. 상위 디렉터리
cd . 현재 디렉터리
cd ~ 홈 디렉터리로 이동 (명령어창이 열렸을 때 기본 경로)
touch 파일명.확장자명 - 파일 생성
cat <파일명> - 파일 내용 확인
vi <파일명> 편집하기 (중요)
ex)
touch a.txt
vi a.txt
a or i를 눌러서 입력모드로 바꿔야 입력 가능
빠져나오기 ESC
:w 저장
:q 닫기
:wq 저장하고 닫아라
rm (파일명) 파일 삭제 : remove
mkdir <디렉터리 이름> 폴더 생성 : 메이크 디렉터리
rmdir <디렉터리 이름> 폴더 삭제 (비어있는 폴더만 가능)
rm -rf <디렉터리 이름> 강제로 폴더 삭제
깃 & 깃허브
깃이 없는 세상
왜 깃을 배워야 할까?
변경내역 확인, 작업 되돌리기, 협력★이 어렵다.
우리, 변경사항(버전)을 조금 더 일목요연하게 관리해보자!
git : 버전(commit) 관리를 위한 도구
개발자 입장에서의 버전 : 유의미한 변화가 결과물로 나온 것
새 기능 추가 / 버그 삭제 / 수정
프로그램 개발 : 유의미한 변화를 쌓아 프로그램을 만들어나가는 것
git : 변경 내역들을 기억하며, 필요하다면 작업을 되돌리며,
여러 명의 코드를 쉽게 나누고 합친다
github
원격 저장소 호스팅 서비스
인터넷 상에서 깃으로 관리한 프로젝트 호스팅 서비스
개발자들의 SNS
git config --global user.name or email " "
git config -l 확인
깃이 관리하는 세 개의 공간
작업 디렉터리
workingtree
버전 관리의 대상이 위치하는 공간
.git이 있는 디렉터리
↓ add
깃이 관리하는 가상의 공간 ( 눈으로 볼 수 없음)
스테이지
index
다음 버전이 될 후보가 올라가는 공간 (유의미한 변경사항)
↓ commit -> 버전 (유의미한 변경사항이 결과물로 나온 것) or 버전을 만들다
저장소
repo
버전이 만들어지고 저장되는 공간
로컬 저장소
내 컴퓨터 속에만 존재하는 저장소
원격 저장소
인터넷 세상 어딘가에서 관리되는 저장소
작업 디렉터리 내에서 변경사항 생성
스테이지로 add
저장소로 commit
로컬 저장소 만들기
git init
작업 디렉터리 상태 확인
git status
스테이지에 추가
git add <스테이지에 올릴 대상 대상 대상>
git add . 모든 변경사항 스테이지에 올리기
스테이지에서 내리기
변경사항을 버전으로 만들 때 커밋메시지를 남겨야 됨 (뭐바꿈 왜만듬 버전 설명 자세하게!)
git commit 자세한 커밋 메시지와 함께 커밋하기
git commit --message "<커밋 메시지>" 커밋메시지로써 커밋하기(본문 생략)
git commit -m "<커밋 메시지>"
#b.txt?
git log 내가 만든 버전 보기
내가 만든 커밋 간단하게 보기
git log --oneline
긴 커밋 메시지의 앞부분만 따옴
git log --patch/-p 커밋별 변경사항 목록 조회
git diff
내가 최근에 만든 커밋과 현재 작업디렉토리를 비교해서 보여줌
스테이지로 올리면 조회 불가
git diff --staged 최근 만든 커밋과 스테이지 비교
git diff <커밋1> <커밋2> 커밋끼리 비교
커밋의 순서★에 따라 내용이 달라짐
커밋1에 비해 커밋2가 뭐가 달라?
브랜치 관리하기 - 깃이 존재하는 이유, 깃의 꽃
나뭇가지
나무가 가지를 치는 것 처럼 버전이 여러 갈래로나뉘어 만드는 것 (서로 무관해짐)
브랜치는 버전의 분기
쌓아올리다가 합칠 수도 있음
브랜치가 없다면?
쇼핑몰 코드
A 장바구니 기능 추가
B 주문 목록 기능 추가
서로 작업과 전혀 관련 없는 부분. 같은 코드를 다르게 수정한 부분 혼재 (=충돌)
일일이 수작업으로 합쳐야 함
코드를 합치다 실수가 발생할 수 있음
시간이 흐르면 요구사항은 1000개가 넘어갈 정도로 많아짐
브랜치로 버전의 분기를 관리하는 방법
1. 브랜치를 나눈다
2. 각자의 브랜치에서 작업한다
3. (필요하다면) 나눈 브랜치를 합친다
4. 같은 부분을 다르게 수정한 부분만 보면 된다
최초의 브랜치 (=master 브랜치 or main 브랜치 (2018년 이후로 권고, 설치시 체크))
git branch 브랜치 확인
git branch <새 브랜치 이름>
새 브랜치 생성
got checkout(switch?) <브랜치 이름>
작업환경을 다른 브랜치 이름으로 바꾼다
git branch -d 브랜치이름 (체크아웃 되지 않은 브랜치만 삭제 가능)
HEAD 포인터
현재 작업 중인 브랜치의 커밋
일반적으로 현재 작업 중인 브랜치의 최신 커밋을 가리킨다
한 마디로 내가 지금 어디에서 작업 중인가
체크아웃
특정 브랜치에서 작업 할 수 있도록
브랜치를 합친다 == 브랜치를 병합(merge)한다
병합의 두 가지 방법
git merge
새로운 커밋X
받아들이기만 함 (빨리감기 병합)
foo 브랜치가 뻗어나오고 쌓이고 병합되는 순간까지 master 브랜치는 가만히 있었다.
마치 빨리감기하듯 foo브랜치에서 추가된 커밋을 반영하기만 하면 된다
빨리감기 병합
새로운 커밋O
bar 브랜치에는 없는 커밋이 master 브랜치에 있고, master 브랜치에는 없는 커밋이
bar 브랜치에 있는 상황
두 브랜치를 병합한 새로운 커밋 생성
커밋메세지를 만드는 창으로 간다
git check out -b bar
새로운 bar 브랜치를 만들고 체크아웃 해라
git commit -- amend 커밋메세지 수정
충돌 해결하기★
소스트리
로컬 저장소 만들기
만든 저장소에 파일 넣기
스테이지에 올리기
아래에 커밋메세지 작성 후 추가
커밋 해시
각각의 버전을 지칭 할 수 있는 고유한 정보

[짧은 커밋해시]
태그
특정 커밋을 좀 더 가독성 있게 지칭 할 때 사용
ex) 여러 개의 커밋 중
ㅇ
ㅇ
ㅇ
ㅇ
ㅇ< v1.0.0
ㅇ
ㅇ
ㅇ
ㅇ< v1.0.1
버전끼리 비교하는 방법
ctrl + a로 선택해서 비교
우클릭 + 선택한 버전 열기로 특정 버전 파일 확인 가능
작업되돌리기 : 빈번하게 발생
만든 버전을 되돌리는 방법
1. revert
버전을 되돌린 새로운 버전 만들기
1000번째 -> 999번째로 가고싶으면
999번째와 같은 1001번째를 만든다
= 우클릭, 커밋 되돌리기
하나의 버전이 만들어지는 과정
a) 작업 디렉토리에서 변경 사항 생성하기
b) 스테이지로 추가하기
c) 저장소로 커밋하기
1) soft
c만 되돌리는 것
2) mixed
b까지 되돌리는 것
3) hard
a까지 되돌리는 것
=> 우클릭, 이 커밋까지 현재 브랜치를 초기화
작업 내용 임시 저장
스태시
버리긴 아깝고 쓰긴 아쉽다
브랜치
이름 짓는 국룰 - 목적에 맞게 지어라
HEAD
체크아웃(checkout)
브랜치를 합친다
merge
fast-forward-merge
충돌
병합하려는 두 브랜치가 같은 내용을 서로 다르게 수정한 상황
브랜치의 재배치
리베이스
마스터 2에서 생긴 foo 브랜치를 마스터4 브랜치로 옮겨보자
foo 브랜치로 체크아웃 하고 베이스를 옮기고자 하는 커밋에 마우스 오른쪽 버튼, 재배치
충돌 발생 가능-> 충돌해결은 같은 방법으로 하면 된다.
Github
a) 개발자들의 SNS
b) 원격 저장소 호스팅 서비스
깃허브로 협업하기 ★
원격 저장소와의 네 가지 상호작용
원격 저장소 브랜치 이름
a) 클론(clone)
b) 푸시(push)
c) 패치(fetch)
d) 풀(pull)
git remote add origin git@github.com:2topin/test-repo.git
git branch -M main 브랜치 이름 변경
git push -u origin main 푸쉬, -u는 없어도 된다.
-u를 한번만 넣고 사용하면
풀 리퀘스트
내가 소유하지 않은 원격 저장소에 푸시 할 수 있나?
권한을 주지 않는 이상 불가능
원격저장소가 내 변경사항을 Pull하도록 요청을 보내는 방식
다 같이 푸쉬하면서 협업 하는 것은 좋지 않다.
풀리퀘스트 자체가 코드논의의 장이 된다.
풀리퀘스트를 이용하면 기록이 남는다.
포크한 저장소를 클론하기
브랜치 생성 후 생성한 브랜치에서 작업하기
tegongkang@gmail.com