일반적으로 개발자가 프로젝트에 처음 투입이 되면 제일 먼저 받는 정보가 소스 형상관리 서버 경로입니다.
소스를 먼저 확보해야 분석을 하던 수정을 하던 할테니까요.
Git도 마찬가지로 Remote Repository 경로를 받아서 자신의 Local Repository에 경로를 추가하고 소스를 내려 받습니다.
본 메뉴얼에서는 Remote Repository 경로 정보를 받아서 소스를 내려받고 수정한 소스를 commit하는 과정과 commit한 소스를 다시 Remote Repository 서버로 Push하는 과정을 다룰 예정입니다.
여기서 중요한 부분 한가지를 먼저 집고 넘어가겠습니다. SVN의 Commit과 Git의 Commit은 서로 동작하는 의미가 조금 다릅니다.
SVN의 Commit은 작업한 소스를 중앙 Repository에 전송하는 기능으로 바로 다른 개발자들과 소스가 공유되는 반면에 Git의 Commit은 자신의 Local Repository에 소스 이력을 관리하고 있기 때문에 Commit을 한다고 해도 다른 개발자들과 소스 공유가 되지 않습니다.
Git은 Commit 이후에 Push라는 과정을 한번 더 거쳐야 SVN의 Commit과 같은 동작을 합니다.
그리고 이해하기 쉽게 Checkout이라는 명칭으로 적어 놓았지만 본문에서는 SVN에서 의미하는 Checkout입니다. 즉 소스를 내려받는 다는 의미로 적어놓은 것이구요, Git의 checkout의 의미는 branch를 변경하는 의미로 사용됩니다.
SVN에서 의미하는 소스를 내려받는 부분은 Git에서는 Clone으로 이해하시면 됩니다. (완전히 같은 의미는 아닙니다.)
Step 1. 이클립스 Git 플러그인 확인
팝업 창이 열리면 Git을 선택하고 OK를 선택합니다.
만약 Open Perspective 팝업 창에 Git이 안보인다면 이클립스 플러그인이 설치가 안되어 있기 때문일 것입니다. 예제에서 사용하는 이클립스 버전에서는 기본으로 제공하고 있습니다만 하위 버전을 이용하시는 분들 중 Git 플러그인이 설치가 안되어 있다면 추가하신 후 동일하게 진행하시면 됩니다.
아래와 같이 Perspective 화면 Java EE에서 Git으로 이동 되었다면 이클립스에서 Git을 사용할 준비가 된 것입니다.
Step 2. Import Git 프로젝트
Git 플러그인이 정상 설치 되어 있다면 이제 Remote Repository로 부터 소스를 받아오도록 합니다.
이클립스에서는 간단하게 import 기능으로 Git Repository로 부터 프로젝트를 생성할 수 있습니다.
먼저 Project Explorer에서 오른쪽 마우스를 누른 후 import를 선택 후 하위 메뉴에서 다시 import를 선택하면 Import를 선택하는 팝업 창이 발생합니다.
발생한 팝업창에서 Projects from Git을 선택하고 Next를 누릅니다.
두번째 화면에서 Clone URI를 선택하고 Next를 선택합니다. Remote Repository를 Local Repository로 복사하기 위함입니다.
Source Git Repository를 설정하는 팝업에는 Remote Repository를 구축하신 분께 전달 받은 URI정보를 입력합니다.
예제에서 사용할 URI는 제 Local Linux에 설정되어있는 Git을 사용할 것이며 경로는 root@192.168159.131:/opt/git/repository/example.git 입니다.
URI 부분에 해당 경로를 넣으면 나머지 host나 Repository path는 자동으로 설정됩니다. SSH 비밀번호는 따로 입력해 주세요.
이제 Remote Repository에서 사용할 Branch를 선택하는 팝업이 나오는데요, 제가 예제로 사용할 Remote에는 master 하나밖에 등록이 안되어 있기 때문에 저는 하나만 선택하고 Next를 누르도록 하겠습니다.
Next를 누르면 Remote Repositoy에서 데이터를 가져와 저장할 Local Repository 경로와 초기 사용할 Branch명과 Remote Repository의 이름을 지정하는 화면이 나옵니다.
예제에서 Local Repository는 d:/unus/dev_workspace/example-git으로 설정할것이며, 사용한 Remote Repository는 제 가상 장비의 Linux에 설치되어 있기 때문에 이름을 vmLinux로 설정해 놓겠습니다.
설정을 하신 후 Next를 눌러주세요.
다음 화면은 Project Wizard를 선택하는 화면이 나오는데 기본으로 설정되어 있는 general project를 선택하고 Next를 누릅니다.
이클립스에서 사용할 프로젝트명을 변경하실려면 위 화면에서 Next를 누르시고 만약 아까전 Local Repository에 설정한 폴더 명으로 사용하실거면 이전 Project Wizard를 선택하는 화면에서 Finish를 누르셔도 됩니다.
저는 화면을 보여드리기 위해 Next를 눌렀기 때문에 프로젝트명은 수정없이 그대로 이용하도록 하겠습니다. 마지막으로 Finish를 눌러줍니다.
여기까지 오류 없이 잘 따라 오셨다면 Remote Repository에 있는 정보들을 자신의 Local Repository로 복제를 한 후 소스까지 내려 받은 상태입니다.
하지만 내려받은 소스는 이클립스 설정파일이 없기 때문에 현재 해당 프로젝트는 그냥 문서파일에 불과 합니다. 간단한 예로 내려받은 위 소스에서 뒤에 세미콜론을 지워도 에러 표시가 나지 않습니다.
이클립스가 현재는 그냥 문서로 인식하고 있기 때문이죠. 그럼 해당 프로젝트를 Java Project로 설정해 보도록 하겠습니다.
프로젝트 환경 설정 화면으로 이동 후 Project Facets를 선택합니다. (프로젝트 환경 설정 화면은 프로젝트명에서 오른쪽 마우스를 누르신 후 Properties를 선택하시면 됩니다.)
현재 프로젝트에 아무런 설정정보가 없기때문에 해당 문구가 표시될 것입니다. 예제에서는 해당 프로젝트를 Java Project로 변경할 예정이므로 "Convert to faceted from..." 을 선택합니다.
그러면 선택 가능한 설정 목록들이 나오는데요, 여기서 java를 선택하고 버전을 고른 후 OK를 눌러 줍니다.
여기까지 잘 따라 오셨다면 이제 소스를 빌드하고 또 수정하며 개발을 진행할 준비가 완료된 상태입니다.
Step 3. 소스를 수정 후 Commit 하기
프로젝트 설정이 되었으므로 이제 본격적인 개발에 돌입하게 되는데요, 자신이 맡은 기능을 구현 하면 테스트 진행 이후 다른사람과 공유하기 위해 Remote 서버로 소스를 전송해야 하는데, 이번 단계는 Remote 서버까지 안가고 Local Repository에 이력을 남기는 Commit단계를 다루도록 하겠습니다.
바로 소스를 Remote에 올리지 않고 Local에만 저장해 놓는지 의문이 드실 수 있는데요,
예를들어 로그인 기능을 구현한다고 가정했을때 3일 정도가 걸린다고 해봅시다. 아시다시피 기능 구현이 완료되기 전에 다른사람에게 공유를 하게 되면 다른사람들쪽은 오류가 발생하게 되겠죠. 그래서 보통 하나의 기능을 모두 구현한 후 Commit을 하게 됩니다.
그런데 만약 1일째 작업한걸 2일째 잘못 생각하여 소스를 수정했다고 했을때 생각해보니 1일째 상태로 되돌려야 하는 경우가 종종 있습니다.
기존같으면 소스를 수정하기 전에 이전 소스를 모두 주석처리 해놓지 않은 이상 새로 작성을 해야하죠. 하지만 Git을 쓰게되면 자신의 Local Repository에 이력이 관리되고 있으므로 1일째 소스로 Revert 시키면 간단히 완료됩니다.
제가 생각하기에 Local Repository가 있을때의 가장 큰 장점 중 하나라고 생각됩니다.
예제에서는 SampleService라는 클레스를 새로 만들고 간단히 메소드 하나정도 추가하여 Commit을 진행 해보겠습니다.
Commit은 SVN과 동일하게 이루어 집니다.
프로젝트명에서 오른쪽 마우스를 누르신 후 Team을 선택하시고 Commit을 합니다. SVN은 Commit을 하기전 충돌나는 부분을 확인하기 위해 동기화를 먼저 해보지만 Local에서 이루어지는 기능이므로
특별한 경우가 아니라면 충돌이 발생하지 않습니다.
Commit을 누르면 History에 보여질 메세지를 작성하는 팝업창이 발생합니다. 내용을 작성하고 파일을 선택 후 Commit 버튼을 누르면 완료됩니다.
이클립에서는 해당 팝업에서 보시는 바와 같이 Commit과 Push를 동시에 진행하는 기능을 제공하는데요, 위에서 예제로 설명드렸듯이 Local Repository의 장점을 최대한 살리기 위해 최종 기능 완료로 인한 경우가 아니라면 Commit만 진행하도록 합니다.
Step 4. 최종 반영을 위한 Push
Push를 하게 되면 자신의 Local Repository에 들어있는 이력 정보들이 Remote Repository로 전송되게 됩니다.
위에서 언급했듯이 Commit함과 동시에 진행할 수 있지만 별도로 Push만 진행하는 부분을 다뤄보겠습니다.
프로젝트명에서 team을 선택하면 하위 메뉴로 나오는 항목에서 Push관련 사항이 두가지가 있습니다. push to upstream과 push branch인데요.. push branch는 특정 branch만 전송하는 기능이므로 push to upstream을 이용하겠습니다.
(프로젝트를 진행하다 보면 특정 branch만 전송해야 할경우는 존재할 수 있으므로 기억하고 계세요.)
데이터가 전송 된 후 결과 팝업이 발생 합니다. OK를 눌러 Push를 마무리 합니다.
Step 5. 소스 업데이트를 위한 Pull
위에서 신규 클레스를 만들어 Push한 개발자를 A라고 하면 B라는 개발자는 해당 소스를 Remote Repository로 부터 받아와 자신의 Local Repository에 Update를 해야 합니다. 이 때 사용하는 기능이 Pull 입니다.
아래 이미지의 붉은색으로 표시해 놓은곳을 보면 아직 신규로 만들어진 폴더가 없음을 확인 할 수 있습니다.
프로젝트명에서 오른쪽 마우스 누른 후 team => pull을 선택합니다.
Update 정보를 보여주는 팝업이 발생하면 OK를 눌러 마무리 합니다.
정상적으로 Update가 됐다면 B개발자도 아래 이미지 처럼 SampleService 클레스가 생성되었을 것입니다.
이번 문서에는 개발을 진행 중 가장 빈번히 사용하게 되는 소를 올리고 내려받는 기능에 대해 알아 보았습니다.
다음엔 동일한 문서를 서로다른 개발자가 수정을 했을때에 발생하는 충돌 문제와 이를 해결하는 방법에 대해 알아보도록 하겠습니다.
'형상관리' 카테고리의 다른 글
Push와 Pull 과정에서의 충돌 문제 (0) | 2017.06.27 |
---|---|
Git 프로젝트 생성하기 (0) | 2017.06.20 |
Git 설치 및 명령어 정리 (0) | 2017.06.20 |