본문 바로가기

Technical/Development

[Mac/Xcode] git repository 와 연동해서 코딩하기

Mac OSX 에는 Xcode 라는 좋은 무료 개발도구가 있다. 물론 Mac 에서도 CodeLite, CodeBlocks 와 같은 잘 알려진 오픈소스 개발도구를 쓸 수 있지만, Codeblocks 는 Mac OSX 에서의 안정성이 떨어지는 감이 있고 CodeLite 는 Mac 에서 command-line 프로그램 개발 시 iostream 의 cin 을 제대로 처리 못하는 등 조금씩 문제를 안고 있기 때문에 쓰다 보면 불편함이 쌓이게 되고, 그러다 보니 Apple 에서 Mac 을 가장 잘 지원해 주(는 것으로 믿고 싶은...)는 Xcode 같은 Native app으로 다시 돌아가곤 한다.


이번 글에서는 Xcode 로 C++, Objective-C, Swift 와 같은 언어를 사용한 개발에 있어서, 협업 개발을 위한 git 저장소와 Xcode 가 자체적으로 제공하는 git client 기능을 사용하는 방법을 기록해 두려 한다.


개발자의 결벽증

물론 Remote 저장소에서 repository를 cloning 하거나 Local 저장소에서 작업하다가 그때 그때 push 하면서 "미친 년 널 뛰듯이" 아무렇게나 되는대로 작업할 수는 있다. 그러나 사람마다 기준이나 스타일은 다르겠지만, 하드디스크의 작업 영역에 온갖 너저분한 임시 checkout 디렉토리, 수정하다 만듯한 폴더와 파일 조각들이 여기저기 널려 있는 꼴은, 마치 소스의 indent 가 들쭉날쭉한 참상을 보는 것 만큼이나 속상하는 일이기 때문에 다음과 같은 원칙을 정해 둔다


  • 하나의 프로젝트에 대해 주로 작업하는 Local 저장소와 Remote 저장소의 대응은 1:1 일 것
  • 사용하는 Tool 이 Sublime Text 또는 Sourcetree 이건 Xcode 이건 간에 프로그램 소스가 저장되는 repository는 하나만 존재할 것
  • 프로그램 소스코드와 데이터파일을 제외한 프로젝트파일, 바이너리 실행 또는 오브젝트 파일들은 git 을 통한 버전관리에서 제외 될 것


필요한 것들(또는 지금 쓰고 있는 것들)

  • Remote 저장소(Github, Gitlab 계정 또는 본인만의 git server) - 필자는 Remote git 저장소를 위한 AWS 가상머신(doubleshot.io)
  • Git Client - OSX 에 내장된 자체 git & Sourcetree app



정리해 두려는 것들

  • 이미 존재하는 Remote 저장소를 내려 받고 Xcode 에서 작업하거나 또는,
  • 새로운 Local 저장소를 만들어 Xcode 에서 작업하고, Remote 저장소와 연동, 업로드(보관)



1. Remote 저장소를 내려 받고 Xcode 에서 작업하기


1.1 저장소 이름은 gittest2, Remote 저장소의 주소는 ssh://gituser@doubleshot.io/home/gituser/repos/gittest2 라 하자. 


1.2 가장 먼저, Sourcetree 에서 Remote 저장소를 cloning 해서 Local 로 다운로드 한다. 다음으로 Xcode 에서 작업할 새로운 프로젝트를 생성해 두고, Sourcetree 창을 나란히 배치한다.


해당 repository 에서 R-click, "Show in Finder" click


Finder 에서 저장소 폴더를 선택, Xcode 의 프로젝트 내부로 drag 한다(또는 Finder를 거치지 않고 Sourcetree 에서 Xcode 로 직접 drag 해도 된다)


Xcode 는 외부 폴더를 가져올 때의 옵션을 묻는다. 그림과 같이 설정하고 Finish!(Create Group을 하면 Xcode 내에 그룹이 만들어지고 그 내부에 git 폴더가 논리적으로 참조되고, Create Folder Reference 를 하면 프로젝트 내에 그룹이 만들어지지 않고 git 폴더 자체가 직접 참조된다)


Xcode 프로젝트 안으로 외부 git 저장소가 안전하게 import 되어 있다. 오른쪽 정보창에서 저장된 path 를 확인해 보자. Xcode 가 기본으로 자동 생성해 주는 main.cpp 는 휴지통으로...!



1.3 위의 과정을 거치면 Xcode 내에서 add, commit, push 등 모든 git 기능을 사용할 수 있다. Xcode 프로젝트 내에 Working copy 가 복사되어 만들어지는 것이 아니라, Sourcetree 가 Clone 해 둔 repository를 그대로 사용하는 것이다.



2. Local 저장소로 Xcode 에서 작업하고 Remote 저장소와 연동하기


2.1 Git server 에서 Remote 저장소를 생성해 둔다(이 과정은 아래 2.7 이후에 해도 된다). 저장소 이름은 xcodegit_repo, Remote 저장소의 주소는 ssh://gituser@doubleshot.io/home/gituser/repos/xcodegit_repo 라 하자. 


2.2 Sourcetree 에서 "Create a local repo..." 선택, Local 저장소를 생성한다(이 때, "Also create remote..." Check는 반드시 해제).



2.3 Xcode 에서 작업할 새로운 프로젝트를 생성한다.



Xcode 에서 프로젝트 생성 후, 자동 생성되는 main.cpp 는 휴지통으로... 만약 사용할 필요가 없다면 main.cpp 파일이 속한 그룹 전체를 삭제해도 무방함



2.5 Sourcetree 에서 Local 저장소를 R-click, "Show in finder" 선택. Finder 에서 Xcode 프로젝트 내부로 폴더 drag

Xcode 의 프로젝트 내부로 drag(Sourcetree 에서 직접 drag 해도 된다)


1.2와 마찬가지로 가져오기 옵션 설정



2.6 Xcode 로 가져온 Local 저장소 폴더 R-click, "New file" 을 선택(저장되는 path 확인), 작업할 소스 파일(cpp 등) 생성.



2.7 Xcode 에서 소스 파일을 편집, 저장 후 git add, commit 등 실행(로컬 저장소에 저장)


2.8 작업이 완료된 소스 파일을 Remote 저장소와 연동 저장하기 위해서는 소스 파일이 저장된 폴더 선택, Xcode 메뉴의 "Source Control" 선택, Remote 저장소 정보를 설정한다.


Add Remote 선택


Git server 에서 생성해 둔 Remote 저장소의 주소를 등록


코딩 및 테스트 작업이 끝나면 Xcode 메뉴에서 "Source Control" -> Push 를 통해 Remote 저장소에 업로드할 수 있다


<참고> Git server 와의 연결을 ssh 프로토콜을 통할 경우에는, Xcode 가 생성해 주는 ssh 인증키를 git server 측과 '키교환'을 해 두어야 한다  


- Barracuda -