본문 바로가기

문과 코린이의, [Git] 기록

[문과 코린이의 IT 기록장] Git 심화 - Git의 추가 기능들 ( Git Hooks , Git Submodules )

반응형

[문과 코린이의 IT 기록장] Git 심화 - Git의 추가 기능들 ( Git Hooks , Git Submodules )

[문과 코린이의 IT 기록장] Git 심화 - Git의 추가 기능들 ( Git Hooks , Git Submodules )

 


 

 

 

제대로 파는 Git & GitHub - by 얄코 - 인프런 | 강의

코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업 개발자는 Git 박사로 들어주는 끝판왕 강좌!, - 강의 소개 | 인프런...

www.inflearn.com

2022.04.14 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git 심화 - 태그 (커밋에 태그 달기, 원격의 태그와 릴리즈)

 

[문과 코린이의 IT 기록장] Git 심화 - 태그 (커밋에 태그 달기, 원격의 태그와 릴리즈)

[문과 코린이의 IT 기록장] Git 심화 - 태그 (커밋에 태그 달기, 원격의 태그와 릴리즈) 제대로 파는 Git & GitHub - by 얄코 - 인프런 | 강의 코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업

vansoft1215.tistory.com

2022.04.15 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git 심화 - Brnach 심화 (Fastforward vs 3-way merge, 다른 브랜치에서 원하는 커밋만 따오기, 다른 브랜치에서 파생된 브랜치 옮겨붙이기, 여러 커밋들을 하나로 묶어 가져오..

 

[문과 코린이의 IT 기록장] Git 심화 - Brnach 심화 (Fastforward vs 3-way merge, 다른 브랜치에서 원하는 커

[문과 코린이의 IT 기록장] Git 심화 - Brnach 심화 (Fastforward vs 3-way merge, 다른 브랜치에서 원하는 커밋만 따오기, 다른 브랜치에서 파생된 브랜치 옮겨붙이기, 여러 커밋들을 ..

vansoft1215.tistory.com

2022.04.18 - [문과 코린이의, [Git] 기록] - [문과 코린이의 IT 기록장] Git 심화 - 분석 및 디버깅하기 (log 추가 옵션들 알아보기, 차이 살펴보기, 어떤 코드를 누가 작성했는지 파악하는 방법, git bisect를 통해, 이진 탐색 알고리즘으로 문..

 

[문과 코린이의 IT 기록장] Git 심화 - 분석 및 디버깅하기 (log 추가 옵션들 알아보기, 차이 살펴보

제대로 파는 Git & GitHub - by 얄코 - 인프런 | 강의 코알못도 따라올 수 있는 친절하고 쉬운 강좌! 현업 개발자는 Git 박사로 들어주는 끝판왕 강좌!, - 강의 소개 | 인프런... www.inflearn.com 2022.04.12 - [..

vansoft1215.tistory.com


1. Git Hooks 

- git에서 hook이라는 것을 설정해주면, 특정 명령어를 실행할 때, 각 이벤트에 맞는 지정된 명령을 실행할 수 있도록 만든다. 즉 자동화와 같은 역할을 하게 된다. ex. 커밋할때 + push까지 하기

hook 파일의 예시

* 파일의 이름은 각각이 언제 실행되는지를 나타낸다.

 ex. pre-commit : 커밋이 이루어지기 전 (커밋 명령어 직후) /  pre-push : push가 이루어지기 전 (푸시 명령어 직후)

* 이러한 sample들은 vscode에서 열어볼 수 있으며, 해당 명령어들은 쉘스크립트를 알아야 이해할 수 있다.

* 이 파일들에서 sample을 떼고 저장하면, 바로 실행되는 파일(실행파일)로 만들어진다.


ex. gitmoji를 git hooks를 사용해 CLI로 연결한 후, 사용하는 방법 (윈도우 기준)

 

GitHub - carloscuesta/gitmoji-cli: A gitmoji interactive command line tool for using emojis on commits. 💻

A gitmoji interactive command line tool for using emojis on commits. 💻 - GitHub - carloscuesta/gitmoji-cli: A gitmoji interactive command line tool for using emojis on commits. 💻

github.com

 

 

gitmoji

:truck: Move or rename resources (e.g.: files, paths, routes).

gitmoji.dev

 

a. Node.js 설치

 

Node.js

Node.js® is a JavaScript runtime built on Chrome's V8 JavaScript engine.

nodejs.org

 

b. 터미널에서 gitmoji 설치

$npm i -g gitmoji-cli

 

c. vs code에서 gitmoji 도움말 확인하기

$gitmoji --help

 

d. gitmoji를 vs code 프로젝트에서 사용하는 방법

 1) gitmoji commit hook을 생성하기 (gitmoji를 초기화(initialize)하기)

$gitmoji -i

 2) 변경사항 만든 후 커밋하기

# 변경사항 만든 후
$git add .
$git commit

 

 3) 커밋에 대한 gitmoji 지정 + 커밋 메시지 작성하기

 - gitimoji 이름 입력 + enter

 - 커밋 메시지 입력 + enter

 - esc + 저장(:wq!)

 

 4) push한 후, github에서 확인하기

 


2. Git Submodules

- Submodules(서브모듈) : 프로젝트 폴더 안에 또 다른 프로젝트가 포함될 때 사용한다.

 * 복합적인 프로젝트를 하다보면, 프로젝트(main) 내에 또 다른 서브(sub)프로젝트가 있어야 할 경우가 존재한다. 즉, main-project라는 폴더 내에, 모듈로 또 다른 sub-project들이 들어갈 수 있다는 것이다.

 * 그러나, main프로젝트와 sub프로젝트는 각각 개별적인 git으로 관리가 된다. 즉, sub프로젝트는 main 프로젝트 내에 위치하기는 하지만, 별개의 github를 통해 관리된다는 것이다.

 * main 프로젝트가, 각각의 sub 프로젝트의 변화에 관여를 하지 않았으면 좋겠지만, ignore처럼 완전히 무시하는 것이 아니라 저장된 sub 프로젝트의 git정보들을 활용하고 싶을 경우 사용하는 것이, 서브모듈(submodule)이다.


1) 서브모듈(Submoudle) 사용 방법

(1) main 프로젝트 생성하기

a. main-project 폴더 생성하기

b. vs code로 해당 폴더에서 변경사항을 만든 후, git이 관리하도록 만들고, 커밋하기

$git init
$git add . 
$git commit

c. github에서 main 프로젝트를 관리할 repository 만들고, 연결하기

- 해당 내역 복사 후 붙여넣기(연결 및 push과정)

 

(2) sub 프로젝트 생성하기

a. github에서 sub-module repository 및 파일 만들기

 

(3) main 프로젝트에 서브모듈로 submodule 프로젝트 추가하기

a. github에서 sub-modul의 https 주소 복사하기

b. main 프로젝트 디렉토리상 터미널에서, 복사한 주소를 활용해 아래 명령어를 실행하기

$git submodule add (submodule의 GitHub 레포지토리 주소) (하위폴더명, 없을 시 생략)
# 예시
$ git submodule add https://github.com/ChoEunByeol123/sub-module.git

c. 이후 main 프로젝트 폴더 내, submodule 폴더와 .git modules 파일을 확인하기

 * git modules : submodules의 이름 + 어떤 폴더에 있는지 + 어디서 가져왔는지 등을 표시함

d. 가져온 폴더 및 파일은, staging된 상태로, commit하는 과정이 필요하며, 최종적으로 커밋 진행

$git add .
$git commit

 


2) main 프로젝트, sub 프로젝트에서 새로운 수정사항 만들경우

