Git 기초 +기타내용 // git(0)

2022. 2. 25. 19:49
  • 인프런에서 얄코선생님의 git강의를 보면서내용을 정리
  • 하나의 주제로 포스팅할 만큼 길지 않은 단편적인 내용들을 함께 정리

세부내용

  • gitignore
  • git help
  • git config(환경설정)
  • git clean : 관리(추)적되지 않는 파일 삭제
  • git hooks
  • git을 이전 세대 vcs들과 차별짓는 두가지 요소

1.gitignore

  • 깃에서 따로 관리하지 않는 내용들을 적어둠. 여기에 적어둔 파일이나 폴더는 깃이 추적하지 않음
  • 공식사이트 : https://git-scm.com/docs/gitignore
  • 밑은 gitignore 파일의 양식
# 이렇게 #를 사용해서 주석

# 모든 file.c
file.c

#최상위 폴더에 위치한 file.c  
#file.c가 파일이라면 바로위와 동일한 결과가 나옴
/file.c

# 모든 .c 확장자 파일
*.c

# .c 확장자지만 무시하지 않을 파일
!not_ignore_this.c

# logs란 이름의 파일 또는 폴더와 그 내용들
logs

# logs란 이름의 폴더와 그 내용들('/'가 들어가서 폴더라는 걸 알 수 있음)
logs/

# logs 폴더 바로 안의 debug.log파일(혹은 폴더)과 .c 파일들
logs/debug.log
logs/*.c

# logs 폴더 바로 안, 또는 그 안의 다른 하위 폴더(들)안의 debug.log
logs/**/debug.log

 

2. git help

  • git 사용중 모르는 부분이 있을 때 도움을 받을 수 있는 기능들에 관함
#기본적인 명령어들과 설명
git help

#git의 모든 명령어들
git help -a

#해당 명령어의 설명 & 옵션(-a 같은 것들)
git (명령어) -h

#해당 명령어의 설명/옵션을 웹사이트에서 보기
git help (명령어)
git (명령어) --help

 

 

3. git config(환경설정)

1) global config?

  • global config(전역 환경변수) : 해당 컴퓨터내에서 git과 관련된 모든 설정의 기본값을 지정 . local값을 따로 지정해주지 않으면 언제나 global로 설정된 값이 됨
  • config를 --global과 함께 지정하면 전역으로 설정됨
#현재 모든 (전역)설정 값 보기
git config (--global) --list

#모든 전역(global) 설정 값 에디터에서 보기
git config --global --e

 

2)기본 에디터 수정

  • 'code'자리에 원하는 편집 프로그램의 .exe파일 경로를 두면, 그 편집 프로그램이 열림
  • 밑의 예시 코드에서 code는 vscode를 의미함
  • --wait은 에디터를 수정하는 동안 cli를 정지하는 것을 의미함
git config --global core.editor "code --wait"

 

  • 이 설정을 되돌리려면 , 'git config --global -e'로 편집기를 열고 아래부분을 삭제하면 원래상태로 돌아감

 

3)유용한 기본설정들

#기본으로 해두면 좋음. 줄바꿈 문제 호환문제에 관함
git config --global core.autocrlf (윈도우: true / 맥: input)

#pull할 경우, 기본 전략을 merge 또는 rebase로 설정
git config pull.rebase true/false

#기본 브랜치명 변경(origin > main)
git config --global init.defaultBranch main

#push시 로컬과 동일한 브랜치명의 원격 브랜치로 자동 연결
git config --global push.default current

 

4)단축키 만들기(개꿀팁!!)

#형식
git config --global alias.(단축키) "명령어"

#예시
$ git config --global alias.co checkout
$ git config --global alias.br branch
$ git config --global alias.ci commit
$ git config --global alias.st status

#둘은 같음
git commit -am "test1"
git ci -am "test1"

 

