티스토리 뷰
안녕하세요 :) Zedd입니다.
코코아팟.....이거 관리가 왤케 어려운지..
그러니까 내가 빡친부분은 그 Pod의 본체?를 업데이트 하고, 그 Pod을 사용하는 프로젝트에서 적용하기까지가 개귀찮다는 소리에요.
근데 submodule을 사용하면, 이러한 번거로움이 줄어든다고 듣게되어서 바로 실험해보았습니다.
한번 사용하고 나서 글 쓰는건데, 훨씬 좋음.
그럼 시작할게요.
저 그냥. https://www.raywenderlich.com/690-dependency-management-using-git-submodules 여기 따라하는건데, 여긴 로컬이고 나는 리모트까지 써가면서 하는거라..암튼 참고했어요.
Git submodule써보기
자 제가 생각하는 시나리오는 이겁니다.
프로젝트가 2개가 있습니다.
A, B라고 생각할게요.
A는 main(?) 프로젝트라고 생각하시면 됩니다. 그리고 B가 서브모듈이 될 프로젝트에요.
A에 BaseViewController추가하고싶은데, 이는 C라는 다른 프로젝트에서도 사용 할 Base입니다.
이해가셨나요?
그럼 음, A와 B가 필요하죠.
A. 즉 main 프로젝트를 만들어보겠습니다.
걍 만드셈;;
자, 그리고 터미널을 이용해 이 프로젝트 폴더로 가줍니다.
그리고,
git init
git add .
git commit -m "first commit"
(git remote add ~)
git push
을 해줍니다.
익숙한 작업이죠?
git status를 치게되면, 너의 워킹 트리는 클-린해 ^^ 라는 메세지를 볼 수 있씁니다.
이까지 잘 따라오셨죠?
자!! 지금 일단 A를 만든겁니다.
일단 A는 접어두고, B. 즉 우리의 서브모듈이 될 아이를 만듭시다.
Xcode > File > New > Project로 가서
Cocoa Touch Framework를 만들어줍니다.
이름은...암거나
저는 BaseSubModule이라는 이름으로 만들어줬어요.
저는 처음에...갑자기 .h파일이 있어서 내가 Objc로 만든 줄......Swift로 만들어도 저렇게 나옵니당!
지금 B를 만들었죠?
자 터미널을 이용하여 B. 즉 우리의 서브모듈(BaseSubModule) 폴더로 가줍니다.
그리고 역시나
git init
git add .
git commit -m "first submodule commit"
(git remote add ~)
git push
을 해줍니다. 커밋메세지는 암거나,..하셈.
이까지 잘 따라온거죠?
자 이제 우리의 main 프로젝트인 A로 가줍니다.
제가 A, B라고 하니까 헷갈리신가요 혹시...? 저는 뭔가 명확해서 좋...
아무튼 A로 이동해서,
git submodule add 서브모듈 깃주소
를 쳐줍니다.
그러면
이렇게 막 클론을 하더니
우리 A. 즉 메인 프로젝트 폴더를 열어보면
BaseSubModule폴더가 생겼습니당
ls -al을 해보면
.gitmodules가 생긴것을 볼 수 있죠?
커밋을 해보면 우리의 모듈이 추가가 된 것을 볼 수 있습니다.
앜ㅋㅋㅋ 아 꼬였다 또....
뭐 만지다가 또 꼬였네요.
암튼 지금 우리가 A. 메인프로젝트에 있죠?
그럼 지금 import 서브모듈 이름 하면 아무것도 안될거에요.
그래서 raywenderlich는 서브모듈 프로젝트를 메인 프로젝트로 땡겨오거든요.
https://www.raywenderlich.com/690-dependency-management-using-git-submodules
여기 가서 중간쯤 보면, 서브모듈 프로젝트를 메인 프로젝트로 땡겨오는 걸 볼 수 있음.
근데 저는 처음엔 그게 너무 거슬리는거에요. 메인 프로젝트는 저렇게 대놓고 서브모듈이 안보였으면 좋겠었음...
그래서 한번 다 밀고 다시 글쓴건데 또 꼬였네요.
어케했냐면
Target > General > Linked Framewroks 어쩌고
에서 +버튼을 눌러줍니다.
왼쪽 아래에 Add Other를 눌러주세요.
그래서 저 프로젝트 클릭해줬음...
암튼 이렇게 서브모듈을 잘 불러오는 것을 볼 수 있습니다.
그러니까, 지금 제 방법으로 하면 Frameworks폴더안에 저게 들어가게 되는데,
https://www.raywenderlich.com/690-dependency-management-using-git-submodules에서 프로젝트를 그냥 끌어오면 폴더없이..그냥 프로젝트로 덜렁 있어서 거슬렸음 ㅋ
사실 그 프로젝트를 프레임워크 폴더안에 넣으면 되겠죠..?
자 암튼 다음으로 넘어가서
소스트리로 보면, 저렇게 부모듈(서브모듈)에 우리의 서브모듈이 나와있음.
그럼 서브모듈을 변경해보겠씁니다.
서브모듈 프로젝트에 이렇게 변경사항을 주고,
내 메인 프로젝트로 와보면
변경사항이 적용되지 않습니다.
자, 그럼 서브모듈의 변경사항을 깃에 올려야겠죠.
git add .
git commit -m "어쩌구"
git push
를 해줘봅니다.
^____^
아 진짜 딱 내가 바란 결과..바로 이거지..............
근데 좀 한 10초 있어야 풀 받으라는게 뜨네요.
자 저거를 클릭하면
새로운 소스트리가 뜨면서 이렇게 뜨는데, 보통 origin/master와 master와 같이 가잖아요.
그니까 로컬이랑, 리모트랑...근데 이상하게..
아아아아아 아
아 그 그러니까 우리 서브모듈 프로젝트있잖아요. 그거랑, 내 메인 프로젝트에 있는 서브모듈 프로젝트있잖아요.
그러니까 저 master가 내 메인 프로젝트 안에 있는 서브모듈 프로젝트를 말하는거...인듯 한데
내 진짜 서브모듈 프로젝트는 이미 리모트까지 업데이트 된 상태인데,
내 메인 프로젝트 안에 있는 서브모듈 프로젝트는 아직 업데이트가 안된상태인가ㅓ죠..?
악 모르겠네요. 아시는 분ㅇ은 댓글좀
암튼 pull 받아줍니다.
이제 다시 내 메인 프로젝트로 와보면
ZeddViewController가 추가된 것을 볼 수 있습니다.
메인 프로젝트 소스트리 가보면
이러케..그 파일의 변화를 감지하는게 아니라 서브모듈 자체를 감지함.
저 userstate는 gitignore하면 안뜨겠죠,..? 그거까진 안함.
아니 나는 서브모듈이 넘 편한디?....
참고 : https://www.raywenderlich.com/690-dependency-management-using-git-submodules
삭제하는 법을 추가로 적도록 할게요.
submodule 삭제하는 법
https://www.freecodecamp.org/forum/t/how-to-remove-a-submodule-in-git/13228
를 보면서 하나하나 따라해봅시다.
자, 지금 우리의 프로젝트 폴더를 열어주면 이렇게 프로젝트 파일들과 내 서브모듈 폴더가 있는 것을 볼 수 있습니다.
일단, 터미널을 이용하여 내 프로젝트 폴더로 가주세요. 딱 지금 그림에 나와있는 path
자, 가셨으면
.gitmodules파일을 열어줍니다.
이렇게 터미널 사용 안하고 열수도 있는데, .gitmodules는 숨김파일입니다. 지금 숨김파일이라 안보이실텐데요, command + shift + . 를 누르시면 숨김파일이 보여지게 됩니다.
열어주세요. 아니면 vi나 nano를 사용하여 터미널에서 열어주세요.
그러면 위와같이 뭔가 있는걸 볼 수 있는데요, 저걸 지워줍니다!!!!!
저는 이렇게 깔끔해졌네요. 저장해줍니다.
이제, git module이 변경되었다는 변경사항을 git에 add해줍시다.
git add .gitmodules를 해줍니다.
이제,
.git에 들어가줍니다. 숨김파일 보는 법은 아까 말했듯이, command + shift + . 입니다.
그리고 config파일을 열어줍니다.
뭐 여러내용이 있을 수 있는데, 아래에 submodule관련 된 내용(?)이 있네요. 지워줍니다. 그리고 저장해주세요.
그리고 git rm --cached [서브모듈 이름]
을 해주세요.
이제 다시, .git > modules > 내 모듈이 있는 것을 볼 수 있는데요.
rm -rf .git/modules/내 서브모듈
을 해줍니다.
없어져벌임ㅋ
그리고 우리 프로젝트 폴더 안에 있었던 서브모듈도 삭제해줍니다.
rm -rf 서브모듈 path
없어짐!!
지금 이렇게 되어있을 텐데, 이것도 삭제해줘야...겠죠?
삭제해줬음.
그리고 뭐 add하고 commit해보면
서브모듈이 삭제되었다는 것을 볼 수 있읍니다...
제가 뭐 어렵게 접근(?)한걸수도 있는데 암튼 뭐 결과는 똑같으니까..
'공부' 카테고리의 다른 글
Multiple Project 만드는 법 (2) | 2019.03.20 |
---|---|
Xcode Target, Project, Workspace, Scheme 그리고 Build Setting. (16) | 2019.03.18 |
Why use Rx? (4) | 2019.03.06 |
Premiere Pro 기초 ) 자막넣기 (3) | 2019.02.22 |
ABI stability (4) | 2019.01.07 |
- 스위프트 문법
- Git
- FLUTTER
- Combine
- 스위프트
- Accessibility
- 제이슨 파싱
- WKWebView
- Swift
- swift3
- iOS delegate
- swift array
- 회고
- github
- SwiftUI
- swift tutorial
- 피아노
- np-complete
- np-hard
- actor
- ios 13
- WidgetKit
- swift 공부
- swift sort
- fastlane
- Xcode
- UIBezierPath
- swift delegate
- WWDC
- IOS
- Total
- Today
- Yesterday