- 양 쪽 모두 수정사항을 만들더라도, main-project에서 git status를 확인하면, submodule의 변경사항은 포함되지 않음을 확인할 수 있다.

- 즉, 이는 main project의 git은 sub-module의 프로젝트 파일에는 직접적으로 관여를하지 않는다는 것을 의미한다.

 

- sub-module에서 커밋을 실행하고 싶다면, 하단의 명령어를 통해 해당 디렉토리상 터미널로 이동하여 커밋을 해주면 된다.

$cd submodule

 

- sub-module을 새로 커밋하면, main페이지에서 해당 변경사항이 함께 나타난다. 

- 즉, submodule을 포함한 프로젝트는, submodule 내의 파일 변경사항에 관여하지는 않지만, 어떤 커밋이 발생하고있는지는 git으로 확인하며 관리한다는 것이다. 

submodule에 변경 커밋 발생
해당 변경사항 적용 완료
저장 완료

* sub-module @64be30c를 클릭하게 되면, submodule의 레포지토리로 가서 해당 커밋을 보여준다.

* 이와 같이 main  프로젝트와 submodule 프로젝트는, submodule의 기능으로 연결되어 있음을 알 수 있다.

 


3) main 프로젝트를, 또 다른 프로젝트의 서브모듈로 활용하기

$git submodule add (submodule의 GitHub 레포지토리 주소) (하위폴더명, 없을 시 생략)

위 명령어를 활용해 clone만 한 경우, main 파일들은 받아지지만, sub-module의 경우 폴더와 .gitmodules로 정보만 존재하고, 실제 파일이 받아지지는 않는다.

실제 파일을 받아오기 위해서는 아래의 명령어를 사용하면 된다.

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


4) Github에서 발생한 원격 변경사항을, submodule 로컬 프로젝트에 커밋하고자 할 때는?

$git submodule update --remote
# 서브모듈 내 또 서브모듈이 존재할 경우 --recursive를 추가한다.

* main의 경우는 git pull을 해주면 됨 

 


* 유의사항
- 아직 공부하고 있는 문과생 코린이가, 정리해서 남겨놓은 정리 및 필기노트입니다.
- 정확하지 않거나, 틀린 점이 있을 수 있으니, 유의해서 봐주시면 감사하겠습니다.
- 혹시 잘못된 점을 발견하셨다면, 댓글로 친절하게 남겨주시면 감사하겠습니다 :)
반응형