Git이 뭔가요?

oching·2022년 4월 13일
0

Git

목록 보기
2/4

FASTCAMPUS ST-FE 3기)
Part 2. Git을 활용한 버전관리 ch1. 버전관리

Git

리누스 토르발스에 의해 개발된
'분산 버전 관리 시스템(Distibuted Version Control System , DVCS)'
컴퓨터파일의 변경사항을 추적하고
여러 사용자들 간에 해당 파일 작업을 조율하기위해 사용된다.

1.1 버전관리의 필요성

여러명과 프로젝트 관리를 한다고 가정해보자.
하나의 파일이어도 여러번의 수정파일이 생길 수 있지 않을까?

만약, 이미 코드를 수정했는데 그 전 버전의 코드가 필요하다면..?
혹은 내가 밤새 작업한 파일을 올려두었는데 다른 작업자가
같은 파일을 다시 업로드해 덧입혀져 내용이 날아간다면..?

이러한 사태를 막기 위해 코드를 수정할 때 마다 각 파일을 모두 백업해둬야할까?..
이는 흡사 지옥과도 같은 작업량이 아닐까...

때문에 Git은 이러한 지옥에서 우리를 구출해주기 위해 탄생했다.

Git안에서 우린 수정사항이 발생하면 하나의 버전을 만들고,
해당 버전에 대한 수정사항을 간단한 comment와 함께 남겨 저장하고,
그 내역을 원격 저장소에 쌓아 다른 작업자와 함께 공유까지 할 수 있다.

1.2 Git 설치하기

https://gitforwindows.org/
설치 후 gitbash 확인 or cmd 창에서 --git version 확인

1.3 Gitbash

Linux나 Unix에서 사용하는 명령어를 window나 다른 운영체제에서도 사용할 수 있게 만들어주는 장치.
command(명령어)를 통해 git 버전 관리를 진행시키는 프로그램이다.


01. Git의 파일관리 방식

  • Working Directory
    local에서 직접 작업하는 공간으로,
    새로 내용의 수정, 변화가 생성되는 곳이다.
    수정작업을 마치면 Modified상태가 되는데, 이는 수정만 되었다는 의미이다.
    아직 로컬데이터베이스에 저장된 상태가 아니기에
    add명령어를 통해 staging area에 올려 버전관리를 시작할 준비를 해야한다.

  • Staging Area
    working directory에서 내용을 받아
    local 저장소로 저장시킬 파일을 준비시키는 공간.
    즉, 탕수육(데이터)를 덜어 먹기 위한 앞접시같은 공간이다.
    Staged 는 곧 저장소로 보내질 준비가되었다는 뜻이며,
    commit 명령어를 통해 저장소로 넘겨준다.

  • Local Repo
    로컬 저장소
    변경된 내용을 로컬환경에서 저장, 관리하는 공간이다.
    commit 명령어로 로컬저장소에 남어올때,
    일종의 스냅샷을 만들어 파일의 버전을 관리한다.
    작업자가 변경한 모든 히스토리를 확인할 수 있다.
    Committed는 현재 데이터가 로컬 데ㅋ이터베이스에 안전하게 저장됐다는 것을 의미한다.
    push pull명령어를 통해 원격 저장소와 버전 정보를 주고받을 수 있다.

  • Remote Repo
    원격 저장소
    로컬저장소에서 생성한 데이터들을 받아 Github과 같은 원격 저장소에 저장한다.


02. Init 초기화

소스를 관리할 공간인 저장소를 처음에 초기화시키는 것을 의미한다.
'이제 이 저장소를 무대로 버전관리 시작할게~'

//버전관리 시작
git init

//개행문자 (Newline) 설정
window ) $ git config --global core.autocrlf true
mac ) $ git config --global core.autocrlf input

//사용자 정보등록
$ git config --global user.name 내이름
$ git config --global user.email 내이메일

//에디터 설정
$ git config --global core.editor "vim"

//메시지 확인 설정
$ git config --global core.pager "cat"

//구성확인 (Q키:종료)
$ git config --global --list

03. Clone 복제

프로젝트 주소를 내 로컬에 복사한다.
init 처럼 직접 초기화와 설정을 거쳐 사용할 수도 있지만
이미 존재하는 저장소를 복사해와 버전관리를 시작할 수 있다.

$ git clone [저장소 주소]

04. Commit 로컬기록생성

로컬저장소에 파일의 코드 이력을 생성하는 것을 의미한다.
내 컴퓨터에서 어떤 파일을 수정했다면,
무엇을 수정한건지 간단한 메세지와 함께 저장해 남겨둔다.

$ git commit 

