'Subversion'에 해당되는 글 39

  1. 2016.06.18 Subversion 버전 정보
  2. 2012.07.18 [TortoiseSVN] 이미 존재하는 프로젝트 형상관리하기
  3. 2012.01.19 [TortoiseSVN] Checkout
  4. 2012.01.10 [SVN] Path is not a working copy directory
  5. 2011.10.11 [SVN] Update되지 않는 디렉토리가 있는 경우
  6. 2011.10.05 [SVN] RA layer file already exists
  7. 2011.10.05 [SVN] Your file or directory '...' is probably out-of-date
  8. 2011.10.05 [SVN] 커밋되지 않은 디렉토리
  9. 2011.10.05 [SVN] RA layer request failed
  10. 2011.08.15 NetBeans에서 SVN 저장소 Checkout하기 (Eclipse와 소스 공유)
  11. 2011.08.03 svn:ignore에서 제외하기
  12. 2011.06.29 SVN 저장소를 TOW로 옮기기
  13. 2011.04.03 SVN Commit 에러 - 시간이 오래되었습니다.
  14. 2010.11.18 SVN 주석 규칙
  15. 2010.10.18 소스 병합(Merge) Tip
  16. 2010.08.25 Subversion에서 Tag를 잘못 단 경우
  17. 2010.08.09 [TortoiseSVN] 저장소의 변경된 사항 확인하기
  18. 2010.07.23 형상관리 상황 보기 - Eclipse SVN Repository
  19. 2010.07.21 버전 관리에 대한 이것저것...
  20. 2010.07.21 Subversion을 활용한 소스 관리 전략
  21. 2010.07.21 Eclipse에서 브랜칭, 태깅하기
  22. 2010.07.18 Eclipse에서 Subversion에 프로젝트 올리기
  23. 2010.05.11 Eclipse Galileo + Subversive - Check Out 1
  24. 2010.03.25 미루던 일, SVN에서 소스 Checkout하기
  25. 2010.02.23 Ticket에 소스변경사항 링크걸기
  26. 2009.10.06 Subversion에서 소스만 가져오기
  27. 2009.09.07 [SVN] Transaction is out of date
  28. 2009.09.01 Trac Links
  29. 2009.08.30 협업을 위한 도구
  30. 2009.08.23 Eclipse Galileo + Subversive

Subversion 버전 정보

- Client

$ svn --version

svn, 버젼 1.5.3 (r33570)
    Oct 23 2008, 20:11:04에 컴파일 됨

