본문 바로가기

What I Learnd

git & github으로 협업하기 (git 기초)

첫번째. SSH (Secure Shell) 셋팅하기

: 깃허브와 컴퓨터가 안전하게 통신을 주고받을 수 있는 방법

두개의 키(=암호)가 필요! -> 공개 키, 개인 키

  1. github open
  2. ssh-keygen [enter]  *공개/개인 키 만들어주기
  3. cat /c/Users/<my desktop>/.ssh/id_rsa.pub 
    cat 으로 지정해주고 공개 키 주소 입력
  4. 나오는 키 주소 전체 복사해서 내 깃헙 ssh에 붙여넣기!
    그러면 깃헙과 내 컴퓨터 통신 연결완료!


두번째. CLI 명령어 익히기

CLI : 명령어 기반 인터페이스 

pwd 현재 경로 확인하기
ls 현재 경로의 파일 및 폴더 조회하기
ls -al 현재 경로의 숨김 파일 및 폴더까지 모두 목록으로 조회하기
cd <경로> <경로>로 이동하기
cd .. 상위 디렉터리로 이동하기
cd . 현재 디렉터리로 이동하기
cd ~ 홈 디렉터리로 이동하기
touch <파일명> <파일명> 이름으로 비어 있는 파일 생성하기
cat <파일명> <파일명>의 내용 확인하기
vi <파일명> <파일명> 편집하기
rm <파일명> <파일명> 삭제하기
mkdir <디렉터리 이름> <디렉터리 이름> 생성하기
rmdir <디렉터리 이름> 비어있는 <디렉터리 이름>의 삭제하기
rm -rf <디렉터리 이름> 비어 있지 않는 <디렉터리 이름>의 삭제하기

gitHub?

: 원격 git으로 관리한 프로젝트를 호스팅하는 서비스!, 즉 원격 저장소 호스팅 서비스 + 개발자들의 SNS 

git config --global user.name "이름"
git config --global user.email 이메일

git config : Git의 설정을 변경하는 명령어

--global : 전역 Git 설정을 변경하겠다는 뜻. 이 플래그를 사용하면 Git에서 모든 저장소에서 사용할 기본 설정을 변경할 수 있으며 이를 생략하고 명령어를 실행할 경우 현재 저장소에 대한 설정만 변경된다.

user.name : Git의 설정 중 하나로 말 그대로 사용자의 이름 설정. 이 설정은 커밋을 할 때 Git이 사용자를 식별하는 데 사용된다.
user.email : Git의 설정 중 하나로 말 그대로 사용자의 이메일 주소 설정. 이 설정 또한 커밋을 할 때 Git이 사용자를 식별하는 데 사용된다.

위 명령어는 즉, Git 에서 사용자 이름을 "이름" / "이메일 로 설정하며, 이후 커밋을 할 때 커밋 기록에 "이름" 혹은 "이메일" 로 로 들어간다.


버전 관리 하는 법

깃은 작업 디렉터리, 스테이지, 저장소 이렇게 세가지 공간을 관리하는데,
스테이지와 저장소가 깃이 직접적으로 관리하는 "가상의 공간"이고, 작업 디렉터리는 버전관리의 대상이 위치하는 공간을 의미한다(.git이 있는 디렉터리). 

구체적으로는,
작업 디렉터리 = 버전 관리의 대상이 위치하는 공간
스테이지 = 다음 버전이 될 후보가 올라가는 공간
저장소 = 버전이 만들어지고 관리되는 공간


git 명령어 정리

git init 로컬 저장소 만들기
git status 작업 디렉터리 상태 확인하기
git add git add <스테이지에 추가할 대상> <스테이지에 추가할 대상> tmxpdlwldp dhfflrl
git add 모든 변경사항 스테이지에 올리기
git commit git commit 자세한 커밋 메세지와 함께 커밋하기
git commit --message "<커밋 메세지>"
git commit -m "<커밋 메세지>"
<커밋 메세지>로써 커밋하기
git log git log 커밋 목록 조회하기
git log --oneline 커밋 목록 한 줄로 조회하기
git log --patch
git log -p
커밋별 변경사항 목록 조회하기
git log --branches 모든 브랜치의 커밋 목록 조회하기
git log --graph 커밋 목록 그래프로 조회하기
git diff git diff 최근 커밋과 작업 디렉터리 비교하기
git diff --staged 최근 커밋과 스테이지 비교하기
git diff <커밋> <커밋>
git diff <이 커밋에 기준햇> <이 커밋이 뭐가 다른거지?> 라고 물어보는 것
<커밋> 끼리 비교하기~

git 브랜치의 이유

여러가지 수정사항에 대처하기 위해 각 수정영역에 따라 브랜치를 생성하여 각각 작업을 진행할 수 있게 하며,
이후 코드를 합치는 과정에서 같은 부분을 다르게 수정한 곳이 어딘지 확인이 용이하며 이를 확인 후 다시 하나로 합칠 수 있다.

브랜치는 버전의 분기 라고 생각하자.

master 브랜치 : 가장 기본적인, 최초의 브랜치를 의미한다.
master 브랜치를 기준으로 각 작업자의 브랜치들을 추가 생성하여 쌓아나간다.

예를 들면, 아래의 master 브랜치에는 커밋이 4개, bob 브랜치에는 커밋이 5개, amy 브랜치에는 6개, sam 브랜치에는 2개 쌓여있는 것! 이해필수

 

HEAD

  • 현재 작업 중인 브랜치의 커밋을 뜻한다.
  • 일반적으로는 현재 작업 중인 브랜치의 "최신 커밋"을 이야기하기도 한다.
  • 즉, "내가 지금 작업하고 있는 곳~"

CHECK OUT

  • 특정 브랜치에서 작업할 수 있도록 작업환경을 바꾸는 것을 뜻한다.
  • HEAD의 위치를 특정 브랜치의 최신 커밋으로 옮기는 것을 이야기한다.

MERGE

  • 브랜치를 합친다, 즉 병합한다는 것을 뜻한다.
  • *fast-forward merge 는?
    빨리감기 병합이라고 하는데, 뻗어나가던 한쪽 브랜치가 마스터로 바로 업데이트 되는 병합기법을 말한다.
    위의 그림을 예로 들면, mast 4번 커밋 위로 amy의 5번과 합쳐진 amy 5번 커밋과 6번 커밋이 fast-forward merge 기법으로 머지 되며 마스터 브랜치를 생성할 수 있다.
  • 하지만, 만약 bob 의 3, 4, 5 커밋과 마스터 커밋을 머지하고 싶다면?! bob, master 합쳐진 새로운 bob, master 커밋이 생성된다.
git branch git branch 브랜치 목록 조회하기
git branch <브랜치> <브랜치> 생성하기
git branch -d <브랜치> <브랜치> 삭제하기
git checkout <브랜치> <브랜치>로 체크아웃하기
git checkout -b <브랜치> <브랜치> 생성하고 체크아웃하기
git merge <브랜치> <브랜치> 병합하기

충돌 발생 시 대처법

예를 들어 bob의 5번 커밋과 master의 4번 커밋에서 동일한 라인을 서로 다르게 수정하여 머지한 경우, 충돌 발생!

결국 어쩔수없다. 어떤 브랜치의 내용을 반영할지 직접 보고 골라서 다시 커밋해야 한다.