Daily Front_Minhhk

[GIT] Git협업하기 본문

Code개발일지

[GIT] Git협업하기

Minhhk 2022. 11. 15. 22:11

학습 목표

  • 일반 디렉터리와 깃 리포지토리와의 차이점에 대해 설명할 수 있다.
  • git staging area에 대해서 설명할 수 있다.
  • git add로 git staging area의 내용을 변경할 수 있다.
  • git add와 git commit의 차이점에 대해서 설명할 수 있다.
  • git commit으로 로컬 깃 리포지토리에 코드 변경점을 기록할 수 있다.
  • 로컬 깃 리포지토리와 원격 깃 리포지토리 github 차이점에 대해 설명할 수 있다.
  • git clone이 원격 깃 리포지토리를 가져온다는 것을 이해한다.
  • git pull과 git push에 대해서 이해한다.
  • git pull과 git push로 로컬 깃 리포지터리와 원격 깃 리포지토리의 내용을 쉽게 주고받을 수 있다.

https://mylko72.gitbooks.io/git/content/

 

깃에 대하여 자세하게 설명이 되어있다! 참고

 

 


로컬 Git 리포지토리(Repository)란?

  • 우선 Git이란 개발자의 코드를 효율적으로 관리하기 위해서 개발된 '분산형 버전 관리 시스템'이다.
  • 그리고 Git에서 코드를 저장하는 공간을 리포지토리라고 한다.
  • 리포지토리는 자신의 컴퓨터의 작업 공간(local)에 위치한 로컬 Git 리포지토리와, Github 등의 원격(remote) 공간에 위치한 원격 리포지토리로 구분할 수 있다.

Local Git repository

로컬 Git 리포지토리(Repository)란?

  • 우선 Git이란 개발자의 코드를 효율적으로 관리하기 위해서 개발된 **'분산형 버전 관리 시스템'**이다.
  • 그리고 Git에서 코드를 저장하는 공간을 리포지토리라고 한다.
  • 리포지토리는 자신의 컴퓨터의 작업 공간(local)에 위치한 로컬 Git 리포지토리와, Github 등의 원격(remote) 공간에 위치한 원격 리포지토리로 구분할 수 있다.

git init

작업 공간에 local Git repository를 생성한다.

  • 일반적인 폴더에 Git repository를 추가하면 개발자는 Git을 이용하여 자신의 프로그램 버전 관리를 할 수 있다. Git repository를 추가하기 위해서는 git init 명령어를 입력하면 된다.

git add

Untracked files를 Staging area로 추가해서 Git의 관리하에 둠

  • 로컬 환경에 있는 디렉토리에 Git 리포지토리가 생성되었다면 이제 index.html, sytle.css의 변경사항을 Git으로 관리할 수 있다. 각각의 파일에 코드를 작성한 후, 이 코드를 하나로 모아두는 과정을 거치게 되는데 이 공간을 staging area라고 한다.

git status

staging area로 잘 옮겨졌는지 확인하는 명령어

  • staging area로 잘 옮겨졌는지 확인하기 위해서는 git status 명령어를 입력한다. 현재 디렉토리에 Git 리포지토리가 잘 설치되어 있다면, 해당 터미널에서 Git 리포지토리의 상태를 확인할 수 있다. 변경이 되었으나 staging area로 옮겨지지 않은 파일은 빨간색 글씨로 표시된다. 변경 사항이 staging area에 잘 옮겨졌다면 해당 터미널에 파일명이 초록색으로 표시된다.

Git 리포지토리 변경 사항 파악하기

  • staging area에 위치한 파일 내용이 추가로 변경된 경우, git status 명령어로 다시 현재 Git 리포지토리 상태를 확인할 수 있다.

git commit >> 아래 내용 참조~

  • staging area에 있는 파일은 commit이 가능하다.
- git add <경로명> : 경로에 있는 파일을 staging area로 넣는 명령어
- gir add . : 모든 변경 사항을 한번에 업로드,, 현재 경로를 뜻하는 .
- staging area : 온전히 저장하고 싶은 코드를 모아놓은 묶음
- commit
	- staging area의 코드 묶음을 저장하기로 결심하고 (git commit)
    - staging area 코드의 용도를 적어두는 행위 (커밋 메시지 -m "commit message")

commit의 원칙

  • commit은 작은 단위로 자주 하는게 좋다. Git commit 기록이 상세하게 되어있으면 아래와 같은 장점이 있다.
    • 코드를 잘못 적는 경우에, 이전 기록을 더 쉽게 복원할 수 있다.
    • 누가 해당 코드를 수정했는지 쉽게 파악할 수 있다.
    • merge, rebase등 기능에 날개를 달아주는 기반이 된다.
  • commit 메시지는 짧고 간결하게 사실적으로 작성한다. Git commit 메시지는 동료 개발자가 참고할 수 있기에 짧고 간결하고 사실적이여야 한다.
# Good: 기능(feat) 구현을 확인 가능, 정확한 기술 용어 사용, 짧고 간결함
git commit -m "feat: 인스타 게시글 조회 페이지네이션"

# Bad: 커밋 타입 구분 X, 만연체, 사실 여부를 판단하기 어려운 "효율성"에 대한 코멘트
git commit -m "더 효율적인 인스타 게시글 조회 기능 구현함"

# Very Bad: 어떻게 나은 형식인지 판단하기 어려움, 어떤 기능인지 확인이 어려움
git commit -m "좀 더 나은 형식"

Staging area란?

Commit 하기 전에 내용을 기록하는 장소

  • 늘 commit하기 전에 git status로 staging area의 상태를 확인하는 것이 좋다.

