
main project/
│...
├── src/
│ └── main/
│ └── resource/
│ └── application.yaml
└── submodule/
submodule패키지는 submodule 레포지토리(private 설정)와 연결되어 있는데, application.yaml 파일과 같은 예민한 정보를 팀원과 공유하고 관리를 하기 위해 적용했다.
submodule 패키지에 application.yaml 설정을 작성 또는 수정submodule 레포지토리에 수동으로 commit + pushmain project에서 서브모듈 변경사항 적용git hook을 사용 해 pre-commit 시 스크립트로 서브모듈에 변경사항 적용
→ main project 와 submodule 을 동시에 동기화 하는 것이 목적
main project에서 application.yaml파일을 수정main project에서 commit 할 경우 pre-commit 훅을 통해 submodule프로젝트에 먼저 commit 적용main project에서 commit 적용을 한번에 자동화main project에서 application.yaml 파일을 수정하고, commit 할 경우 pre-commit 실행
pre-commit 스크립트에서 submodule레포지토리에 접근 해 main project에서 변경한 application.yaml파일을 복붙해서 commit
2번 과정에서 이슈 발생! git 의 2가지 활동이 동시에 일어나기 때문에 불가능
→ main project의 commit + submodule의 commit
fatal: Unable to create '***/.git/index.lock': No such file or directory
submodule레포지토리는 .git 폴더가 아닌 파일 형태로 되어 있기 때문에 index.lock 파일을 찾을 수 없었다.main project에서 application.yaml 파일을 수정(또는 추가)했을 때 commit 전에 먼저 submodule에 commit이 되어야 한다.
따라서 submodule에 application.yaml 파일 작성 후 commit + push 하는 수동 작업이 필요한데, 이부분을 스크립트를 사용 해 자동화하고 스크립트는 gradle task를 통해 실행 하도록 변경했다.
submodule레포지토리에 commit + push 수동 작업을 스크립트를 통해 자동화하기!
#!/bin/bash
# root directory
MAIN_REPO_PATH=$(git rev-parse --show-toplevel)
# submodule directory
SUBMODULE_PATH="$MAIN_REPO_PATH/board-submodule"
# 파일명이 application 인 파일 불러오기
TARGET_FILES=$(find "$MAIN_REPO_PATH/src/main/resources" -type f -name 'application*')
cd "$MAIN_REPO_PATH"
echo "-----------SUBMODULE COMMIT START-----------"
for file in $TARGET_FILES; do
if [[ "$file" == *application* ]]; then
echo "READ $file"
cp "$file" "$SUBMODULE_PATH/backend"
cd "$SUBMODULE_PATH"
git add "backend"
fi
done
# commit & push in submodule repository
git commit -m "Feat: update application files"
git push origin main
echo "-----------SUBMODULE COMMIT END-----------"
main project에서 application.yaml 파일 추가 또는 수정 후 gradle task 로 위 스크립트 실행
(다만 스크립트는 수동으로 실행해야 한다..)
스크립트 실행 과정
a. main project에서 수정한 application.yaml 파일 submodule/backend 폴더로 복사
b. submodule레포지토리 경로에서 commit + push
submodule레포지토리에 변경사항 자동으로 반영!

이렇게 하면 main project에서 변경한 설정 파일을 서브모듈과 동기화 할 수 있고, 로컬환경에서 main project를 커밋할 때 서브모듈의 변경된 커밋사항도 함께 원격저장소로 반영하면 된다.
아쉬운 점은 서브모듈 원격저장소로 commit+push를 함께 적용하기 때문에 커밋메세지가 고정된다는 점이 있다