낙서장이자 오답 노트이자 컨닝 페이퍼

Git을 공부해보자: Git 추가 기능 (Hooks, Submodules) 본문

git & github

Git을 공부해보자: Git 추가 기능 (Hooks, Submodules)

NangIn 2023. 11. 30. 16:17
인프런에서 "제대로 파는 Git & GitHub - by 얄코"를 보고 정리한 내용입니다!

Git Hooks

Git상의 이벤트마다 자동으로 실행될 스크립트를 지정한다.

  • ex: 커밋할 때마다 자동으로 푸시, 커밋하기 전에 코드가 약속된 형식으로 제대로 짜여 있는지 확인

Git Hooks 폴더

프로젝트 폴더 내 .git > hooks 폴더 확인

  • 파일 끝에 .sample을 없애면 훅 실행파일이 됨
  • 파일의 이름은 각각이 언제 실행되는가를 나타냄

    • pre-commit: 커밋이 이뤄지기 전 (커밋 명령어 직후)
    • pre-push: 푸시가 이뤄지기 전 (푸시 명령어 직후)

gitmoji-cli로 활용예 보기

1. gitmoji-cli 설치

npm i -g gitmoji-cli

2. 프로젝트의 훅에 적용

프로젝트 폴더에서 아래 명령어 실행

gitmoji -i
  • hooks 폴더에 추가된 파일 확인
  • 프로젝트 수정 뒤 git add . , git commit 하여 진행
  • 커밋 추가 뒤 push하여 GitHub에서 확인

💡 참고사항 

gitmoji-cli 훅 해제하려면 hooks 폴더에서 prepare-commit-msg 파일을 삭제하면 된다.

 

Git Submodules

서브모듈

  • 프로젝트 폴더 안에 또 다른 프로젝트가 포함될 때 사용
  • 여러 프로젝트에 사용되는 공통모듈일 때 유용
  • main-project의 깃은 main-project에 해당하는 파일들만 관리하고 서브모듈에는 관여하지 않음
  • 서브모듈은 팀원들간에 공유되는 모듈용 프로젝트

사용해 보기

1. 두 개의 프로젝트 생성

  • main-project, submodule
  • 양쪽 모두 파일 생성 및 작성 뒤 커밋
  • 두 프로젝트 모두 GitHub에 각각 레포지토리 만들어 올리기
    • 혹은 GitHub에서 생성해도 좋음

2. main-project에 서브모듈로 submodule 프로젝트 추가

main-project 디렉토리상 터미널에서 아래 명령어 실행

git submodule add (submodule의 GitHub 레포지토리 주소) (하위폴더명, 없을 시 생략)
  • 프로젝트 폴더 내 submodule폴더와 .gitmodules 파일 확인

  • 스테이지된 변경사항 확인 뒤 커밋
  • 양쪽 모두 수정사항 만든 뒤 main-project에서 git status로 확인
    • main-project와 submodule의 변경사항 감지
    • main-project에서 git add. 를 하면 main-project의 변경사항은 스테이지되는 반면에 submodule의 변경사항은 스테이지되지 않음
    • 즉, main project의 git은 submodule의 파일에 직접적으로 관여를 하지 않음

git add . 전후 status

  • main-project에서 변경사항 커밋 뒤 푸시
    • main-project의 변경사항만 반영
  • submodule에서 변경사항 커밋 뒤 푸시
    • submodule의 변경사항만 반영
  • main-project 안에 있는 submodule에서 새로운 커밋이 발생한 후, main-project에서 상태 확인
    • 서브 모듈을 포함한 프로젝트는 서브 모듈 안에 있는 파일의 변경사항에는 관여하지 않지만 서브 모듈의 커밋 발생은 git으로 관리

git add . 전후 status

  • main-project에서 커밋, 푸시 뒤 GitHub에서 확인
    • submodule을 클릭하면 서브 모듈의 ropository로 이동
    • 즉, 메인 프로젝트와 서브 모듈 프로젝트가 서브 모듈의 기능으로 연결

3. 서브모듈 업데이트

1. main-project를 새로운 곳에 clone 하기

  • clone한 상태에서는 main-project의 파일들은 받아져 있는 반면 submodule는 폴더만 있고 파일이 받아져 있지 않음
    • why? 처음부터 서브모듈을 전부 받아온다면 무리가 될 수 있음, 단지 main-project의 소스만 확인하려는 경우 의도와 다를 수도 있음

2. 서브모듈을 사용하기 위해서는 아래 명령어들로 서브모듈 init 후 클론

 

git submodule init (특정 서브모듈 지정시 해당 이름)
git submodule update

 

3. GitHub(원격)에서 submodule에 수정사항 커밋 발생

 

main-project에서 아래 명령어로 업데이트

git submodule update --remote
  • main-project를 받아오려면 그냥 git pull 하면 됨
  • 서브모듈 안에 또 서브모듈이 있을 시: --recursive 추가