티스토리 뷰
개요
Git을 이용하여 외부 모듈을 참조하려면 git submodule
명령을 이용해서 외부 모듈을 clone
할 수 있다. git submodule
명령은 git clone
과 달리 같은 작업 디렉토리(Working Directory)에 여러 모듈을 추가할 수 있는 장점이 있다.
샘플 코드 추가 (연습하기)
본 아티클에서 사용하는 샘플 코드는 필자가 개발한 Umc.Core의 의존성 주입(DI, Dependency Injection), 역전 제어(IoC, Inversion of Control), 관점 지향 프로그래밍(AOP, Aspect-Oriented Programming) 이다. submodule를 추가하고 제거하는 과정을 이해하기 쉽도록 Umc.Core 프로젝트를 사용한다.
$ git clone https://github.com/powerumc/Umc.Core.git
Cloning into 'Umc.Core'...
remote: Counting objects: 136, done.
remote: Compressing objects: 100% (83/83), done.
remote: Total 136 (delta 42), reused 136 (delta 42)
Receiving objects: 100% (136/136), 54.31 KiB | 0 bytes/s, done.
Resolving deltas: 100% (42/42), done.
Checking connectivity... done
git submodule 추가
서브 모듈 추가
git submodule add
명령으로 외부 모듈을 현재 작업 디렉토리에 추가(clone)할 수 있다. submodule이 추가되었다면 git submodule status
명령으로 추가된 모듈 목록을 볼 수 있다.
$ git submodule add https://github.com/powerumc/array-extensions.git ./externals/array-extensions
Cloning into 'externals/array-extensions'...
remote: Counting objects: 124, done.
remote: Compressing objects: 100% (91/91), done.
remote: Total 124 (delta 42), reused 94 (delta 30)
Receiving objects: 100% (124/124), 45.27 KiB | 0 bytes/s, done.
Resolving deltas: 100% (42/42), done.
Checking connectivity... done
아래와 같이 외부 모듈을 하나 더 추가했다.
$ git submodule add https://github.com/powerumc/js-lambda.git ./externals/js-lambda
Cloning into 'externals/js-lambda'...
remote: Counting objects: 74, done.
remote: Compressing objects: 100% (67/67), done.
remote: Total 74 (delta 11), reused 21 (delta 3)
Unpacking objects: 100% (74/74), done.
Checking connectivity... done
그리고 외부 모듈을 모두 추가한 후 git commit
을 했다.
$ git commit -m "added externals libs"
[master a83946b] added externals libs
3 files changed, 8 insertions(+)
create mode 100644 .gitmodules
create mode 160000 externals/array-extensions
create mode 160000 externals/js-lambda
Git submodule 제거
얼마 전 git submodule
은 add
할 수 만 있었고, deinit (remove)
할 수 없었다. 좬장~ deinit
명령은 나중에 추가된 명령이므로 이 명령으로 오류가 나면 최신 scm-org.com 사이트를 방문하여 최신 버전으로 꼭 업데이트하자.
Submodule 제거
git submodule deinit
명령으로 submodule을 제거하고, 삭제된 모듈의 디렉토리를 rm
명령으로 삭제해 주면 된다. 그리고 git commit
을 하면 외부 모듈을 삭제하여 커밋된다.
$ git submodule deinit ./externals/array-extensions/
Cleared directory 'externals/array-extensions'
$ git rm ./externals/array-extensions/
rm 'externals/array-extensions'
$ git commit -m "removed submodule array-extensions"
[master 6cdb9e0] removed submodule array-extensions
1 file changed, 1 deletion(-)
delete mode 160000 externals/array-extensions
모든 Submodule 제거
모든 submodule을 제거하고자 하면 deinit .
으로 모두 제거하고, 커밋 하면 된다.
$ git submodule deinit .
Cleared directory 'externals/array-extensions'
Cleared directory 'externals/js-lambda'
$ git rm ./externals/*
rm 'externals/array-extensions'
rm 'externals/js-lambda'
$ git commit -m "removed all submodules"
[master a620887] removed all submodules
2 files changed, 2 deletions(-)
delete mode 160000 externals/array-extensions
delete mode 160000 externals/js-lambda
다시 한번 얘기하지만, git submodule deinit
명령이 동작하지 않으면 최신 버전의 git으로 업데이트 하자.
'Software Development' 카테고리의 다른 글
크로스 플랫폼에서 데이터 무결성 (0) | 2019.10.16 |
---|
- Total
- Today
- Yesterday
- ***** MY SOCIAL *****
- [SOCIAL] 페이스북
- [SOCIAL] 팀 블로그 트위터
- .
- ***** MY OPEN SOURCE *****
- [GITHUB] POWERUMC
- .
- ***** MY PUBLISH *****
- [MSDN] e-Book 백서
- .
- ***** MY TOOLS *****
- [VSX] VSGesture for VS2005,200…
- [VSX] VSGesture for VS2010,201…
- [VSX] Comment Helper for VS200…
- [VSX] VSExplorer for VS2005,20…
- [VSX] VSCmd for VS2005,2008
- .
- ***** MY FAVORITES *****
- MSDN 포럼
- MSDN 라이브러리
- Mono Project
- STEN
- 일본 ATMARKIT
- C++ 빌더 포럼
- .
- test
- .NET Framework 4.0
- TFS
- 엄준일
- Team Foundation Server 2010
- Visual Studio 2008
- testing
- c#
- 비주얼 스튜디오
- Silverlight
- Visual Studio
- 팀 파운데이션 서버
- 땡초
- github
- Windows 8
- Managed Extensibility Framework
- Visual Studio 2010
- mono
- .NET
- Visual Studio 11
- TFS 2010
- ASP.NET
- monodevelop
- 비주얼 스튜디오 2010
- LINQ
- POWERUMC
- MEF
- umc
- ALM
- Team Foundation Server