Git 

소스코드를 효율적으로 관리하기 위한 형상 관리 도구

분산형 버전 관리 구조로서 서버에 접속하지 않아도 개인 레포를 통해 작업 가능

<git의 기본 작업 영역>

  • 작업 디렉토리: 현재 PC에서 작업을 진행중인 디렉토리
  • 스테이징 영역: 작업 내용이 저장되는 임시 공간. Git에 의해 추적 관리됨(add명령어)
  • 로컬 저장소: 커밋이 영구적으로 저장되는 영역. clone한 커밋들이 존재함

  • Git 기본 플로우: Remote 저장소를 로컬로 Clone → 작업(add, commit)→ 로컬에 저장 →  Remote 저장소로 push

Github

1. Git 프로젝트 원격저장소의 효율적인 관리를 지원하며 오픈 소스 프로젝트 생태계 확장에 기여하고 있는 웹 기반 플랫폼 서비스.

개인 Private저장소를 운영 하는 것 외에는 무료.

  • 저장소 관리
  • 코드 공유, 리뷰
  • 이슈 관리
  • 팀원 관리

 

Git기본 환경 설정

git 설치 후 git bash에서 사용자 이름, 메일 등록

git config --global user.name "name"

git config --global user.email "email address"

 

설정 정보 확인

git config --global --list

 

로컬 저장소 초기화 

git init

해당 명령어로 저장소가 초기화 되며 변경 파일들을 추적/관리할 수 있는 . git폴더가 생성됨

본인의 로컬 저장소를 원격 저장소와 연결(기본 브랜치 이름: master)

 

git status

현재 폴더 내 파일의 상태 확인

→ .git으로 모든 변경 내역을 추적하므로 .git 폴더가 있어야됨

 

git add

파일의 변경 내용을  스테이징 영역에 저장(Unstaged->staged)

 * 수정→ add → commit → push 순

 

git commit

스테이징 영역에 저장된 기록을 로컬 Repo에 영구적으로 저장.

커밋 시 커밋 메시지를 만들어야 함 

  • git commit → 상단에 메시지 등록→ wq! 
  • git commit -m "커밋 메시지" 
  • 가장 마지막 커밋의 커밋메시지를 변경하고 싶을 때, 마지막에 commit한 파일 내역을 수정하고 커밋 메시지를 변경 하고 싶을 때 → git commit --amend

 

원격저장소와 로컬 저장소 연결

github/bit bucket에서 새 Repo 생성 → git clone "Repo주소" 명령어로 로컬에 저장

  • git remote add "저장소 별칭" "저장소 주소"
  • git remote -v 명령어로 원격 저장소와 연결 여부 확인 → 본인의 로컬 repo가 원격 repo와 연결됨

* upstream: 임의로 지정한 별칭

 

git log 

커밋 히스토리 확인(2번의 커밋기록, 가장 최근 내역이 상단에 배치)

  •   commit: 커밋의 ID(SHA-1이라는 해쉬값)
  •   hello, test는 각 커밋의 커밋메세지
  •   Author: 커밋 한 유저
  •   Date: 커밋 반영 날짜와 시간

 

git log를 활용한 코드의 복귀

커밋 로그를 활용해 코드를 이전으로 복구 시킬 수 있음. reset, revert명령어가 자주 쓰임

reset: 커밋 기록을 아예 없애버리고 이전으로 복귀

원래 상태>

git reset --hard a0fvf8 명령어 입력 후

revert: 커밋 기록은 유지한 채(파일 변경 후 새로 커밋을 생성한 뒤 코드 복귀)

  • 실습: 기존 커밋 기록과 파일 상태(4번 라인 추가)

git revert  50a922dc89c83270d3eb4415403939c7b03a7409 명령어 입력

→ 기존의 커밋 기록은 남긴 채 새로운 revert커밋이 생성되었고, 파일이 이전 상태로 원상 복구됨

원래 상태>

명령어 입력 후>

git diff

작업 디렉토리에서  코드 변경 내역 확인

* hello.txt파일에서 직접 수정한 상태(add하기 전)

 

원격 저장소에 파일 푸쉬하기

  • 현재 로컬 저장소 상태: hello.txt파일이 존재( add/coomit까지 완료한 상태)
  • 현재 원격 저장소 상태: test라는 이름의 Repo만 생성해둔 상태
  • 현재 원격 Repo 연결상태: blank(어떠한 원격Repo와도 연결되지 않은 상태)

  • 순서: 로컬Repo↔원격Repo 연결 및 원격Repo에 Push
  • 연결할 원격 Repo의 주소와 사용자가 지정할 원격 Repo의 별칭 지정
    • git remote add "원격저장소 별칭" "원격Repo주소"
    • git remote add upstream "원격 레포 주소"

* 원격Repo를 Clone하면 로컬에서 저절로 origin이라는 이름으로 원격서버와 연결됨

  • 파일 내용 수정 후 commit(실습 차원)
    • hello.txt의 파일 내용을 수정 후 test라는 커밋메시지로 commit

  • 원격Repo로 Push 후 확인
    • git push "원격Repo 별칭" "로컬branch"
    • git push upstream master

 

→ 원격Repo에 master브랜치가 생성됨

 

원격레포에서 파일 수정 후 로컬과 동기화

순서: 원격Repo에서 파일 직접 수정→ 로컬과 동기화→ 로컬에서 파일 수정→ 원격push

  • 원격Repo에서 파일 수정(test1이라는 커밋 메시지로 푸시)

  • 로컬에서 동기화
    • git pull: 원격Repo의 커밋기록을 로컬로  fetch한 뒤 로컬 기록과 merge(동기화)
    • git pull "원격Repo 별칭" "로컬브랜치"
    • git pull upstream master
    • 로컬에서 clone한 상태라면 git pull만 입력해도 됨.

**협업 시에는 git pull을 통해 프로젝트의 최신 커밋들을 로컬로 가져와서 병합한 뒤 작업

+ Recent posts