티스토리 뷰

반응형


안녕하세요 :) 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