vim환경이 열려 메세지와 함께 commit한다.
메세지에는 제목, 간단한 수정사항에 대한 설명을 적어둔다.

💡 vim
gitbash안에서 내용을 수정할 수 있게 하는 editor.
코드의 변경도, commit시의 메세지 작성도 가능케한다.

  • Vim열기
//해당 파일이 없다면 생성함. 
vim 파일명
  • vim mode / key

    modekey
    normal modeesc
    insert modei
    visualv
    commend:
  • vim 닫기
    shift + : 가장 하단으로 커서 초점
    wq : 저장 후 빠져나옴
    q : 저장하지 않고 빠져나옴

  • 저장된 내역 확인

	cat 파일명

💡 Commit Convention
Commit 기록을 남길 때 어떤 걸 수정했는지 제목, 간단한 내용을 적어둘 때 관습적으로 쓰이는 법칙.

1. 제목에 prefix 달기
2. 어떤 걸 수정했는지 적기
prefix)

feat: 기능 개발 관련
fix: 오류 개선 혹은 버그 패치
docs: 문서화 작업
test: test 관련
conf: 환경설정 관련
build: 빌드 관련
ci: Continuous Integration 관련

예시)
	feat : creat a signin.py
    creat a signin.py for signin

05. stash 임시저장

잠시 숨겨두기
아직 작업이 끝나지않았는데, 다른 브랜치로 checkout해야하나
commit하기는 미완성일 때 임시저장같은 개념.

//임시저장하듯 저장시켜두기
$ git stash

//임시저장한 내용 다시 복원
$ git stash apply

//최근 임시저장한 내용 삭제
$ git stash drop

//적용하고 삭제하고 동시에
//$ git pop
$ git stash apply; git stash drop;


06. log & diff 변경사항 확인

//커밋 히스토리 확인
$ git log

// 매 커밋 기록마다 가장 최근의 커밋 내용과 그 이전 커밋의 내용 간 차이점 출력
$ git log -p

//커밋id 이전의 커밋 내역만 출력
$ git log diff 커밋id

//커밋id01과 커밋id02 사이의 소스 상의 차이점 출력
$ git log diff 커밋id01..커밋id02

07. Reset 취소하기

코드 추적에 어려움 발생. 사용 자제.
--hard

//커밋id01까지는 남겨두고, 커밋id01 이후의 수정사항들은 hard하게 삭제한다. 
//결국 커밋id01이 가장 최신의 커밋사항이 되는 것. 
$ git reset 커밋id01 --hard

//현재버전(HEAD)에서 n번째 이전 버전으로 되돌리기
$ git reset --hard HEAD~n

//직전 되돌리기 이전으로 원상복귀
$ git reset --hard ORIG_HEAD

--soft

$ git reset 커밋id01 --soft
$ git reset -soft HEAD~n

08. Remote 원격연결

이렇게 commit까지 완료했다면, 우리는 나의 local 저장소안에서만 버전기록을 생성한 셈이다.
그럼 이제 이를 기록하고 공유 될 수 있도록 하려면 원격저장소에 전달해줘야하지않을까?
나의 local 저장소와 원격 저장소를 연결해주자.

//원격저장소 내용 전부 확인
$ git remote -v

//통상적으로 별칭은 origin으로 지정한다. 
$ git remote add [원격저장소 별칭] [원격저장소 주소]

//원격저장소 연결 삭제
$ git remote remove [원격저장소 별칭]

09. Push 원격전달

원격저장소에 local의 내용을 전달시켜 기록 저장시킬 수 있다.

// 저장소 명을 가진 저장소 주소에 push하겠다'
$ git push [저장소 별칭] [브랜치 이름]

📑 init부터 push까지 해보기

 //git 설치확인
 **git --version**

//git init - 버전관리 시작
**git init**

//개행문자 (Newline) 설정 
**`window` git config --global core.autocrlf true**    
**`mac` git config --global core.autocrlf input**

//사용자 정보 등록
**git config --global user.name 'oching-choi' **
**git config --global user.email 'oching.choi@gmail.com'**   

//에디터 설정
$ git config --global core.editor "vim"

//메시지 확인 설정
$ git config --global core.pager "cat"

//구성확인 (Q키:종료)
$ git config --global --list

//파일 상태 확인
git status

//추적시킬 파일 지정
git add index.html

//vim환경으로 버전생성, 메세지 참조
git commit 

//commit 기록 확인
git log

//remote - 원격 연결
git remote add origin [원격저장소 주소] 

//push - 원격 전달
** git push origin [브랜치명] **

profile
FE Studying

0개의 댓글