1. git submodule
개념과 기본 형식
git submodule로 프로젝트 내에 다른 repository를 삽입하여 따로 형상 관리를 할 수 있다.
관리 요소가 늘긴하지만 병렬적 작업이 가능할 것 같다.
.gitmodules 파일을 만들고 아래 양식으로 내용을 써놓는다.
[submodule "<모듈 이름>"]
path = <모듈 디렉터리 위치>
url = git@github.com:<Repository 이름>/<git 위치>.git
branch = <브랜치 이름> 또는 tag = <태그 버전>
그리고 터미널에서 아래 명령어를 입력하면, 서브모듈이 .gitmodules에서 정의한 branch나 tag를 따라서 update 된다.
git submodule update --remote
외부 모듈에서의 관리
외부 모듈에서 해당 모듈의 .py 파일들을 참조하여 사용할 수 있게된다. 외부 모듈 업데이트 시에 내부 모듈인 git submodule이 .gitmodules에 정의한 branch나 tag를 바라보도록 정의되므로 유의해야한다.
또한 업데이트 후 해당 모듈의 파일이 IDE(pycharm)상 git staging 목록에 있는지 꼭 확인해야한다. 만약 그렇지 않으면 새로고침 버튼을 누르거나 IDE를 재시작하여 아래 체크 표시처럼 반드시 staging 목록에 있는지 확인하고 commit을 해야 변경사항이 반영된다.
2. pip install
pip install은 파이썬에서 패키지를 설치할 수 있도록 해준다. 위 submodule을 설치했다면 아래 명령어를 통해서 submodule에 있는 패키지들을 외부 모듈에서 설치할 수 있다. 설치가 완료되면 External Libraries에서 submodule에 있는 패키지들이 있는 것을 확인할 수 있다.
아래 명령어를 통해 설치가 가능하다.
pip3 install <submodule의 path>
같은 방식으로 python 자체에서 setup.py를 이용해 서브모듈을 설치할 수도 있다. 서브 모듈 내부에 setup.py를 아래 양식으로 넣어놓으면 명령어 실행이 가능하다.
from setuptools import find_packages, setup
setup(
name="<패키지 이름>",
version="0.1.0",
packages=find_packages(),
)
python3 install <setup.py 파일의 위치>
그럼 서브 모듈 내 패키지들을 찾아서 setuptools가 설치한다. 다만 python 명령어로 직접 설치하는 것보다는 pip 패키지 관리자로 설치하는 것이 더 잘 관리되고 안전하다고 한다.
참고로 python 3 버전부터 python3 명령어를 사용하는 것처럼 pip도 python3 버전 이상부터는 pip3 명령어로 실행한다.
3. Docker RUN
서브 모듈 설치를 도커의 Dockerfile에서 실행할 수도 있다.
RUN pip3 install --no-cache-dir <서브 모듈 위치>
--no-cache-dir 옵션은 캐시를 하지 않고 항상 새로 설치하라는 의미이다.
Bash shell 짜기
위 RUN 구문은 Docker Container내에 서브 모듈 파일들을 전부 COPY한 뒤에 RUN하는 방식이다. RUN 인스트럭션을 넣으면 불필요한 이미지 레이어가 추가될 수 있으므로 아래 처럼 .sh 확장자로 끝나는 shell 실행용 파일을 프로젝트에 넣어놓고, CMD 인스트럭션으로 도커 컨테이너내에서 실행하도록 할수도 있다.
Bash 파일: install-submodule.sh
#!/bin/bash
pip3 install --no-cache-dir /var/app/<submodule 이름>
COPY install_carta_util.sh /
CMD ["/bin/bash", "/install_carta_util.sh"]
물론 이 방식도 서브 모듈 파일 자체가 이미지에 포함되어야 있으므로 큰 이점이 있지는 않다. 그러나 이런 방식도 있다는 것을 알고 있으면 나중에 도움이 될 것 같다.
'Programming-[Base] > git' 카테고리의 다른 글
[TIL] git reflog: git reset도 잘못하고 merge도 잘못해서 local, remote 모두 엉망일때.. (0) | 2023.07.28 |
---|---|
GPG key to github - GNUPG, pinentry 에러 mac M1 (0) | 2023.07.28 |
[TIL] github Action 안돌거나 이상할 때 (0) | 2023.03.03 |
Git Commit 취소 : Reset, Revert 개념 이해하기 (0) | 2022.07.30 |
[TIL][링크]git windows ↔ Mac 간 개행문자(CRLF) 차이 처리 (0) | 2022.07.04 |