4.git clean : 관리되지 않은 파일 삭제

  • git clean을 사용하여, git에서 추적하지 않는(untracked) 파일들을 삭제 할 수 있음
  • 당연히 gitignore에 적혀있어서 추적되지 않는 파일들은 git clean의 대상이 아님
  • 다음의 명령어를 활용하여 git clean을 사용함
  • 명령어들을 개별적으로 사용하되, 폴더까지 포함할 경우 -d를 함께 쓴다고 생각하면 편함

###사용 예시###

#(폴더를 포함하여) 삭제될 파일들 보여주기
git clean -nd
#(폴더를 포함하여) 인터렉티브모드 시작
git clean -di

 

5.git hooks

  • git hook : git 상의 이벤트(push, commit, pull...)가 실행될 때 자동으로 시행되는 것을 지정해줌
  • ex)add > 바로 commit까지 하도록 함
  • git hooks는 .git 파일의 hooks폴더에서 확인이 가능함. 
    • 파일명은 pre-push같은 식으로 되어있는데, 이는 push되기전에 작동되는 기능을 의미함
    • 근데 이걸 제대로 쓰려면 쉘스크립터를 배워야 해서 쓰기는 힘듬..
    • 그래서 그냥 경험을 위해 gitmoji같은 걸 한번 적용해본다고 함(설치법은 12-1 git hooks 영상 참고)
    • gitmoji실행한거 되돌리려면 .git 폴더 > hook으로 가서 해당 파일을 지우면 됨

 

6. git을 이전 세대 vcs들과 차별짓는 두가지 요소

1)스냅샷

  • 기존의 vcs들은 델타방식으로 각 버전의 파일을 저장했음
  • 델타방식은 각 버전별로, 각 파일에서 발생한 변화를 계속해서 누적시키는 방식임
  • 이는 커밋의 경우가 많아질 경우(예를 들어, vs코드처럼 commit이 십만에 가까울 경우), 엄청나게 많은 파일들의 엄청나게 많은 커밋을 매번 누적시키면서 계산해야 하므로, 느려질 수 있음

델타 기반의(delta-based) 방식. git이전의 vsc의 방식이다

 

  • 반면 git은 스냅샷(snapshot)방식을 사용함
  • 각 버전의 매순간에 모든 파일의 상태(코드)를 있는 그대로 사진처럼 찍어서 보관
  • 만약 연속된 버전에서 파일의 변화가 없다면, 깃은 해당 파일을(해당 파일의 스냅샷을) 새로이 저장하는게 아니라 그전에 저장된 파일의(파일이 찍힌 스냅샷의) 링크를 저장함
  • 결론적으로, 매순간 그냥 새로이 스냅샷을 찍어서 올리면 되기때문에, 커밋이 많아지든 파일이 많아지든 대기시간이 델타방식에 비해서 감소함

Git의 snapshot방식. 매 버전마다 snapshot처럼 사진을 찍어서 보관하므로, 새로 push를 할때 대기시간이 많이 걸리지 않는다 

 

2) 분산저장 시스템 

  • 이전 버전의 vcs들은 중앙집중식이였음. 원격서버에 모든 관리내역이 저장되고, 작업자들은 원격서버에서 '내려받은 파일'로만 작업이 가능
  • 즉 해당 환경전체(혹은 전체파일)를 내려받는 것이 아니라, 일부만 내려받아서 작업을 진행함. 따라서 원격저장소에 연결되어 있지 않는 로컬에서는 파일을 계속 이것저것 변화시키고 올렸다 내렸다하면서 자유롭게 작업이 힘듬

 

  • 반대로 git에서는 git_clone을 활용하면 원격저장소에 저장된 전체파일들과 함꼐 git commit과 branch들까지도 다 내려받을 수 있음
  • 따라서, 인터넷 연결상태 같은 걸 신경쓰지 않고 로컬에서 자유롭게 작업을 진행할 수 있음.
  • 또한 모든 구성원들이 파일뿐만 아니라, git의 상태(커밋/브랜치)까지 공유하므로 각자가 로컬에서 원하는 대로 편하게 작업을 진행하다가 원할 떄 push와 pull로 프로젝트를 동기화시키면서 작업이 가능함

 

BELATED ARTICLES

more