#####################################
# Eclipse와 CVS통한 Team Project 진행 #
#####################################
작성자 : 장형화(hhjang97@venus.uos.ac.kr)
작성일 : 2005. 08. 03
수정일 :
원본 : 인터넷 어딘가에서 주워 왔음
설명 :
################################# ################################# #################################
▩ CVS & Eclipse 연동 작업하기
- Eclipse내에 CVS 클라이언트 내장되어 있음
1. CVS Repository의 등록
- [Window --> Open Perspective --> CVS Repository Exploring] 선택한 후 [Add CVS Repository...]을 클릭합니다.
- Host: 192.168.1.11
- Repository path: D:\CVSRepository
- User: cvsid
- Password: dev1001
- Connection Type: pserver
- use port: 2401
2. eclipse로 import하기
- CVS 서버로 올리는 것을 말한다.
- [File --> New --> Java Project]를 선택합니다.
- Project name: cvsTest로 지정합니다.
- cvsTest를 선택하고 [New --> class]를 선택합니다.
- Package: cvsTest
- Name: HelloCVS
- public static void main()선택하고 Finish를 선택합니다.
- 아래의 소스를 입력합니다.
package cvsTest;
public class HelloCVS {
public static void main(String[] args) {
System.out.println("192.168.1.11에서 수정된 소스입니다. - 왕눈이");
}
}
- 소스 입력이 전부 끝나면 프로젝트를 선택하고 [Team -- Shsre Project]를 선택합니다.
- 기존에 등록된 Repository를 사용하기로 합니다.
- module명을 입력하는 화면이 나오는데 "Use project name as module name"을 선택합니다.
이 선택은 프로젝트 이름과 모듈이름을 같게 하겠다는 것입니다.[Finish] 버튼을 클릭하면 처리가 완료됩니다.
- CVS Repository Exploring Perspective를 선택하고 다음을 클릭합니다.
- [HEAD]노드에 보면 cvsTest란 프로젝트가 등록된 것이 보입니다. 보이지 않으면 [Refresh View]를 선택합니다.
▩ Update(down)
- Update는 서버에서 최신의 소스를 가져오는 것을 말한다.
- [Team --> Update]메뉴를 선택하면 발생하는 상황
. 소스 충돌이 없을 때: 로컬에 있는 소스가 변경되지 않은 상황으로, 파일이 자동으로 CVS서버의 내용으로 변경된다.
. 자동 병합(merge)이 발생할 때: 동시에 같은 리비전(revision)의 ascii파일을 commit하려 할 때 서로 변경한 내용이
다른 줄의 것을 고친 경우 자동으로 병합된다.
. 비 병합 충돌이 발생할 때: 동시에 같은 리비전(revision)의 ascii파일을 commit하려 할 때 같은 줄의 내용을 고친
경우에 자동으로 병합되지 않고 충돌이 발생했다는 메세지가 출력된다.
1. [Team --> Update]메뉴를 선택해서 발생하는 상황의 처리
- 소스 비 충돌, 자동 병합 상황: 아무런 에러 메세제 없는 일반적인 update가 발생한다.
- 비 병합 충돌 상황(같은 줄의 소스를 2곳이상에서 수정한 경우)
. ASCII: 로컬 리소스가 CVS 마크업 텍스트를 사용하여 병합
. binary: 로컬 리소스가 ".#'파일로 변경되면서 서버로부터 파일을 다운로드한다. 이 때는 수정된 부분을 재 편집한다.
2. [Window --> Show View --> Synchronize]를 선택하면 화면 하단에 "Synchronize View"화면이 출력됩니다.
선택한 소스를 클릭하고 [Team --> Synchronize with Repository]를 선택합니다.
"Update"를 위해 모드를 "Incomming Mode"로 변경합니다.
Update방법은 2가지로 나누어 집니다.
- Update from Repository: 비 충돌 상황의 소스인 경우 update된다.
- Override and Update: 자동병합과 비병합인 경우에 사용하는 메뉴로 다이얼로그창에 자동으로 병합할지 아니면
덮어쓰기 할지의 여부를 묻는다. 자동으로 병합을 선택하면 소스가 자동으로 병합되어 로컬소스가 변경되고, 덮어쓰기를
선택하면 로컬 소스가 모두 서버의 소스로 대체됨으로 주의해야 한다.
▩ 새로운 개발자가 추가되는 경우
1. CVS Repository의 등록
- [Window --> Open Perspective --> CVS Repository Exploring] 선택한 후 [Add CVS Repository...]을 클릭합니다.
- Host: 192.168.1.11
- Repository path: D:\CVSRepository
- User: cvsid
- Password: dev1001
- Connection Type: pserver
- use port: 2401
1. [CVS Repository Exploring Perspective]에서 [HEAD]노드에서 프로젝트를 선택하고 [Check Out As Project]를 클릭합니다.
여기서는 cvsTest를 대상으로 합니다.
. Checkout은 서버에 있는 파일을 Local로 가져오는 작업이다.
. 새로운 개발자가 개발에 참여할 경우, 맨 처음 Local PC에 그동안 작업한 소스를
받아올 때 처음 실행한다.
2. 잠시 후 D:\eclipse2\workspace\cvsTest폴더가 생성되고 소스가 다운됩니다. 작업을 시작합니다.
▩ 소스를 수정한 후 commit실행하기
- 수정한 소스를 CVS서버로 전송해서 다른 팀원과 공유하는 기능입니다.
1. [Team --> Commit]를 선택합니다.
- commit시에 commit comment를 달아두면 좋습니다.
- commit시 발생하는 충돌을 최소화하기 위해 항상 최신의 소스로 업데이트하였다가 수정하여 commit한다.
- 소스를 수정하기전에 항상 update를 먼저 한후 commit을 수행한다.
- 만약 새로운 파일이라면 'Add to CVS Version Control'창이 뜨며'Add'해주면된다.
2. [Team --> Synchronize View]에서 'Outgoing mode'로 선택하고 [commit]을 선택합니다.
3. 'commit'전에 소스를 비교해보고 싶으면 [Show Content Comparison]을 클릭합니다.
소스를 비교해서 수정한 후 'commit'을 실행합니다.
4. 충돌상황에서 update(down)를 실행하면 아래와 같은 소스가 보입니다.
package cvsTest;
public class HelloCVS {
public static void main(String[] args) {
System.out.println("eclipse 10:18");
<<<<<<< HelloCVS.java
System.out.println("eclipse2 10:46");
System.out.println("eclipse 10:47");
=======
System.out.println("eclipse2 10:46");
System.out.println("eclipse2 10:48");
>>>>>>> 1.4
}
}
'======='부분을 기준으로 윗 부분은 현재 편집기의 소스이고 아래쪽은 서버에서 들어온 소스입니다.
소스를 아래와 같이 편집합니다.
package cvsTest;
public class HelloCVS {
public static void main(String[] args) {
System.out.println("eclipse 10:18");
System.out.println("eclipse2 10:46");
System.out.println("eclipse2 10:48");
System.out.println("eclipse 10:56");
}
}
[commit]을 실행하면 소스가 서버에 반영됩니다.
▩ Delete
1. 로컬 파일의 삭제
- 파일을 선택하고 [delete]를 합니다. 로컬은 지워지지만 서버는 지워지지 않습니다.
2. 서버에 있는 파일의 삭제
- 서버의 파일을 삭제하려면 프로젝트나 폴더를 선택하고 [commit]을 클릭합니다.
- 이 경우 다른 개발자가 [update]명령을 사용하면 작업하던 파일이 삭제됨으로 주의해야 합니다.
3. 복원
- 이렇게 삭제된 파일을 복원하려면 [Team --> Restore From Repository]을 클릭합니다. 다이얼로그가 보입니다.
- 복원하고 싶은 파일을 선택하고 내용을 확인 한 후 복원합니다.
▩ Source Conflict 해결하기
1. 서버로 commit시 충돌을 알게되는 경우는 같은 소스를 2곳 이상에서 update 받아 각각의 프로그래머가 소스를 수정하고
'Commit'하는 과정에서 발생하게 된다.
이 때 한 개발자는 commit이 이루어지나 다음 개발자는 commit하려면 충돌이 발생한다.
원본소스:원본 소스를 2명의 개발자가 각각 update(Down)받습니다.
package cvsTest;
public class HelloCVS {
public static void main(String[] args) {
System.out.println("eclipse 10:18");
System.out.println("eclipse2 10:46");
System.out.println("eclipse2 10:48");
System.out.println("eclipse 10:56");
}
}
개발자 A: commit이 정상적으로 이루어 집니다.
package cvsTest;
public class HelloCVS {
public static void main(String[] args) {
System.out.println("eclipse 10:18");
System.out.println("eclipse2 10:46");
System.out.println("eclipse2 10:48");
System.out.println("eclipse 10:56");
System.out.println("eclipse2 11:33");
}
}
개발자 B: commit하려고 하면 충돌이 발생합니다.
package cvsTest;
public class HelloCVS {
public static void main(String[] args) {
System.out.println("eclipse 10:18");
System.out.println("eclipse2 10:46");
System.out.println("eclipse2 10:48");
System.out.println("eclipse 10:56");
System.out.println("eclipse 11:32");
}
}
위와 같이 충돌이 발생한 경우 [Team --> Synchronize with Repository]를 클릭합니다.
그러면 Synchronize View에 충돌 모양의 빨간색 아이콘이 출력됩니다.
충돌이 나는 파일을 선택하고 [Show Content Comparison]을 클릭합니다.
그러면 충돌나는 소스가 서로 비교되어 출력이 됩니다.
2. 충돌 발생시 사용할수 있는 툴바의 기능은 아래와 같습니다.
- Show Ancestor Panel: 현재 보이고 있는 화면입니다.
- Three way compare: 충돌이 난 소스를 기본으로
. 충돌이 나지 않은 버전
. 먼저 commit된 소스
. 로컬에서 commit하려는 소스를 보여줍니다.
- Two way compare: 충돌난 양 소스만 보여줍니다.
- Copy whole document Left to Right: 왼쪽 패널의 전체 소스를 오른쪽 패널로 복사합니다.
- Copy whole document Right to Left: 오른쪽 패널의 전체 소스를 왼쪽 패널로 복사합니다.
- Copy current change from Left to Right: 왼쪽 패널에서 변경된 부분만을 오른쪽 패널로 복사한다.
- Copy current change from Right to Left: 오른쪽 패널에서 왼쪽 패널로 변경된 부분만을 복사한다.
- Select Next Difference: 양쪽 소스가 다른 다음 부분으로 이동하여 선택한다.
- Select Previous Difference: 양쪽 소스가 다른 이전부분으로 이동하여 선택한다.
3. 충돌의 해결방법
- 서버의 소스로 로컬의 소스를 교제한다.
- 로컬의 소스로 서버의 소스를 교체한다.
- 로컬과 서버의 소스를 병합한다.
- Mode를 Incoming/Outgoing Mode로 전환합니다.
System.out.println("eclipse 11:32"); 왼쪽 패널에 문장을 추가하고
[Override and Commit...] 을 클릭합니다.
변경된 소를 반영할것인지 묻는 창에서 [YES]를 클릭합니다.
서버에 릴리즈할 것인지 묻는 창에서 [YES]를 클릭합니다.
▩ Branching
- 원본 소스를 보존하며 패치버전을 제작할시에 사용한다.
1. [Team --> Branch...]을 클릭한다.
- Branch Name: HelloCVS
- Version Name: Root_HelloCVS_1
▩ Tagging
- 소스의 버전 생성
- 프로젝트를 선택하고 [Team --> Tag as Version]을 클릭한다.
- 열린 창에서 [Details]을 선택하면 포함되는 Branch가 보이게 됩니다.
- 추가가 완료되면 CVS Repository에 Versions에 추가된것을 확인 할 수 있습니다.
▩ Merging
- Branch를 통해 수정된 소스를 원본 버전에 병합한다.
#################################
#
#################################