Copyright (C) 2000-2008 CollabNet.
Subversion은 오픈 소스 소프트웨어 입니다, http://subversion.tigris.org/
이 제품은 CollabNet이 개발한 소프트웨어를 포함하고 있습니다.(http://www.Collab.Net/).

저장소(repository) 접근 모듈(RA) 목록:

* ra_neon : Neon을 이용하여 WebDAV 프로토콜을 통해 저장소에 접근하는 모듈
  - 'http' 스키마를 처리합니다.
  - 'https' 스키마를 처리합니다.
* ra_svn : svn 네트워크 프로토콜을 사용하여 저장소에 접근하는 모듈
  - 'svn' 스키마를 처리합니다.
* ra_local : 로컬 디스크에 있는 저장소를 접근하기 위한 모듈
  - 'file' 스키마를 처리합니다.

$ whereis svn
svn: /usr/local/bin/svn /usr/local/share/man/man1/svn.1


- Server

svnadmin --version

svnserve --version


서버에 들어갈 권한이 없어서...응답을 보거나 헤더 정보에서 얻을 수 있다.





[TortoiseSVN] 이미 존재하는 프로젝트 형상관리하기

보호되어 있는 글입니다.
내용을 보시려면 비밀번호를 입력하세요.

[TortoiseSVN] Checkout

 

Repository 의 내용이 로컬 디텍토리로 모두 받아 진다. 

 

 

 

 

 

 

 

 

[SVN] Path is not a working copy directory

Eclipse에서 프로젝트를 Share하려고 SVN을 선택했는데 에러가 발생함.


검색을 해보니 Cleanup을 하라고 하는데 아직 SVN에 올리지도 않았는데...쩝

이런 글이 있어서 JavaHL에서 JavaSVN로 바꿨다.

 


[SVN] Update되지 않는 디렉토리가 있는 경우

//dist 디렉토리를 업데이트받는데 에러 발생
update -r HEAD D:/reps/nwds/prt.xxx/dist
  Obstructed update
svn: Failed to add directory 'D:/reps/nwds/prt.xxx/dist/PORTAL-INF/pagelet/test': object of the same name already exists

//에러나는 디렉토리에서 업데이트를 해도 에러 발생
update -r HEAD D:/reps/nwds/prt.xxx/dist/PORTAL-INF/pagelet
  Obstructed update
svn: Failed to add directory 'D:/reps/nwds/prt.xxx/dist/PORTAL-INF/pagelet/test': object of the same name already exists

//삭제도 안됨.
delete --force D:/reps/nwds/prt.xxx/dist/PORTAL-INF/pagelet/test
  D         D:/reps/nwds/prt.xxx/dist/PORTAL-INF/pagelet/test/excel.jsp
  D         D:/reps/nwds/prt.xxx/dist/PORTAL-INF/pagelet/test/list.jsp
  Unmergeable scheduling requested on an entry
svn: 'test' is not under version control

//해당 디렉토리를 직접 삭제한 뒤 업데이트를 한다.
//에러가 발생하던 test 디렉토리가 다시 생겼고 파일이 업데이트되었음.
update -r HEAD D:/reps/nwds/prt.xxx/dist
  A  D:/reps/nwds/prt.xxx/dist/PORTAL-INF/pagelet/test
  A  D:/reps/nwds/prt.xxx/dist/PORTAL-INF/pagelet/test/excel.jsp
  A  D:/reps/nwds/prt.xxx/dist/PORTAL-INF/pagelet/test/list.jsp
  U  D:/reps/nwds/prt.xxx/dist/PORTAL-INF/portalapp.xml
  Updated to revision 208.

[SVN] RA layer file already exists

commit -m "" D:/reps/nwds/prt.xxx/src.core/net/test/TestComponent.java
  Adding         D:/reps/nwds/prt.xxx/src.core/net/test/TestComponent.java
  RA layer file already exists
svn: Commit failed (details follow):
svn: File '/svn/TestRop/prt.xxx/trunk/src.core/net/test/TestComponent.java' already exists

- 환경 : NWDS + Subclipse_0.9.3.3
- 특정 파일이 커밋이 안됨.
- 해당 파일 Update 비활성화
- Revert를 해도 변동없음.


- 해당 패키지를 Update 하면 다음과 같은 에러 발생
update -r HEAD D:/reps/nwds/prt.xxx/src.core/net/test
  Obstructed update
svn: Failed to add file 'D:/reps/nwds/prt.xxx/src.core/net/test/TestComponent.java': object of the same name already exists

- 저장소에서 해당 파일을 찾아보면 이미 존재하고 있음.
저장소의 파일과 작업본의 파일을 비교해 보면 동일하다.
그래서 작업본에서 해당 파일을 삭제하고 Update 받아서 해결함.

- Cleanup 으로 하면 된다고도 함.

[SVN] Your file or directory '...' is probably out-of-date

commit -m "" D:/reps/nwds/prt.xxx/src.core/net/test/TestDAO.java
  Sending        D:/reps/nwds/prt.xxx/src.core/net/test/TestDAO.java
  Merge conflict during commit
svn: Commit failed (details follow):
svn: Your file or directory 'TestDAO.java' is probably out-of-date
svn:
The version resource does not correspond to the resource within the transaction.  Either the requested version resource is out of date (needs to be updated), or the requested version resource is newer than the transaction root (restart the commit).

- 환경 : NWDS + Subclipse_0.9.3.3
- 충돌 발생


- Update, Revert 하면 충돌파일 사라짐.

- 해당 파일은 수정전으로 돌아감.
수정한 내용을 붙여넣고 커밋했음.

[todo] 파일을 복사해 넣어도 되지 않았을까?

[SVN] 커밋되지 않은 디렉토리

/dist/PORTAL-INF/jsp/xxx/ 에 있는 파일들에 대해 분명히 커밋했는데 다른 계정에서 Update를 해도 안들어옴.

xxx/ 에 대해서 버전 관리가 제대로 되지 않는거 같다.

저장소에 xxx/ 가 없다.
이클립스(NWDS)상에서 삭제가 되지도 않는다.
delete --force D:/reps/nwds/prt.xxx/dist/PORTAL-INF/jsp/board
  D         D:/reps/nwds/prt.xxx/dist/PORTAL-INF/jsp/board/excelDownload.jsp
  D         D:/reps/nwds/prt.xxx/dist/PORTAL-INF/jsp/board/list.jsp
  D         D:/reps/nwds/prt.xxx/dist/PORTAL-INF/jsp/board/view.jsp
  Unmergeable scheduling requested on an entry
svn: 'board' is not under version control

- 탐색기에서 삭제하고 다시 commit 한다.
commit -m "" D:/reps/nwds/prt.xxx/dist/PORTAL-INF/jsp
  Adding         D:/reps/nwds/prt.xxx/dist/PORTAL-INF/jsp/board
  Adding         D:/reps/nwds/prt.xxx/dist/PORTAL-INF/jsp/board/view.jsp
  Adding         D:/reps/nwds/prt.xxx/dist/PORTAL-INF/jsp/board/list.jsp
  Adding         D:/reps/nwds/prt.xxx/dist/PORTAL-INF/jsp/board/excelDownload.jsp
  Transmitting file data ...
  Committed revision 134.
board/ 가 추가되었다.
반드시 commit 된 리비전을 확인할 것!

[SVN] RA layer request failed

commit -m "작업한 소스 올림" D:/reps/nwds/prt.xxx/src.core/net/test/util
  Adding         D:/reps/nwds/prt.xxx/src.core/net/test/util
  RA layer request failed
svn: Commit failed (details follow):
svn: MKCOL of '/svn/TestRop/!svn/wrk/abc-dcd-wijl/prt.xxx/trunk/src.core/net/test/util': 405 Method Not Allowed (http://1.2.3.4:8080)

- 저장소에 동일한 소스가 있음.
- 소스, 패키지 지우고 상위 디렉토리에서 Update

NetBeans에서 SVN 저장소 Checkout하기 (Eclipse와 소스 공유)

1. 이클립스에서 웹프로젝트를 생성해서 SVN에 올림.

2. 넷빈즈에서 가져온다.


3. Local Folder에 소스는 내려받아졌다.
이때 내려받은 소스의 디렉토리명을 적절하게 변경한다.
위와 같은 경우는 TestWebapp이므로 변경할 필요가 없지만 저장소의 trunk 디렉토리를 받으면 로컬에도 trunk라는 이름으로 생김.

4. 프로젝트를 선택한다.


5. 프로젝트 생성 위치를 지정한다.


5. 각 디렉토리를 지정한다.


6. 버전관리하지 않아도 되는 리소스를 지정한다.


build.xml은 다른 곳에서 사용할 수 있으므로 제외
nbproject/ 는 넷빈즈에서 다시 생성해 주므로 제외
build/ 도 제외(여기서 안보이는 것은 Eclipse에서 이미 해서 그럴거야)
conf/ 는 포함시키는게 좋을 듯       [todo] 아직 미정임...
sun-web.xml 필요에 따라 설정을 추가할 수도 있으므로 포함시킨다.

svn:ignore에서 제외하기

todo=여기에 대한 정립을 하자. 결론은 .classpath를 잘 추가하면 된다. 그리고 .settings/도 올려야 함.
todo=svn사용시 제외 항목들(svn ignore)
target/
web-app/plugins/
web-app/WEB-INF/classes/    =todo

.classpath 파일을 svn:ignore에 포함시키면 안되는데 습관적으로 추가시켜 버렸다.
.classpath 파일을 형상관리하도록 다시 설정해야 함.

- Subclipse 기준
Team - Show Properties
svn:ignore 속성 변경후 commit   ([todo] 이걸 먼저 add to version control 처리를 해야 하나?)


그리고 나서 update, commit


SVN 저장소를 TOW로 옮기기

TOW를 사용하면서 기존에 사용하던 SVN 저장소를 가져왔다.

1. SVN 서버에서 옮기려는 저장소를 복사해서 C:\TOW\SvnRepo\Projects\PROJECT에 옮긴다.
2. 싱크를 맞춘다.
C:\TOW> trac-admin PROJECT resync


끝~

- 2016-06-21 Eclipse에서 Commit하고 History까지 확인했는데, Trac에서는 NoSuchChangeset이 발생함.
이런 경우에도 resync를 하면 해결된다.


SVN Commit 에러 - 시간이 오래되었습니다.

test 패키지를 삭제하고 commit 하였음.
(히스토리를 확인해보니 test 패키지에 있던 파일 삭제만 commit 이 되었다.)
test/ 가 남아서 이것도 commit 하려고 하니 에러가 발생한다.
이 포스팅대로 Java EE Perspective 에서 commit 해도 동일한 에러가 발생.
(해당 글에서는 update 를 하라고 했음)

에러가 발생할 당시 리비전이 3이었음.
삭제후 리비전이 43이므로 시간이 오래되었다는 에러가 발생한거 같다.
update 를 하니 리비전이 43으로 변경되었다.


commit 완료

SVN 주석 규칙

- 주석은 반드시 달아야 한다.

- 관련 티켓이 있으면 적어둔다(#ticket_no)

- 글머리를 이용한다.
  • [Branch] 새로운 브랜치를 시작하는 경우
  • [Merge] 병합하는 경우, 어디와 어디를 병합했는지도 적는다.
    예) [Merge] trunk를 B01 branch에 병합, B01 branch를 trunk에 병합
  • [Tag]
    예) [Tag] 운영계에 반영


소스 병합(Merge) Tip

1. 먼저 SVN Repositories에서 trunk의 History를 확인한다.
trunk의 변경사항을 알면 merge 작업시 도움이 된다.
(어떤 파일을 수정했는지)

2. 충돌난 소스를 확인한다. : 아주 많을것이다.

3. trunk에서 변경된 파일을 확인한다. : 이 부분은 branch에서도 같은 부분을 작업했을수도 있으므로 자세히 확인한다.

4. 나머지 충돌난 파일은 branch에서 작업한 내용이므로 한꺼번에 충돌을 해소해도 된다.(Edit Conflict, Mark as Merged)

- trunk에서는 존재하는 파일인데 branch에서 삭제한 파일은 추가된 이미지(
)로 보인다.
JEE Perspective에서 직접 삭제한다.

- Override and Update로 잘못 받은 파일은 Revert하면 된다.
(어차피 merge는 로컬에서만 발생하였다.)

- branch에서 어떤 부분을 수정했는지 보려고 할때 trunk와 머지해보면 알수 있다.
머지하면 로컬 소스가 변경되므로 Revert 기능으로 되돌리면 된다.
(이때 branch에서 삭제되어서 trunk와 머지하면 추가되는 파일은 Revert를 해도 안지워진다. 직접 지운다. 그리고 나서 branch와 동기화를 해본다.)

Subversion에서 Tag를 잘못 단 경우

Subclipse에서 태그를 달았는데 trunk/ 가 생겼다.


URL을 변경하지 않고 그냥 달아서 발생했음.


Subclipse에서는 URL을 직접 적어야 한다.
http://1.2.3.4/rep/project/tags/R20100703A

[TortoiseSVN] 저장소의 변경된 사항 확인하기

Subversion에서 저장소의 변경된 사항 확인하기
Subversion 명령어

- 로컬 작업본에서 변경사항은 없다.


- 반드시 Check repository로 서버의 변경사항을 확인한다.


- 변경사항을 비교해 본다.


- 업데이트 받는다.


형상관리 상황 보기 - Eclipse SVN Repository

SVN을 trunk만 사용하다 branch와 tag를 사용하는데 어디가 최신 소스인지, 내가 작업을 해야 하는 곳인지 헷갈린다.

일반적으로 trunk가 최신 소스일거다.
특별한 작업이 있다면 branch가 있을거고.

SVN Repository를 보자.
리비전 608에서 태그를 달아서 610이 되었다.
아마도 trunk 608과 동일하겠지. 그후 trunk에서 변경사항이 없었다.

항상 여기서 확인하자.

- 소스 체크아웃할때도 여기에서 소스 위치와 WebContent 위치를 확인할 것.
- 프로젝트 생성시 web.xml 생성하지마.
- svn:ignore 반드시 설정할 것.

버전 관리에 대한 이것저것...

- 버전 관리되고 있는 파일을 버전 관리에서 제외하기 : 참고

  1. 동기화
  2. SVN Repository에서 해당 파일을 삭제한다.(서버)
  3. 로컬 개발 환경에서 해당 파일을 백업받아 둔다.
  4. SVN에서 update 받는다.
  5. 백업받아둔 파일을 다시 넣으면 svn:ignore 가 활성화된다.
  6. 커밋한다.
- svn:ignore 프로퍼티를 수정해서 적용해봤는데 안됨...왜 그럴까? =-=> todo


- Maven 또는 Ivy 로 관련 라이브러리를 관리하는 것도 좋겠다.

Subversion을 활용한 소스 관리 전략

- 소스 형상 관리를 하다보면 이런 경우가 많다.
현재 운영되고 있는 시스템인데 현업으로부터 빈번한 수정사항이 나와서 소스변경이 잦다.
가끔 개선사항으로 일정 기간이 소요되는 작업이 나오는데 소스를 로컬에서 관리한다.
Subversion을 소스 저장소로만 사용하고 있다.

Subversion의 기능을 좀더 활용해 보자.
아래와 같은 과정을 거치도록 한다.
* 메인 스트림은 trunk, 개발 스트림은 B1으로 이해하자.

1. 모든 소스를 형상관리 시스템에 올려서 동기화 시킨다.

2. 현재 소스가 운영되고 있는 소스와 동일하다. : R1 태깅

3. 2주일 정도의 작업량이 들어와서 소스를 수정해야 한다.
현재는 형상관리 시스템과 운영되고 있는 소스와 일치시키기 위해 개발되고 있는 소스는 개발자의 로컬에만 존재한다.
개발자 장비가 없으면 수정하던 작업이 진행이 안된다.
이건 문제가 있다.

4. 메인 스트림과 별도의 개발 스트림을 만든다. : B1 브랜칭

5. B1에서 개발을 진행한다. : 소스를 수정하고 커밋한다.

6. 개발 진행중에 현재 운영중인 시스템에서 버그가 발견된다.
trunk에서 버그가 발견된 것이다.
현재 운영중인 소스(2)를 가져온다. : R1으로 스위칭
별도의 프로젝트를 만들어서 가져와도 되지만 동일한 소스때문에 헷갈릴 수도 있다. 작업이 끝나면 소스는 하나만 유지하자.

7. R1에서 버그를 수정하고 테스트한다.
R1에서 커밋을 하려고 하면 태그를 수정하겠냐고 물어본다. 하면 안된다.
태그는 특정 시점에 대한 스냅샷이다.
R1을 바탕으로 B1 브랜치도 만들어졌다.

8. trunk로 스위칭해서 커밋한다.

9. trunk에서 수정된 소스를 B1에도 적용한다.
그래야 버그가 처리된 소스가 최종적으로 적용된다.
B1에서 URL을 trunk로 두고 머지한다. 소스가 충돌나면 해결하고 커밋한다.

10. R2 태깅, 운영계에 적용, 이제부터 운영되는 소스는 R2다.

11. 개발이 완료되었음. branch에서 커밋

12. 개발계에 B1 소스를 올린다.

- 메인 스트림에서 버그나 수정사항이 나오면 trunk에서 수정해서 B1으로 머지한다.
테스트되는 소스는 B1이지만 trunk와 동일한 소스이다. trunk의 수정사항이 모두 반영된 소스이다.
테스트하면서 나온 수정사항은 B1에서 수정한다.(이 때 최신 소스는 B1이다. 그리고 이것으로 테스트되어야 한다)

13. 테스트가 완료되면 trunk에서 URL을 B1으로 두고 머지하고 R3 태깅, 운영계에 적용

여기서 중요한 점은 메인 스트림에서 변경되는 소스를 개발 스트림에도 적용을 한다는 것이다.
그리고 메인 스트림으로 반영하는 것은 운영계에 올리기 전에 한다.
운영계에 올리는 소스는 반드시 태그를 걸어 둔다.

- 2010-07-22
문득 trunk에서 태깅을 해야 하나 하는 생각이 든다.
현재 운영되고 있는 소스는 trunk의 최신본(HEAD)이다.
마지막 태깅된 소스와 동일하다.
브랜칭을 하기 전의 태깅은 필수고 trunk에서 직접 소스를 수정해서 반영하는 경우도 있으므로 태깅은 필수다.
이제는 개발자들이 trunk에서 커밋을 마음놓고 해도 된다.
단, 테스트가 된 소스를 올려야겠지.

Eclipse에서 브랜칭, 태깅하기

Merge하는 부분은 여기를 참고하는 것이 더 좋다.

지금 현재 개발 프로세스는 운영기에 소스를 적용한 뒤에 SVN 저장소에 커밋을 한다.
개발 브랜치를 따로 가져가서 소스를 관리하자.

- 먼저, 브랜치를 만든다.
Subversive를 사용하면 branches/가 이미 만들어져 있다.

브랜치 이름은 Trac 마일스톤 이름(또는 티켓 번호)과 동일하게 가져가면 좋을 거 같다.

- 브랜치에서 작업을 하고 커밋을 한다.

- 메인 스트림으로 돌아와서(Switch) 병합한다.(Merge)
URL은 수정 작업을 한 브랜치의 URL을 선택한다.[각주:1]
리비전을 선택할 수도 있다.

- 충돌이 나는 경우 소스 비교가 제대로 되지 않으므로 주의한다.
소스를 검토해서 수정후 Mark as Merged를 하면 충돌 표시가 사라진다. 커밋한다.
trunk에 있는 소스 리비전은 47
그래서 Remote File에 보이는 리비전도 47이다.
branches에서 merge한 소스는 48이다.(int balance //branch)
Edit Conflicts를 하면 오른쪽 뷰어(Repository로 표시됨, 지금은 Remote File 47)는 다른 리비전을 보여주고 Working 소스는 현재의 리비전인 47을 보여주기 때문에 소스 비교하기가 힘들다.
직접 수정하는 것이 편하다.

- 자주 병합을 해서 빅뱅을 피하라고 함.

- Revert 기능을 이용하면 병합하기 전으로 되돌릴 수 있다.

- 특정 리비전에 의미있는 태깅을 할 수 있다.
  1. 이 경우는 메인 스트림(trunk)에서 로 입력한 브랜치를 가져오게 된다. [본문으로]

Eclipse에서 Subversion에 프로젝트 올리기

SVN Repositories 에서 디렉토리를 만들어 두거나 share하면서 경로를 지정한다.

.settings/, .project, .classpath, build/ 는 반드시 뺀다.
커밋한다.
Add to svn:ignore...로 점검

- 2012-01-10
SVN Repository에서 .../svn/HelloTOW/TDD/trunk/ 를 만들고 Share하는 경우 문제가 생기면 마지막 trunk/ 는 삭제하고 Share를 한다.
(플러그인에 따라서 문제가 생기는 경우도 있네.)

Eclipse Galileo + Subversive - Check Out

- 저장소 구조를 확인한다.
trunk에서 받으면 된다.(내가 주로 사용하는 구조에서는)
Java 소스 디렉토리명, Web 루트 디렉토리명을 확인해 두면 좋다.

svn://1.2.3.4/xxx_rep/를 열면 각 디렉토리가 보인다.
svn://1.2.3.4/xxx_rep/aaa_dev/trunk를 연 경우 ROOT 리비전(?)도 보여준다.

- 소스 루트(프로젝트 루트)에서 Check Out As 를 한다.
New Project Wizard를 이용해서 프로젝트를 생성한다.

- Checkout만 하면 컴파일은 되지 않는(?) 프로젝트가 만들어진다.
읽기용으로는 좋다.(완전하지 않는 외부 소스 참고용)
수정도 되고 버전관리도 된다.

미루던 일, SVN에서 소스 Checkout하기

Trac 소스 브라우저로 소스를 검토함.
Eclipse로 받으면 되는데 귀찮아서 미루다가 오늘 함.

SVN Repository Exploring 퍼스펙티브에서 Checkout함.


거봐 금방되는데.(소스만 내려받는거면 진짜 금방된다. 서버세팅도 금방된다.)

- 이때 Check out as a project in the workspace로 프로젝트를 생성하면 소스 보기만 된다.
Java Project가 아니라서 컴파일이 되지 않음.
소스 따라가기도 안됨.
아이콘 모양이 다르다.

New Project Wizard를 이용해서 프로젝트를 선택할 것.

- 이클립스에서 생성된 프로젝트를 그대로 올렸다면(.settings/, .classpath, .project 가 존재) New Project Wizard가 활성화되지 않는다.[각주:1]
  1. 2010-03-26 추가 [본문으로]

Ticket에 소스변경사항 링크걸기

티켓을 처리하고 소스변경사항을 링크를 걸어둔다.
캬~좋다.



Subversion에서 소스만 가져오기



[SVN] Transaction is out of date

Transaction is out of date 라는 메세지가 나오는데 Synchronize Perspective 에서 Update 가 활성화되지 않는 경우가 있다.
Java EE Perspective 의 Team 컨텍스트에서 Update 를 하면 된다.

commit -m "build.xml 파일 제외" -N D:/TestProject //이클립스에서는 프로젝트 루트가 변경된 것으로 나타나는데 에러가 난다.
    Sending        D:/TestProject
    Transaction is out of date
svn: Commit failed (details follow):
svn: 시간이 오래되었습니다.: '/test_rep/trunk' (트랜잭션 '350-1')

update -r HEAD D:/TestProject //Java EE Perspective 에서 update
    At revision 350.

commit -m "build.xml 파일 제외" -N D:/TestProject //commit
    Sending        D:/TestProject
    Committed revision 351.

commit -m "" -N E:/resources/programs/eclipse/workspace/aproject/WebContent
    Sending        E:/resources/programs/eclipse/workspace/aproject/WebContent
    Merge conflict during commit
svn: Commit failed (details follow):
svn: Your file or directory '.' is probably out-of-date
svn: The version resource does not correspond to the resource within the transaction.  Either the requested version resource is out of date (needs to be updated), or the requested version resource is newer than the transaction root (restart the commit).

Trac Links

TracLinks are a fundamental feature of Trac, because they allow easy hyperlinking between the various entities in the system—such as tickets, reports, changesets, Wiki pages, milestones, and source files—from anywhere WikiFormatting is used.

Ticket에 Wiki로 링크를 걸 수 있다. 반대도 가능.

- 첨부파일 링크
attachment:the_file.txt

//다른 위키페이지의 첨부파일 링크
attachment:the_file.txt:wiki:MyPage //안됨
attachment:wiki:MyPage:the_file.txt
[attachment:wiki:MyPage:the_file.txt 클릭하세요]
[/projects/MyProject/attachment/wiki/MyPage/한글%20파일.txt] //파일명이 한글인 경우에는 이렇게 밖에 안됨.

attachment:Settlement_SqlMap.xml#L349 //첨부파일의 라인을 지정할 수 없음. source만 가능

//다른 티켓의 첨부파일 링크
attachment:ticket:42:error.log //42번 티켓에 첨부된 error.log

- 마일스톤 링크
[milestone:demo demo 마일스톤]

- 티켓 링크
[ticket:15 Link to Ticket 15]

- 소스 링크
[source:/demo/trunk/resources/data/script/demo_function_dev.sql@3 함수 생성]
source:/demo/trunk/WebContent/WEB-INF/ibatis_config/sql/Settlement_SqlMap.xml@12#L349 //리비전 12의 소스에서 349번째 줄

http://1.2.3.4:1234/projects/XxxPrj/browser/com.xxx.ep.logon/trunk/PORTAL-INF/page.jsp?rev=383#L23
source://com.xxx.ep.logon/trunk/PORTAL-INF/page.jsp@383#L23

- 특히 SVN과 연동해서 변경사항이나 소스에 대한 링크를 걸어서 Ticket이나 Wiki에 기록할 수 있다.
[15]

http://1.2.3.4:1234/projects/XxxPrj/changeset/1
r1, [1], changeset:1, or (restricted) [1/trunk], changeset:1/trunk


- 위키 페이지 작성시 "변경사항에 대한 설명 (부가정보)"에 링크를 걸 수 있다.
#1 //티켓
http://google.com //외부 링크
[wiki:link]에서 확인 가능함. //같은 프로젝트 위키 페이지
[/projects/XxxPrj/wiki/sysinfo] //다른 프로젝트 위키 페이지

- 다른 프로젝트로 링크
[/projects/XxxPrj/wiki/sysinfo]
http://1.2.3.4/projects/XxxPrj/wiki/sysinfo //이것도 가능, 그러나 위와 같이 하자.


협업을 위한 도구

업무 개선, 협업을 위해 툴을 몇개 도입했다.

- Subversion 도입
CVS를 사용하다 Subversion을 도입했고 소스형상관리를 하도록 강제했다.
결과는 만족스러운데 아직 부족한 부분이 많다.   
  • 로컬, 개발기, 운영기 소스가 모두 다를수가 있다. 배포 프로세스를 만들어서 소스를 직접 적용하지 못하도록 해야 한다.
  • 개발도중에 수정사항이 발생한다. 브랜칭을 사용해 보자.
- 위키 사용
협업을 위해서 위키 도입
결과는 만족스럽지만 강제할 방법이 별로 없다.

- 팀 공용 주소록
구글 문서도구를 이용해서 야후에 있던 내 주소록을 올렸다.
그리고 팀원들에게 공유를 했다.
도입한지 얼마 되지 않지만 일정 규칙만 잘 지킨다면 좋은 도구가 될거 같다.

- Trac
지금 도입 준비중
꽤 쓸만할거 같다.

- Maven
개발 프로세스를 따라 하는 부분은 괜찮을거 같은데 너무 복잡하지 않나 싶다.
강력한 기능은 좋지만 진입장벽이 너무 높을 듯.

Eclipse Galileo + Subversive

- Eclipse Galileo 살펴보기
Galileo 에 포함된 프로젝트 소개 : CDT, EMF, Equinox, GEF, GMF, JDT, Mylyn, PDT, TPTP, WTP 등
(Galileo 에 대한 내용은 아님)

- Subversive 설치
Team Provider만 설치하면 될듯 ([todo] 종속적인 플러그인은 어떻게 되나?)

Connector 만 설치하면 된다고도 함.
http://www.polarion.org/projects/subversive/download/eclipse/2.0/update-site/

- 다양한 레이아웃이 있다.
Subclipse에서는 볼수 없었던 부분이다. 처음 소스형상관리를 할때 많이 고민했던 부분이었다.

- 또 다른 점
Galileo에서 추가되었는지 잘 모르겠지만 Synchronize with Repository에 단축키가 할당되어 있다.
그동안 별도로 키를 바인딩하거나 다른 방법을 썼었는데, 이거 마음에 든다.

- Compare with Each Other
Subversive, Subclipse도 가능함.
Subversive에서는 각 리비전별로 비교가 가능함.

- 참고
[리뷰] SVN 플러그인 Subversive 설치 정리