원격 Git 리포지토리란?

  • 원격 Git 리포지토리(줄여서 원격 리포지토리)는 자신의 컴퓨터(로컬 환경) 작업 공간에 위치하지 않는 Git 리포지토리이다.
  • 개발에 대해서 검색해보면 쉽게 접할 수 있는 Github의 여러 리포지토리가 대표적인 원격 리포지토리이다.
  • 공개된 Git 리포지토리의 경우, 여러 사람이 함께 공유 가능하다.

원격 Git 리포지토리 다루기

  1. Github에서 원격 리포지토리를 생성한다.
  2. 로컬 리포지토리에 원격 리포지토리 git url을 등록한다. (git remote add)
  3. 로컬 Git repository에 기록한 내역을 원격 Git repository에 push한다. (git push)

git remote add <name> <URL>

  • git remote add는 로컬 리포지토리에 원격 리포지토리 주소를 등록하는 명령어이다. 쉽게 원격 리포지토리를 파악하기 위해 이름을 지정해줄 수 있고, 이름 뒤에 원격 리포지토리 주소를 적으면 작동한다.
    • <name>: 앞으로 로컬 리포지토리에서 원격 리포지토리 주소를 대신할 이름
    • <URL>: 원격 리포지토리 주소

git remote -v 명령어로 원격 리포지토리가 잘 연결되었는지 확인합니다.

git push

git push 는 로컬 리포지토리에 기록한 내역을 원격 리포지토리로 옮기는 작업입니다. git push는 새롭게 생성한 원격 리포지토리에 기존 커밋 기록을 옮기거나, 기존 원격 리포지토리에서 일부 변경된 내용을 옮기는데 사용할 수 있습니다.

git push <remote> <branch>

다른 CLI 명령어처럼, git push 도 매개변수를 가질 수 있습니다.

<remote> 에는 원격 리포지토리의 이름을 입력하고, <branch> 에는 브랜치 이름을 입력합니다.

예를 들어, 로컬 리포지토리의 기록을 원격 리포지토리 origin의 main 브랜치로 push하려면 git push origin main 을 입력합니다.

git push로 원격 리포지토리에 로컬 리포지토리 변동 사항 업데이트하기

git remote add로 로컬 리포지토리에 원격 리포지토리 주소를 잘 등록했다면 이제 git push 를 할 수 있습니다.

git push -u origin main 명령어를 입력합니다.

이 명령으로 원격 리포지토리 origin의 main 브랜치에 로컬 리포지토리 main 브랜치 내용을 업데이트하게 됩니다.


Fork란?

  • 포크는 기존의 잘 만들어진 프로젝트에 변화를 주거나 새로운 것을 시도를 해보기 위해 리포지토리를 복사하는 것을 의미한다.
  • 기존의 프로젝트에 영향을 미치지 않기 때문에 서로의 프로젝트에 영향을 주지 않는다.
  • 또한 라이센스까지 함께 복사가 되기 때문에, 공개되어 있고 라이센스 명시가 제대로 되어있는 프로젝트는 라이센스만 잘 지키면 포크해도 문제가 없다.
  • 보통 Github 원격 리포지토리를 자신의 Github 원격 리포지토리로 포크한다.

포크 후 할 수 있는 일

  • 자신의 컴퓨터의 로컬 리포지토리로 git clone하여 따로 개발하기
  • (작업하기 위해 git clone + HTTPS, SSH 주소 값)
  • public 프로젝트에 버그 수정 및 기능 추가 요청 (push & pull request)
  • public 프로젝트에서 새로 업데이트 된 내용을 pull

종합 퀴즈

git reset HEAD^

git reset, revert로 이전 커밋으로 돌리기

reset, revert 차이 (revert 를 쓰자~ 링크 참조)

둘다 이전 커밋으로 되돌린다는 점에서는 동일하나

github 같은 온라인 저장소에 올라가 다른 사람간 코드 공유의 유(revert)무(reset)에 따라서 달라집니다.

 

https://kyounghwan01.github.io/blog/etc/git/git-reset-revert/#이-작업을-하는-이유

git remote

이제 다시 명령 프롬프트를 켜서 프로젝트 폴더로 갑니다. git remote가 바로 원격 저장소를 관리할 수 있는 명령어입니다.

git remote add origin https://github.com/[이름]/gitExample origin

이라는 이름으로 원격 저장소 주소를 등록합니다.

이제부터 origin이라는 이름을 사용하면 방금 전에 우리가 만든 저장소에 접속할 수 있습니다.

(굳이 origin이라고 안 하고 다른 이름으로 해도 됩니다.)

만약 origin이라는 원격 저장소를 지우고 싶다면 git remote remove origin하면 됩니다.

 

 

Github 에서 공동 프로젝트 Repository를 생성했어요. 각자의 Repository로 Fork 하고 clone 을 받았습니다. 내가 맡은 회원가입 기능을 구현하기 위해서 feat/signup 이라는 브랜치를 생성하고 해당 브랜치로 이동해 볼까요?

git checkout -b feat/signup

(브랜치 생성과 이동 동시!!)

 

 

구글 로그인 기능도 추가를 해 보려고 시도하다가 어려워서 그만두었습니다. 작업하던 코드를 잠시 다른 공간에 저장해 둘 방법이 있을까요?

git stash

// 현재 작업 파일 스태시에 저장
git stash

// 특정 이름으로 스태시 저장
git stash save NAME

// stash list
git stash list

// 가장 최근 stash 가져오기
git stash apply

// n번 stash 가져오기
git stash apply stash@{n}

// n번 stash 지우기
git stash drop stash@{n}

// stash 모두 지우기
git stash clear

http://megaton111.cafe24.com/2018/04/12/git-stash/