낙서장이자 오답 노트이자 컨닝 페이퍼
Git을 공부해보자: Git 추가 기능 (Hooks, Submodules) 본문
인프런에서 "제대로 파는 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의 파일에 직접적으로 관여를 하지 않음


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


- 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 추가
'git & github' 카테고리의 다른 글
| Git을 공부해보자: GitHub 잘 사용하기 (리드미, 풀 리퀘스트, 이슈, 오픈소스) (2) | 2023.12.01 |
|---|---|
| Git을 공부해보자: 분석과 디버깅(log, diff, blame, bisect) (0) | 2023.11.30 |
| Git을 공부해보자: Branch 보다 깊이 알기 (0) | 2023.11.29 |
| Git을 공부해보자: 태그 (1) | 2023.11.29 |
| Git을 공부해보자: 취소, 되돌리기 깊이 알기 (1) | 2023.11.29 |