2011년 3월 1일 화요일
PC 디스크가 부족하여 Program File 등을 D Drive로 옮기는 방법
C폴더가 SP1을 받자마자 FUll이 나는 사태가 노트북에 초기
파티션을 잘못 설정하여 40G밖에 설정을 못하니 이렇게 되었네... -_-;; 난감...
해결책을 이리저리 찾다가 아!!! 그래... Program File 만 로 옯기자 !!!
구글신에게 열라 물어본결과
http://tuts4tech.net/2009/08/05/windows-7-move-the-users-and-program-files-directories-to-a-different-partition/
여길 알려주더군요 .. 번역이 필요없으신 분은 위의 링크를 보시면 됩니다.
아~~~ 좋아 ... 그래 함 해보장...
준비작업으로 D 드라이드를 좀 비웠습니다.
40G정도 (C 드라이브 Program Files를 옮기려면 여유있게...)
그리고 지시에 따라서 아래 작업 시작 (전 하나만 하려다가 ProgramData와 Users 까지 같이 옮겼습니다.)
1. 아래처럼 Users 와 Program Files 그리고 ProgramData를 복사합니다.
- 여기에서 필요한건 /ZB 옵션을 추가 합니다. 즉 복사중에 액세스 오류가 발생하여 처리가 안됩니다.
/Z :: 다시 시작 모드에서 파일을 복사합니다.
/B :: 백업 모드에서 파일을 복사합니다.
예)
robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ /ZB
이런식으로 하면 에러가 발생하여도 저네가 복사됩니다. (재부팅을 하면서...)
아래 세군데 전부 /ZB 를 주고 명령을 실행 합니다.
[실행 명령]
robocopy "C:\Users" "D:\Users" /E /COPYALL /XJ
robocopy "C:\Program Files" "D:\Program Files" /E /COPYALL /XJ
robocopy "C:\ProgramData" "D:\ProgramData" /E /COPYALL /XJ
2. 아래처럼 이전 폴더는 삭제합니다. 그리고 복사된 폴더에 Link 를 설정합니다.
- rmdir 을 사용하는 경우 삭제가 되지 않는 문제가 있습니다. 이런경우는
http://qaos.com/article.php?sid=2857 를 참고하시기 바랍니다.
시스템 파일등 이전 원도우 폴더가 삭제되지 않고 하는 경우도 권한만 설정하면 삭제가 가능 합니다.
- 저는 재부팅 후 안전모드에서도 삭제가 되지 않았습니다.
[실행 명령]
rmdir "C:\Program Files" /S /Q
mklink /J "C:\Program Files" "D:\Program Files"
For the User Profiles:
rmdir "C:\users" /S /Q
mklink /J "C:\users" "D:\users"
and lastly ProgramData:
rmdir "C:\ProgramData" /S /Q
mklink /J "C:\ProgramData "D:\ProgramData"
If you have any permissions issues while deleting C:\ProgramData don't worry about them just try to delete it and make the links again after first reboot
- 이부분은 위의 권한 처리형태로 하여야 합니다.
3. 복사된 위치로 레지스트리를 변경하는 작업을 하여야 합니다.
3-1. cmd 창에서 regedit 명령을 수행 합니다.
3-2. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows\CurrentVersion 로 이동합니다.
- ProgramFilesDir 와 CommonFilesDir 를 수정합니다.
예) CommonFilesDir --> D:\Program Files\Common Files
ProgramFilesDir --> D:\Program Files
3-3. HKEY_LOCAL_MACHINE\Software\Microsoft\Windows NT\CurrentVersion\ProfileList 로 이동합니다.
- ProfilesDirectory 와 ProgramData 등을 설정한다.
예) ProfilesDirectory --> D:\Users
ProgramData --> D:\ProgramData
- Default 와 Public도 D:\Users\Default D:\USers\Public으로 변경한다.
4. Regedit를 종료합니다.
5. 재부팅합니다.
이렇게하면 크게 문제없이 진행이 됩니다.
권한 문제가 좀 있는데 위에서 언급한 부분입니다.
그리고 재부팅 후 로그인이 안되는 문제가 발생하더군요.. -_-;;
원인을 알고보니 D:\Users 폴더에 복사된 파일이 없어서 유저를 정상적으로 찾지 못하면
"로그온이 Group Policy Client 서비스에서 실패 되었습니다. 액세스가 거부되었습니다."
라는 메시지가 나옵니다.
이런 경우는 안전모드 들어가서 아무 User 폴더나 복사하여 구성이되면 됩니다.
또는 이전 폴더 있으면 제위치에 복사하면 됩니다.
2010년 3월 12일 금요일
안드로이드에서 IIS의 Windows 통합 인증 (Problem logging into SharePoint site with NTLM Authentication )
LG-KH5200 을 구매하여 이리저리 사용을 해보던중... IIS의 Windows 통합 인증을 사용하는 사이트 접속이 불가능 하여 구글로 여러날을 수소문 하던중 아래와 같은 글을 발견...
역안드로이드만....
[펀글]
http://www.google.com/support/forum/p/Android%20Market/thread?tid=4f2b0f6f970f0988&hl=en
| Problem logging into SharePoint site with NTLM Authentication | Report abuse |
|
lamiller44
Level 1 11/9/09 |
It works properly on my current phone (Motorola Q with Windows Mobile OS), and it obviously works properly from my desktop/laptop computers' browsers. When I login to the SharePoint site from any browser on my desktop computer, an NTLM popup asks for User ID and Password. It works a bit differently on my current phone, in which the authentication screen doesn't look like a browser UI but rather looks more like the type of UI that is used when you set up an Exchange connection.
When I try it on the Droid, there is no authentication popup/UI. I access the SharePoint site in a browser, and then click the "login here" link, but then I'm taken straight to the web page that indicates that my login was unsuccessful. This is the page that users are normally taken to when their User ID/Password credentials are invalid.
I poked around with the browser's settings on the phone but that didn't work. I'd assume that if it's not possible to to NTLM/Windows authentication 'out of the box' with the Droid that there would be some type of driver or plug-in that I could purchase/download. Otherwise this seems to be a pretty major shortfall of the phone (and one that I can't really imagine Google has overlooked).
Has anybody figured this out?
Replies 1 - 14 of 14
|
gat007
Level 1 11/19/09 |
No solution until now.
|
lamiller44
Level 1 11/19/09 |
|
chrisl1979
Level 1 11/19/09 |
|
JarrettV
Level 1 11/21/09 |
|
hwagner
Level 1 12/28/09 |
|
ismith0072
Level 1 1/7/10 |
|
lamiller44
Level 1 1/7/10 |
|
anair44
Level 1 1/10/10 |
Thanks
|
lamiller44
Level 1 1/10/10 |
|
anair44
Level 1 1/14/10 |
|
Carlad
Level 1 1/21/10 |
|
NA101010
Level 1 2/4/10 |
We looked at Android based phones as a possible standard for our techies, but if they can't access some of our key corporate resources (NTLM), all the bells and whistles in the world won't convince us to continue. (this is with Nexus One, Droid, Eris, etc.)
Love the screen resolution on this thing, and can even live with the quirky zoom function. But without NTLM support, there's no way I'm going to roll out Android devices for our users.
|
anair44
Level 1 2/12/10 |
|
NA101010
Level 1 2/18/10 |
So we have Blackberry, iPhone, WinMo, and even Symbian devices that can get in. Just not Android.
It's a shame. I love this screen, but....
2010년 2월 2일 화요일
[참고/오류가이드]Excel.Application 을 사용하여 엑셀 파일 열기에 실패하는 경우 (Can't Open Excel File) 가이드
Excel.Application 을 사용하여 엑셀 파일 열기에 실패하는 경우 (Can't Open Excel File) 가이드
개 괄 :
Excel.Application 사용 시 “Can't Open Excel File” 메시지가 나오는 경우에 대한 문제점 분석 과 가이드 입니다.
문 제 점 :
[문제점]
- fakepath ::인터넷익스플로러8 업로드오류
[원 인]
- 인터넷 익스플로러 8에서 보안에 관련된 사항이 변경됨
[해결방법]
- 인터넷 익스플로어(IE) 도구메뉴 -> 인터넷 옵션 에서 보안 탭 -> 사용자 지정 수준 클릭
- 보안사항에 대한 설정 중 "파일을 서버에 업 로드 할 때 로컬 디렉토리 경로 포함" 이라는 항목을 사용 안함 으로 되있는 것을 사용으로 변경
[참조 블로그] http://blog.naver.com/tnsk8080?Redirect=Log&logNo=10069423935
문제사항 및 해결방법 :
위는 IE 자체적으로 보안을 변경하여 해결하는 방법입니다. 이는 IE의 옵션 변경을 하여야 하므로 번거로움이 있습니다. 이에 Max Component 중에 Input File Component 가 있습니다. 이를 이용한 Sample 가이드를 참고 하시기 바랍니다.
[Sample]
- 기본적으로 Max Ansi 버전을 기준으로 설명합니다. 만일 Unicode를 사용하시는 경우 CLSID를 변경 하시면 됩니다.
1. Input File 컴포넌트 선언
<object id=tb_InputFile classid=CLSID:C722848E-C7EE-4DC6-947E-C2CD49BBA9DE
style="position:absolute; left:355; top=55; width=110; height=23;visibility=hidden;">
<param name="Text" value='FileOpen'>
<param name="Enable" value="true">
</object>
엑셀 업로드 (FileComponent Upload) :
<input type=button value="엑셀 업로드 (FileComponent Upload)" onClick="Open_File()">
2. 자바 스크립트에서 Open 함수를 사용하여 파일 경로를 얻어옴
< function Open_File() {
tb_InputFile.Open();
SetDataHeader(tb_DataSet);
//alert(tb_InputFile.Value);
//LoadExcelData 옵션처리
var strExcelFileName = "'"+tb_InputFile.Value+"'"; //파일이름
var nStartRow = 0; //시작Row
var nEndRow = 0; //끝Row
var nReadType = 0; //읽기모드
var nBlankCount = 3; //공백row개수
var nLFTOCR = 0; //줄바꿈처리
var nFireEvent = 1;//이벤트발생
var nSheetIndex = 1; //Sheet Index 추가
var stropt = strExcelFileName; //1st
stropt += "," + nStartRow; //2nd
stropt += "," + nEndRow; //3rd
stropt += "," + nReadType; //4th
stropt += "," + nBlankCount; //5th
stropt += "," + nLFTOCR; //6th
stropt += "," + nFireEvent; //7th
stropt += "," + nSheetIndex //8th
var obj = document.getElementById("tb_DataSet");
fn_setTime(txtStart);
obj.Do("Excel.Application", stropt);
fn_setTime(txtEnd);
}
</script>
2008년 12월 7일 일요일
벼랑위의 포뇨
벼랑위의 포뇨
포뇨포뇨포뇨 아기물고기 저 푸른 바다에서 찾아 왔어요.
포뇨포뇨포뇨 오동통통 볼록한 배에 예쁜 물고기
" 포뇨 소스께 끼 (좋아) 포뇨 예쁜이름을 얻었네
포뇨 인겐끼 나리 (인간이 될꺼야) "
깡총깡총 쭈욱쭈욱 다리가 생겼구나 뛰어보자
꼬물꼬물 쫘악쫘악 손들이 생겼구나 잡아보자
포뇨와 함께 놀때 마다 기분이 너무 좋았죠.
빠끔빠끔 쭈욱(죽..) 뻐끔뻐끔 쭈욱(죽..)
포뇨가 너무 좋아요.
새빨간 모습에 포뇨포뇨포뇨 아기 물고기
저 푸른 바다에서 찾아 왔어요
포뇨포뇨포뇨 오동통통 볼록한 배에 예쁜 물고기
"포뇨~ 끄덕... 포뇨 소스케 끼~~ (좋아)"
2008년 9월 11일 목요일
2008년 9월 4일 목요일
Media Rss 이용한 PicasaWeb 이미지 보기 (Piclens 사용)
Media Rss 이용한 PicasaWeb 이미지 보기 (Piclens 사용)
아래 브로그 글을 쓴 후 고민 하다 다시 만들기로 했다.
아무로도 허접해서 만들다 보니 firefox와 이번에 나온 Google 크롬 에서도 테스트를 해봤다. 이전소스 문제를 보강하여
다시 수정하여 올린다. HTML 소스 하나만 있어도 된다. URL을 호출 하는 방식으로 하면 바로 수행도 된다.
파싱 부분은 수정으로 하여야 겠지만 그부분은 나중에 고치도록 하고.. 우선 올린다.
추후 piclens.swf 와 google api js 등도 같이 올리도록 해야 겠다.
사용된 API 소개를 하면 아래와 같다.
동작 방식은 Media RSS URL을 가지고 google API를 이용하여 XML을 내려 받는다.
XML을 piclens 에서 인식하는 XML로 변경한다. media 부분의 format이 안맞아서 그렇게 함
XML을 String형태로 Piclens flash 에 던져서 이미지가 나오도록 함
현재는 Google Picasaweb의 이미지 URL 만 인식함 HTML의 getPiclensXmlFeed 함수 부분을 수정하면
다양한 부분에서 RSS의 이미지를 사용 할 수 있음
즉 picasaweb이나 flicker 또는 panorama 등에 이미지를 올려놓고 이를 이용하여 홈페이지에서 사용을 할 수 있다.
즉 이미지로 인한 traffic 증가로 고민을 하시는 분에게 추천을 할만 하지 않을까???
piclens를 사용하여 mediarss를 이용한 이미지 검색 시스템은 차세대 멀티미디어 검색의 방향을 제시하는 듯하다.
2008년 8월 21일 목요일
Piclens 를 이용하여 이렇게 만들어 봤다. picasaweb의 이미지를 읽는 형태로 허접,...
XML 파싱 부분이 허접이라 하지만 개념은 이렇게 되는게 맞지 않을까 합니다.
XSLT를 사용하려다. 시간상 node접근 하여 text로 rss를 piclens에 맞는 xml로 만들었습니다.
첨부 파일을 실행 하려면 다운을 받아 하시든지 또는
열기하셔서 실행 하면 됩니다. (이경우는 http://*.google.com 과 http://*.naver.net 을 신뢰할 수 있는 사이트 등록을 하여야 합니다. 안하면 xmlhttprequestt 에러 xml load에러 발생합니다. -> 이렇게 하여도 xml load 시 문제가 있네요 근본적으로 아래 URL을 참고하여 crossdomain 을 설정하면됩니다.)
[crossdomain 관련 내용 참고]picasaweb api도 자세히 나와 있습니다.
http://code.google.com/apis/picasaweb/reference.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title> TEST </title>
<meta http-equiv="Content-Type" content="text/html; charset=euc-kr">
<link rel="alternate" href="photos.rss" type="application/rss+xml" title="" id="gallery" />
<script type="text/javascript" src="http://lite.piclens.com/current/piclens.js"></script>
<script type="text/javascript" src="./lytebox/lytebox.js"></script>
<script>
function getPiclensXmlFeed(xmlFile) {
var xmlDoc;
if (window.ActiveXObject) { // IE
xmlDoc=new ActiveXObject("Microsoft.XMLDOM");
xmlDoc.async=false;
xmlDoc.load(xmlFile);
} else { // Mozilla, Firefox, Opera, etc.
var parser = new DOMParser();
xmlDoc = parser.parseFromString(PicLensLite.THE_FEED, "text/xml");
}
var i,j,k;
var hiddenURLs = "";
var tempText = '<\?xml version="1.0" encoding="UTF-8" standalone="yes"\?> ';
tempText += '\n <rss version="2.0" xmlns:media="http://search.yahoo.com/mrss"> ';
tempText += '\n <channel> ';
tempText += '\n <title>'+xmlDoc.getElementsByTagName('title')[0].childNodes[0].nodeValue+'\n </title> ';
tempText += '\n <link>'+xmlDoc.getElementsByTagName('link')[0].childNodes[0].nodeValue+'\n </link> ';
tempText += '\n <description>'+xmlDoc.getElementsByTagName('description')[0].childNodes[0].nodeValue+'\n </description> ';
var xmlElements = xmlDoc.getElementsByTagName('item');
for (i = 0; i < xmlElements.length; i++) {
tempText += '\n <item> ';
var oNodeList = xmlElements[i].childNodes;
for (j = 0; j < oNodeList.length; j++) {
if (oNodeList[j].nodeName == "title") { // what about the namespace?
var title = oNodeList[j].childNodes.item(0).nodeValue;
tempText += '\n <title>'+title+'\n </title> ';
}
if (oNodeList[j].nodeName == "link") { // what about the namespace?
var title = oNodeList[j].childNodes.item(0).nodeValue;
tempText += '\n <link>'+title+'\n </link> ';
}
if (oNodeList[j].nodeName == "guid") { // what about the namespace?
var title = oNodeList[j].childNodes.item(0).nodeValue;
tempText += '\n <guid>'+title+'\n </guid> ';
}
var tCount=0;
if (oNodeList[j].nodeName == "media:group") { // what about the namespace?
var mNodeList = oNodeList[j].childNodes;
for (k = 0; k < mNodeList.length; k++) {
/*
if (mNodeList[k].nodeName == "media:content") { // what about the namespace?
var url = mNodeList[k].getAttribute("url");
tempText += '\n <media:content url="'+url+'" /> ';
}
*/
if (mNodeList[k].nodeName == "media:thumbnail") { // what about the namespace?
tCount += 1;
if (tCount <= 2) {
var url = mNodeList[k].getAttribute("url");
tempText += '\n <media:thumbnail url="'+url+'" /> ';
} else { // content 로 처리
var url = mNodeList[k].getAttribute("url");
tempText += '\n <media:content url="'+url+'" /> ';
}
}
// alert('i=='+i+'\nj=='+j+'\nk=='+k+'\nname='+mNodeList[k].nodeName+'\nVALUE='+url);
} // k node
}
} // j node
tempText += '\n </item> ';
} // i node
tempText += '\n </channel> ';
tempText += '\n </rss> ';
return tempText;
}
</script>
<script>
function PicLens() {
//rssurl = 'http://picasaweb.google.com/data/feed/base/user/outofwrd/albumid/5018407575414284625?kind=photo&alt=rss';
var xmlText = getPiclensXmlFeed(picasarss.value);
//var xmlText = getPiclensXmlFeed("http://picasaweb.google.com/data/feed/base/user/outofwrd/albumid/5018407575414284625?kind=photo&alt=rss");
txt1.value = xmlText;
PicLensLite.start({feedData:xmlText});
//PicLensLite.start({feedUrl:'photos.rss'});
}
</script>
</head>
<body>
<input type="text" name="picasarss" id="picasarss" size=120
value="http://picasaweb.google.com/data/feed/base/user/outofwrd/albumid/5018407575414284625?kind=photo&alt=rss">
<input type="button" name="TEST" value="이미지조회" OnClick="PicLens();">
<textarea id=txt1 cols=140 rows=40></textarea>
</body>
</html>
2008년 7월 26일 토요일
Google Picasaweb을 이용한 Flash Slide 방법
이미지 사이즈가 커서 구글 피카사에 올리는 일이 많았는데...
google site기능에 flash slide 기능을 만들어 놓은 것이 있어 한번 테스트 해보았다.
아래 코드데로 사용하면 picasaweb의 이미지를 표시할 수 있다.
대단한 구글이라고 생각한다. 이것을 드림위버에서 자연스럽게 가능할 것으로 보인다.
app 의 승리라고나 할까??
<embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="800" height="533" wmode="transparent" flashvars="host=picasaweb.google.com&captions=1&amp;RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Foutofwrd%2Falbum%2FrzXWpD%3Fkind%3Dphoto%26alt%3Drss%26" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed>
알고보니 How can I embed a slideshow into my blog or webpage?
에 자세히 나와 있네요...
picasaweb을 한국어로 설정하면 해당 메뉴가 안나옵니다. 아직은 영문에서만 제공되는 기능 입니다.
구글은 역시 메일 메일 변신하는 느낌이 듭니다. (picasaweb의 설정에서 한국어를 English로 바꾸고 위의 설명데로 합니다.)
그러면 Embed Slideshow 라는 링크가 나옵니다.
-------------------------------
IE7 에서 Google picasaweb의 SlideShow 가 안되는 문제
위의 테스트를 IE6에서 하고서 IE7에서 보니 큭 이럴수가 안된다.
firefox에서는 되는데... 이런 IE7 이라구...
MS의 IE8이 빨랑 나왔으면 좋겠다는 생각이 문득 든다.
해서 찾다보니 이런것도 있더라.
picasaweb에서 slideshow를 html(ajax)로도 해준당...
소스는 이렇게 수정 했다. (IE6와 IE7의 구분 을 하고)
<HTML>
<HEAD>
<script language="javascript">
<!--//
window.onload = backgroundChange; // 윈도우가 로드되면 backgroundChange함수 실행
function backgroundChange(){ // backgroundChange함수 시작
var oDiv=document.getElementById("testDiv");
if( navigator.appName.indexOf("Microsoft") > -1 ){ // 마이크로소프트 익스플로러인지 확인
if( navigator.appVersion.indexOf("MSIE 6") > -1){ // 익스플로러이면 버전 6인지 확인
oDiv.innerHTML = '<div class="goog-ws-dash-box goog-ws-dash-box-border" style="display:table-cell; width: 800px;"><div class="goog-ws-dash-box-inside"><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="800" height="533" wmode="transparent" flashvars="host=picasaweb.google.com&captions=1&amp;RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Foutofwrd%2Falbum%2FrzXWpD%3Fkind%3Dphoto%26alt%3Drss%26" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></div></div>';
}else if(navigator.appVersion.indexOf("MSIE 7") > -1){ // 익스 플로러이면 버전 7인지 확인
oDiv.innerHTML = '<IFRAME border=none name=showroom_iframe marginWidth=0 marginHeight=0 frameborder=0 src="http://picasaweb.google.com/outofwrd/rzXWpD/photo#s5225837495190074290" width="100%" height=100%></IFRAME>';
}else {
}
}else{ // 익스플로러가 아닐 경우
oDiv.style.backgroundImage = "url('a.gif')";
}
}
//-->
</script>
</HEAD>
<BODY>
<script language="javascript">
<!--//
window.onload = backgroundChange; // 윈도우가 로드되면 backgroundChange함수 실행
function backgroundChange(){ // backgroundChange함수 시작
var oDiv=document.getElementById("testDiv");
if( navigator.appName.indexOf("Microsoft") > -1 ){ // 마이크로소프트 익스플로러인지 확인
if( navigator.appVersion.indexOf("MSIE 6") > -1){ // 익스플로러이면 버전 6인지 확인
oDiv.innerHTML = '<div class="goog-ws-dash-box goog-ws-dash-box-border" style="display:table-cell; width: 800px;"><div class="goog-ws-dash-box-inside"><embed type="application/x-shockwave-flash" src="http://picasaweb.google.com/s/c/bin/slideshow.swf" width="800px" height="533px" wmode="transparent" flashvars="host=picasaweb.google.com&captions=1&amp;RGB=0x000000&feed=http%3A%2F%2Fpicasaweb.google.com%2Fdata%2Ffeed%2Fapi%2Fuser%2Foutofwrd%2Falbum%2FrzXWpD%3Fkind%3Dphoto%26alt%3Drss%26" pluginspage="http://www.macromedia.com/go/getflashplayer"></embed></div></div>';
}else if(navigator.appVersion.indexOf("MSIE 7") > -1){ // 익스 플로러이면 버전 7인지 확인
oDiv.innerHTML = '<IFRAME border=none name=showroom_iframe marginWidth=0 marginHeight=0 frameborder=0 src="http://picasaweb.google.com/outofwrd/rzXWpD/photo#s5225837495190074290" width="800px" height=533px></IFRAME>';
}else {
}
}else{ // 익스플로러가 아닐 경우
oDiv.style.backgroundImage = "url('a.gif')";
}
}
//-->
</script>
<div id="testDiv" style="width:800px;height:533px"></div>
</BODY>
</HTML>
---------------- 데모 -------
naver에서는 iframe이 되지 않아 될라나 모르겠네요...
실제 소스는 아래와 같습니다.
<IFRAME border=none name=showroom_iframe marginWidth=0 marginHeight=0 frameborder=0 src="http://picasaweb.google.com/outofwrd/rzXWpD/photo#s5225837495190074290" width="800px" height=533px></IFRAME>
2008년 7월 15일 화요일
대아 수목원 에 갔다와서.... (대아수목원)
대아 수목원에 갔다 왔다 ..
대아 저수지를 지나 계곡을 따라 들어가니 대아 수목원이 보인다. 그리고 조금 지나니 예약한 펜션이 보였다.
수목원 하우스 펜션에서 하루를 보냈다.
정말 물이 맑고 깨끗하다. 현서가 물속에서 나올 생각을 하지 않는당...
대아 수목원 전경 - 오후 3시가 되니 다른 손님도 도착하여 주차장에 차들이 많다.
도착하자 마자 현서하고 부산 하람이가 같이 물놀이를 하고 있다.
물이 너무 께끗해서 물고기를 잡는 사람도 있다. 눈에 물고기가 보일 정도로 많다.
현서가 심토이 났나 보다. 표정이 심상치 않은데... 하람이 누나가 잘놀아주니 다행이당
다음날 아침 식사후에 수목원을 찾았다. 봄에 금낭화가 유명하다 하는데 가는날은 초여름이라 아래 사진으로 대신한다.
이건 대아 수목원의 자랑인 금낭화라고 한다.
대아 수목원 안내판이다. (등산 코스로 좋을듯 하당... )
우린 수목원 인근만 산책을 했다.
* 동절기(11∼2월) 09:00 ~17:00
전북대아수목원
주 소 : 완주군 동상면 대아리 산1-2번지 (우편번호 565 - 890)
전 화 :
[산 책 로 ] 총 연 장 : 19.42㎞ - 임도 : 7.21㎞, 산책로 : 13.62㎞
[이용코스] - 산책로간 연결 지선 활용 다양한 코스 선택 가능 . 어린이 노인 : 임도 코스 ∼ 청·장년 : 능선 코스
[소요시간]코스별로 1시간 ∼ 3시간 정도 소요
2008년 5월 16일 금요일
CVS 사용에 대한 FAQ 모음
출처 : http://flower-spider.kmu.ac.kr/~podoni/moniwiki/wiki.php/CVS-FAQ#s-1
CVS 사용에 대한 FAQ 모음
한글로 된 CVS 문서들이 여럿 나와 있지만 꼭 필요한 정보들이 여기저기 흩어져 있고 체계적이지 않은 경우가 있어, 처음 CVS를 접하는 분들이 비슷한 질문을 반복적으로 하게 되는 듯 합니다. 오픈소스 프로젝트 개발에 참여하고자 하는 분들에게 필요한 정보를 모아봤으면 합니다.
CVS 사용하면서 이 간단한 걸 몰라서 참 고생했었지 싶은게 있으면 언제든지 추가해 주세요.
-
- 1 질문과 답
-
- 1.1 CVS를 빨리 배워서 써야하는데 어떡하죠?
- 1.2 CVS가 뭐예요? / 어디에 쓰는 물건인가요?
- 1.3 CVS를 실제로 개발 과정에 사용하는 프로젝트가 있나요?
- 1.4 CVS를 쓰면 그래서 뭐가 좋은가요?
- 1.5 RCS는 또 뭐죠? / RCS 하고는 뭐가 다른가요?
- 1.6 SourceSafe와는 뭐가 어떻게 다른가요?
- 1.7 CVS에서 .......한 점이 마음에 들지 않습니다. 다른 프로그램은 없나요?
- 1.8 Windows에서 쓸 수 있는 CVS 클라이언트가 있나요?
- 1.9 Windows에서 쓸 수 있는 CVS 서버가 있나요?
- 1.10 CVSROOT 환경 설정을 어떻게 해야하나요?
- 1.11 Anonymous checkout 이 뭔가요? 어떻게 하죠?
- 1.12 로그인을 하라는데 어떻게 하나요?
- 1.13 저장소(Repository)의 디렉토리 구조를 알고 싶습니다.
- 1.14 새 Repository는 어떻게 만드나요?
- 1.15 새 프로젝트는 어떻게 만드나요?
- 1.16 checkout은 어떻게 하나요?
- 1.17 checkout한 이후에 Repository에서 바뀐 내용을 확인하고 싶습니다.
- 1.18 내가 작업한 내용은 어떻게 알 수 있나요?
- 1.19 지금까지 작업한 내용을 checkin하고 싶습니다.
- 1.20 Conflict가 생겼습니다! 어떻게 해야하나요?
- 1.21 소스에서 이 부분을 누가 만든 건지 좀 알아야겠습니다.
- 1.22 파일을 추가하고 싶습니다.
- 1.23 파일을 삭제하고 싶습니다.
- 1.24 파일 이름을 바꾸고 싶습니다.
- 1.25 실수로 잘못된 소스를 checkin해 버렸습니다. 어떻게 고쳐야하나요?
- 1.26 checkout 받은 소스를 이제 그만 지워버리고 싶어요.
- 1.27 현재까지 작업 내역을 보고 싶습니다.
- 1.28 revision이 뭔가요?
- 1.29 tag가 뭔가요?
- 1.2 CVS가 뭐예요? / 어디에 쓰는 물건인가요?
-
- 1.29.1 tag는 어떻게 붙이나요?
- 1.30 branch는 또 뭔가요?
- 1.31 과거 특정 시점에 소스가 어땠는지 보고 싶습니다.
- 1.32 CVS 서버에 어떤 module이 있는지 어떻게 알 수 있나요?
- 1.33 CVSROOT/modules에 모듈 등록은 어떻게 하나요?
- 1.34 CVSROOT/passwd에 사용자를 어떻게 추가하나요?
- 1.35 익명 사용자는 어떻게 등록하나요?
- 1.36 CVS가 /root 아래 파일을 찾으려 듭니다! 이게 뭔가요?
- 1.37 Repository를 다른 기계로 옮기고 싶습니다.
- 1.38 CVS 서버에 있는 repository를 미러링할 수 없나요?
- 1.39 module들을 공유할 수 있는 방법이 있나요?
- 1.40 Source file에 강제로 revision을 지정할 수 있나요 ?
- 1.41 CVS도 VSS처럼 배타적 락(Exclusive Lock)을 걸어 놓고 사용할 수 있나요?
- 1.42 Repository에 Attic 이란게 있던데 이건 뭔가요?
- 1.43 Unicode file을 지원하지 못하는가요?
- 1.44 이미 Text로 업로드 된 파일을 Binary로 바꿀 수 있는가요?
- 1.45 이미 Binary로 업로드 된 파일을 Text로 바꿀 수 있는가요?
- 1.46 로그를 잘못 적었는데 고칠 수 없을까요?
- 1.47 Tag에 comment를 붙이는것은 가능한가요
- 1.48 Unknown command 라는 에러가 납니다.
- 1.49 항상 최신버전의 소스를 유지하고 싶어요
- 1.50 이전버전으로 되돌리고 싶어요(Rollback)
- 1.51 CVS를 쓸까요 Subversion을 쓸까요?
- 1.52 CVS 에서 디렉토리 생성후 올리면 다른사용자 퍼미션 오류가 남.
- 1.53 Update 시 변경 플래그 설명
- 1.54 List Of Keywords : 소스 파일에 로그 남기는 매크로.
- 1.55 파일 감시(watching)와 잠금(locking)
- 1.32 CVS 서버에 어떤 module이 있는지 어떻게 알 수 있나요?
-
- 1.55.1 Watch
- 1.56 다수의 개발자가 CVS 이용하기
- 1.57 cvs에 추가되어서는 안되는 파일 설정 ( CVSROOT/cvsignore )
- 1.1 CVS를 빨리 배워서 써야하는데 어떡하죠?
- 2 help 사용법
- 3 용어
- 4 문서를 만들면서
- 5 관련 자료
- 3 용어
1 질문과 답 #
1.1 CVS를 빨리 배워서 써야하는데 어떡하죠? #
- 우선 DocbookSgml/CVS-KLDP 를 보고 한번 그대로 따라해 보세요.
- 아래 정리해둔 다른 한글로 된 문서들을 틈틈히 읽어 봅니다.
- CVS를 꾸준히 써야 하거나 여러가지 정석적인 사용 방법을 익히고 싶다면
CVS-BestPractices 문서를 정독하시기를 권합니다.
- 큰 오픈소스 프로젝트에서 많은 개발자들이 같이 작업할 때 소스 버전 컨트롤이 어떤 방식으로 운영되는지에 관심 있는 분들은
The CVS Book을 한번 보시기 바랍니다.
1.2 CVS가 뭐예요? / 어디에 쓰는 물건인가요? #
CVS(Concurrent Versions System)는 프로그램 소스나 문서 파일 버전 관리를 쉽게 할 수 있도록 도와주는 프로그램입니다. 특히 여러 사람들이 동시에 작업을 진행해야하는 규모가 큰 개발 프로젝트에서 큰 효과를 기대할 수 있습니다. 이밖에도 꾸준히 업데이트되는 문서 관리라든가 웹사이트 관리 등에 유용하게 쓸 수 있고, 심지어 /etc 아래에 들어가는 설정 파일을 (원격) 백업하는 용도로도 사용 가능합니다.- OpenBSD : OS 및 시스템 전체 소스를 CVS로 관리하고 있습니다.
- OpenOffice : 총 3만 파일에 대략 9백만 라인 이상되는 C++ 코드를 CVS로 관리합니다.
- Mozilla : 전체 프로젝트 및 파생 프로젝트 소스 코드 및 릴리스/브랜치 관리를 CVS로 하고 있습니다.
- XFree86 : CVS 를 사용하는 유명 프로젝트중 하나입니다.
- Apache : 위와 동일합니다.
1.4 CVS를 쓰면 그래서 뭐가 좋은가요? #
관리자는 :- 프로젝트 참여자 개개인의 작업을 방해하지 않으면서 전체적인 진행 상황을 조절할 수 있다.
- 릴리스된 버전과 개발중인 버전을 뒤섞지 않고 분리해서 관리할 수 있다.
- 일정 기간에 진행된 작업 내용에 대한 리포트를 쉽게 만들어 낼 수 있다.
- 일정 기간에 진행된 변경 내역을 효과적으로 추적할 수 있다.
- 누가 일을 하고 누가 놀고 있는지 쉽게 감시할 수 있다.
- 소스 백업에 신경 쓸 필요가 없다.
- 새로운 코드를 작성할 때 기존 작업을 망칠 위험 없이 쉽게 시도할 수 있다.
- 문제가 생겼을 때 어느 지점에서 문제가 생겼는지 쉽게 추적해서 찾아낼 수 있다.
- 소스나 문서 특정 부분 작업을 누가 언제 했는지 쉽게 알아낼 수 있다.
- 별도 리포트 작성 및 문서를 써야하는 건수나 양이 많이 줄어든다.
- 맘먹으면 별로 한 일이 없어도 꾸준히 일하고 있는 것처럼 속일 수도 있다.
1.5 RCS는 또 뭐죠? / RCS 하고는 뭐가 다른가요? #
CVS는 RCS를 기반으로 작성된 버전 관리 시스템입니다.쉽게 얘기하자면 RCS는 파일 하나하나에 대해 버전 관리를 해주는 것이고, CVS는 RCS 기능을 이용해 소스나 문서를 프로젝트/모듈 단위로 관리할 수 있도록 확장한 프로그램입니다. 이미 RCS를 쓰고 있고 익숙한 분이 아니라면 굳이 RCS를 새로 배울 필요는 없습니다. RCS로 할 수 있는 모든 것은 CVS로 할 수 있지만 그 역은 성립하지 않기 때문입니다.
$ cvs -H admin해서 RCS 관련 명령어를 한번 살펴 보세요.
Non-Free
1.8 Windows에서 쓸 수 있는 CVS 클라이언트가 있나요? #
등이 있습니다.1.9 Windows에서 쓸 수 있는 CVS 서버가 있나요? #
1.10 CVSROOT 환경 설정을 어떻게 해야하나요? #
Local Repositoryexport CVSROOT=/usr/local/cvsroot
export CVSROOT=:pserver:username@host.domain.com.:/var/cvsroot
export CVS_RSH=ssh export CVSROOT=:ext:username@host.domain.com.:/var/cvsroot
1.11 Anonymous checkout 이 뭔가요? 어떻게 하죠? #
익명 사용자에게 읽기 권한을 제공함으로써 소스나 문서 최신 버전을 손쉽게 업데이트할 수 있도록 해줍니다.특히 컴파일이 필요없는 스크립트 기반 프로젝트에 유용합니다.
$ cvs -d:pserver:anonymous@cvs.kldp.net:/cvsroot/moniwiki login $ cvs -z3 -d:pserver:anonymous@cvs.kldp.net:/cvsroot/moniwiki co moniwiki와 같이 하면 됩니다. 이후에 새 버전이 나오거나 패치가 업데이트 되면
$ cvs update -dP해서 간단히 최신버전으로 업데이트할 수 있습니다.
$ cat ~/.cvspass :pserver:user@host.domain.com:/var/cvsroot XYZ123
$ cvs logout (Logging out of user@host.domain.com)
1.13 저장소(Repository)의 디렉토리 구조를 알고 싶습니다. #
/home/cvs/ .... (1) /home/cvs/CVSROOT/ .... (2) /home/cvs/CVSROOT/passwd .... (3) /home/cvs/CVSROOT/readers .... (4) /home/cvs/module_A/ .... (5) /home/cvs/module_B/ .... (6)
1.14 새 Repository는 어떻게 만드나요? #
$ export CVSROOT=/home/user/cvsroot $ cvs init $ ls /home/user/cvsroot CVSROOT/ $ ls /home/user/cvsroot/CVSROOT/ Emptydir/ config editinfo,v modules,v taginfo checkoutlist config,v history notify taginfo,v checkoutlist,v cvswrappers loginfo notify,v val-tags commitinfo cvswrappers,v loginfo,v rcsinfo verifymsg commitinfo,v editinfo modules rcsinfo,v verifymsg,v
1.15 새 프로젝트는 어떻게 만드나요? #
$ ls proj/ README a.c a.h $ cd proj/ $ cvs import -m "this is the project" proj VENDOR INIT $ ls /var/cvsroot/ CVSROOT/ proj/ $ ls /var/cvsroot/proj/ README,v a.c,v a.h,v
$ cvs co -r RELEASE_1_0_5 moniwiki
$ cvs update -dP
1.18 내가 작업한 내용은 어떻게 알 수 있나요? #
$ cvs diff $ cvs diff -r BASE $ cvs diff -r BASE -r HEAD $ cvs diff -c -r1.6 prog.c $ cvs diff -c -r1.6 -r1.7 prog.c
1.19 지금까지 작업한 내용을 checkin하고 싶습니다. #
$ cvs ci -m "fixed bug #12345"
$ cvs com[mit] prog.c $ cvs ci -m "another bug fix in sheet.c" sheet.c
1.20 Conflict가 생겼습니다! 어떻게 해야하나요? #
당황하지 마세요. 소스나 문서에서<<<< .... ---- .... >>>>이렇게 생긴 부분을 찾아서 고친 다음 다시 cvs update; cvs ci 하면 됩니다.
1.23 파일을 삭제하고 싶습니다. #
$ cvs rm oldfile $ cvs rm -f badfile $ cvs rm -f olddir/badfiles $ cvs rm olddir
$ mv old new $ cvs remove old $ cvs add new $ cvs commit -m "Rename old to new" old new일반적인 만큼 방법도 쉽습니다. 기존 파일의 이름을 다른 이름으로 바꾼후 기존 파일을 cvs remove 로 제거하고
$ cd $CVSROOT/module $ mv old,v new,vCVS repository 의 수정할 module 디렉토리에서 이름을 변경할 파일의 이름을 직접 바꾸어 주는 방법입니다
장점
- change log가 그대로 보존됩니다
- revision 역시 그대로 유지됩니다
- module 의 예전 release 나 tag 를 불러오기가 쉽지가 않다.
- 이름이 변경되었다는 정보가 log 에 남지 않는다
- 위의 작업($CVSROOT 에 들어가 파일을 직접 rename 하는..)을 하는 동안 누군가 cvs 작업을 한다면 난처한 일이 생긴다.
1.25 실수로 잘못된 소스를 checkin해 버렸습니다. 어떻게 고쳐야하나요? #
1.27 현재까지 작업 내역을 보고 싶습니다. #
$ cvs st[atus] [-v] [prog.c] $ cvs log [prog.c] $ cvs ann[otate] [main.c]
1.29 tag가 뭔가요? #
여러 파일이나 모듈에 버전을 표시하기 위해 한꺼번에 붙여둔 표시입니다.$ cd moniwiki/
$ cvs st -v README
......
Existing Tags:
moniwiki-1_1 (branch: 1.1.2)
RELEASE_1_0_5 (revision: 1.1)
......
1.30 branch는 또 뭔가요? #
- Development Branch
- Release Branch
- Maintenance Branch
- Vender Branch
- (Main) Trunk
- HEAD
+-------------+
Branch 1.2.2.3.2 -> ! 1.2.2.3.2.1 !
/ +-------------+
/
/
+---------+ +---------+ +---------+ +---------+
Branch 1.2.2 -> _! 1.2.2.1 !----! 1.2.2.2 !----! 1.2.2.3 !----! 1.2.2.4 !
/ +---------+ +---------+ +---------+ +---------+
/
/
+-----+ +-----+ +-----+ +-----+ +-----+
! 1.1 !----! 1.2 !----! 1.3 !----! 1.4 !----! 1.5 ! <- The main trunk
+-----+ +-----+ +-----+ +-----+ +-----+
!
!
! +---------+ +---------+ +---------+
Branch 1.2.4 -> +---! 1.2.4.1 !----! 1.2.4.2 !----! 1.2.4.3 !
+---------+ +---------+ +---------+
1.30.1 branch는 어떻게 만들죠? #
$ cvs checkout project; cd project $ cvs update foo.c $ cvs tag release-1 . $ cd ..; cvs release -d project $ cvs checkout -r release-1 project $ cvs release -d project
$ cvs rtag -b -r release-1 release-1-patches project $ cvs checkout -r release-1-patches project $ cvs commit -m "Fixed printf bug" foo.c $ cd ..; cvs release -d project
cvs를 사용할 때 Branch를 해서 버젼을 만들고
메인 버젼이 올라가면 다시 메인버젼과 머지를 하고.. 등의 작업을
수행할 때, 먼저 브랜치를 할 파일들에 태그를 달아주고
태그를 기준으로 브랜치를 만드는 것이 편한 것 같습니다.
arab_xxx 브랜치로 작성하겠다. 라는 의미가 됩니다.
태그는 먼저 달아주어야 하겠지요.
만일 wincvs를 사용하신다면 graph를 보시게 되면
tag는 검정색 얇은 선 브랜치는 파란색 굵은 선으로 나뉘는 것을 알 수 있습니다. --최성우 / eatingstars.com
$ cvs tag -b BRANCHNAME이 명령을 실행한 작업소는 앞으로 이 브랜치로 작업을 하게 됩니다.
1.30.2 merge는 어떻게 하는 겁니까? #
$ cvs checkout -j release-1-patches project $ cvs commit -m "Merged patch"
1.31 과거 특정 시점에 소스가 어땠는지 보고 싶습니다. #
태그를 붙여 두지 않았다면, 날자와 시간을 써서 다음과 같이 작업하는 것도 가능합니다.$ cvs rtag -b -D "2000-01-01 00:00" first-millenium-release project $ cvs get -D "3 month ago" myproj $ cvs get -D "1999-11-23 09:00" oldproj
"1971-04-30 04:35" (ISO format) "30 Apr 1971 04:35" (Internet format) "Tue Jan 25 08:45:45 UTC 2000" "3/31/92 10:00:07 PST" "January 23, 1987 10:05pm" "22:00 GMT" "1 month ago" "2 hours ago" "400000 seconds ago" "last year" "last Monday" "yesterday" "a fortnight ago"
1.32 CVS 서버에 어떤 module이 있는지 어떻게 알 수 있나요? #
CVS에서 제공하는 명령어를 통해 정상적으로 알아낼 수 있는 방법은 없습니다. :-(그렇지만 꼭 필요한 경우에 흔히 사용되는 방법이 몇 가지 있습니다.
- 프로젝트 관리자에게 물어보세요
- 프로젝트 관리자가 수동으로 CVSROOT/modules 에 등록해 놓으면 다음 명령으로 module의 목록을 볼 수 있습니다.
$ cvs co -c
- 잘 관리되는 프로젝트라면 일반적으로 cvsweb 이나 viewcvs 같은 웹 인터페이스를 제공할 것입니다. 그걸 이용하세요. 만약 없다면 서버 관리자에게 그런 프로그램을 설치해 달라고 요청하세요.
- 위 방법이 모두 안된다면, 다음 스크립트를 써서 간접적으로 알아낼 수도 있습니다.
$ cvsls.sh HEAD .
#!/bin/sh # lists files and directories in the module(s) on the server without # checking them out # cvsls BranchName modules... # for main trunk use 'cvsls HEAD modules...' branch=$1; shift cvs rdiff -s -D '01/01/1971' -r $branch "$@" 2>&1 \\ | sed -e 's/File.//' \\ -e 's/is new; current revision./ (/' \\ -e 's/(\\([0-9][\\.0-9]*\\)/(\\1)/' \\ -e 's/cvs server: Diffing/cvs server: Listing/'
1.33 CVSROOT/modules에 모듈 등록은 어떻게 하나요? #
cvs co CVSROOT 하여서 modules 파일을 수정하신 후에 commit 하셔야 합니다. 이때 위와 같은 목적으로 활용하실 계획이라면 간단하게 다음과 같이 적으시면 됩니다.module_A module_A module_B module_B위의 내용은 module_A라는 것이 repository root에 존재하는 경우 입니다.
1.34 CVSROOT/passwd에 사용자를 어떻게 추가하나요? #
몇 가지 방법이 있지만, 가장 간단한 방법 가운데 하나는 apache 패키지에 들어 있는 htpasswd 명령을 이용하는 것입니다.$ htpasswd -b passwd username password
cvs server: cannot open /root/.cvsignore: Permission denied
# default: on
# description: cvs pserver
service cvspserver
{
disable = no
flags = REUSE
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/home/cvs pserver
log_on_failure += USERID
}
1.37 Repository를 다른 기계로 옮기고 싶습니다. #
Q : 만일 A 서버에 있던 repository 를 B 서버로 옮기고 싶다면 그냥 디렉토리를 통채로 복사하면 되려나요? 그게 안 된다면 죄다 update 후 새로 import 를 하라는 얘기인데... -_-;;1.38 CVS 서버에 있는 repository를 미러링할 수 없나요? #
단순한 백업 이상을 의미하는 것이라면, CVS는 기본적으로 단일 repository를 바탕으로 설계되었기 때문에 자체적으로는 불가능합니다. 대규모 프로젝트 같은 경우에 전세계 곳곳에 미러를 하기 위해 CVSup 같은 보조도구를 이용하거나, 단순히 rsync 같은 미러링 툴을 이용하기도 합니다. 그러나 이 경우 하위 repository에 commit 한 내용을 다시 상위(upstream)로 merge 하는데 기술적인 어려움이 따릅니다. 그렇지만 경우에 따라 효과적인 개발 브랜치나 로컬 개발자 그룹 지원을 위해서는 꼭 필요한 기능이기 때문에, CVS가 가지는 근본적인 제약을 극복하고자 새로 개발되는 프로그램이 있습니다. 만약 꼭 계층적 repository를 구축해야 하는 상황이라면, 다음 프로그램을 사용하는 것을 고려해 보세요.1.39 module들을 공유할 수 있는 방법이 있나요? #
Q : 예를 들어서 libx라는 모듈이 있고, proj_a와 proj_b가 이를 모두 사용합니다. 이때 이 두 프로젝트가 유사하여서 libx를 한쪽에서 수정하면 다른 한쪽에서도 영향을 받아야 하는 경우라면 어떻게 해야 할까요? 서버에서 symbolic link를 걸어주거나, 클라이언트측에서 proj_a, proj_b에 모두 libx를 checkout해주면 되겠지만 다소 불편함이 없지 않아 있을것 같아서 여쭤 봅니다.proj proj proj_a proj_b libx proj_a proj proj_a libx proj_b proj proj_b libx libx proj libx와 같이 되고, checkout을 하게 되면 proj 디렉토리가 먼저 생기고, 그 아래에 각 모듈이 생깁니다.
proj_a -a proj_a libx proj_b -a proj_b libx libx libx이렇게 되고, 예를 들어 cvs checkout proj_a 를 하게 되면 proj_a와 libx라는 모듈이 각각 생성됩니다. 이 경우 libx에 autotools(libtool)을 채용하든가 proj_a와 proj_b 빌드하는데 연결되도록 적절히 구성해줘야 하겠죠.
proj proj proj_b proj proj_a proj_a proj proj_b libx libx이런 식으로 구성하는 경우도 생기겠지요.
1.40 Source file에 강제로 revision을 지정할 수 있나요 ? #
Q : 예를 들어서 어떤 소스의 revision #가 1.12라고 할 때 어떤 계기로 인해서 이 번호의 제일 앞자리 숫자를 바꾸려고 하면 어떻게 하면 되나요 ?cvs ci -m "revision set to 2.0" -r2.0 ohmysrc.c해당 프로젝트/모듈 전체를 한번에 바꾸려면, checkout 받은 모듈 최상위 디렉토리에서
cvs ci -m "revision set to 3.1" -r3.1와 같이 하면 됩니다.
1.41 CVS도 VSS처럼 배타적 락(Exclusive Lock)을 걸어 놓고 사용할 수 있나요? #
cvs admin -l filename을 이용하시면 됩니다. 이 경우 해당하는 사람이 lock을 제거하기 전까지는 commit이 불가능하게 됩니다.
하지만 이렇게 하는 것은 대부분 문서에서 그다지 권장하지 않더군요. cvs watch 이용하기를 권장하고 있습니다.
cvs edit는 동시에 edit하는 것을 방지하지 않지만, cvs edit -c filename 을 모든 사람이 이용하게 된다면 그 순간에는 한 사람만이 작업을 할 수가 있게 됩니다. -c 옵션을 준 것을 reserved edit라고 하며, 이 경우에도 누구나 commit은 가능합니다.
1.42 Repository에 Attic 이란게 있던데 이건 뭔가요? #
사용자가 지운(cvs rm) 파일을 보관해두는 곳입니다. Attic이 우리말로 하면 "다락"인데, 자주 쓰지는 않지만 버리긴 아깝고 혹시 필요하게 될지 모르는 물건을 저장한다는 점에서 보면 상당히 잘 지은 이름 같습니다.1.43 Unicode file을 지원하지 못하는가요? #
Q : 이러한 메시지를 만났습니다.cvs import: Remote server does not support Unicode files. Checkin may be invalid.여러개의 파일을 한꺼번에 import할때 나왔으며, 이를 다시 수정하여 ci할때에도 나타났습니다. 음.. 첫번째 파일에서 이러한 문구가 나타났는데, 평범한 C++ code라서 다른 파일이 아닌가 합니다. 아울러 -ku라고 나타나는 메시지도 무엇인지 모르겠네요.
cvs commit: Remote server does not support Unicode files. Checkin may be invalid. Checking in ***.cpp; cvs server: internal error: unsupported substitution string -ku /***.cpp,v <-- ***m.cpp new revision: 1.2; previous revision: 1.1 done
1.44 이미 Text로 업로드 된 파일을 Binary로 바꿀 수 있는가요? #
바이너리로 업로드하려면 -kb옵션을 사용합니다. 예를들어,$ echo '$Id: CVS_2dFAQ,v 1.15 2004/08/10 02:42:40 podoni Exp podoni $' > kotest $ cvs add -kb -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest입니다.
$ echo '$Id: CVS_2dFAQ,v 1.15 2004/08/10 02:42:40 podoni Exp podoni $' > kotest $ cvs add -m"A test file" kotest $ cvs ci -m"First checkin; contains a keyword" kotest $ cvs admin -kb kotest $ cvs update -A kotest # For non-unix systems: # Copy in a good copy of the file from outside CVS $ cvs commit -m "make it binary" kotest
1.45 이미 Binary로 업로드 된 파일을 Text로 바꿀 수 있는가요? #
한글이 들어있는 파일을 WinCVS를 통해서 add/import를 하게 되면 binary를 권장합니다. 이때, 실수로 Binary로 add/import하게 되면 merge기능을 지원하지 않아 불편하게 되지요. 이럴 때, 위의 Text->Binary와는 반대의 작업이 필요하게 되는데, 위의 내용과 같고, 옵션만 -kb가 아닌 -kkv로 해 주면 됩니다.$ cvs admin -kkv kotest
1.46 로그를 잘못 적었는데 고칠 수 없을까요? #
$ cvs admin -m1.2:"new log" myprog.c
$ cvs admin -mV_1_0:"massive new log"이렇게 한번에 바꾸는 것도 가능합니다.
1.47 Tag에 comment를 붙이는것은 가능한가요 #
AnswerMe 질문이 조금 애매한것 같습니다. 제목만 보고는 어떤 상황인지 정확히 알 수 없어 답변이 두루뭉실합니다. 조금더 상황을 설명해 주시지요?1.48 Unknown command 라는 에러가 납니다. #
Q: 접속시에cvs [login aborted]: unrecognized auth response from 127.0.0.1: Unknown command: `/home/cvs'라고 나오네요.. 강좌대로 했다고 생각했는데.. passwd file 문제인가요? redhat 9.0을 쓰고 있읍니다.
$ cvs -d :pserver:anonymous@anonymous.com:/cvsroot이렇게 전부 붙여줘야 합니다.
1.49 항상 최신버전의 소스를 유지하고 싶어요 #
항상 최신의 버전을 유지하지 않고 작업을 하니 Commit시 자주 Conflict가 발생합니다. WinCVS나 TortoiseCVS를 써 보았는데 최신 버전으로 유지해 주는 기능을 안 보이던데요. 덧붙여 update시 발생하는 conflict를 줄이고 싶습니다. update시 merge를 선택적으로 할 수는 없나요? 예를 들어서 '이 파일은 더 최근의 것이 존재합니다. merge할까요? (Y/n)' 이런식으로요.1.50 이전버전으로 되돌리고 싶어요(Rollback) #
|http://bbs.kldp.org/viewtopic.php?t=28936|1.51 CVS를 쓸까요 Subversion을 쓸까요? #
Q : 이제서야 CVS라는 것에 대해 알게 되어 배워볼까 했더니 CVS의 불편한 점을 개선한 Subversion이 나왔다고 하네요. 처음 배우는 사람은 바로 Subversion을 익혀야 하나요? 아니면 CVS 를 먼저 익혀야 하나요?1.52 CVS 에서 디렉토리 생성후 올리면 다른사용자 퍼미션 오류가 남. #
현제 각 사용자는 cvs 라는 그룹을 만들어 cvs 사용하는 사용자들을 cvs 그룹으로 모두 묶어 놓은 상태입니다...아래와 같은 퍼미션 에러가 납니다..
cvs update: failed to create lock directory for `/cvs/project/aaaa' (/cvs/project/aaaa/#cvs.lock): Permission denied cvs update: failed to obtain dir lock in repository `/cvs/project/aaaa' cvs [update aborted]: read lock failed - giving up오류발생, CVS 명령실행이 실패했습니다.
chgrp cvs -R /cvs/프로젝트명 하여 그룹을 임의로 바꾸고 나면 문제없이 잘 받아 옵니다.. ㅡㅡ;
cvspserver stream tcp nowait root /usr/sbin/tcpd /usr/sbin/cvs-pserver -f --allow-root=/cvs pserver
$ find /cvs -type d -exec chgrp cvs {} \\;
$ find /cvs -type d -exec chmod 2770 {} \\;
1.53 Update 시 변경 플래그 설명 #
P ; client 에 있긴 한데 ... 버전이 낮아서 덮어 씌움.
M ; client 가 수정한 부분에 원본에 없을때.. commit 요구
C ; conflict 버전 충돌 .. 이 경우는 update 한후 다시 수정해서 올려 줘야 한다.
1.54 List Of Keywords : 소스 파일에 로그 남기는 매크로. #
These are all the dollar-sign-delimited keywords that CVS recognizes. Following is a list of the keyword, a brief description, and an example of its expanded form:- $Author: podoni $ - Author of the change:
$Author: podoni $ - $Date: 2004/08/10 02:42:40 $ - The date and time of the change, in UTC (GMT):
$Date: 2004/08/10 02:42:40 $ - $Header: /home/podoni/public_html/moniwiki/data/text/RCS/CVS_2dFAQ,v 1.15 2004/08/10 02:42:40 podoni Exp podoni $ - Various pieces of information thought to be useful: full path to the RCS file in the repository, revision, date (in UTC), author, state, and locker. (Lockers are rare; although in the following example, qsmith has a lock.):
$Header: /usr/local/newrepos/myproj/hello.c,v 1.1 1999/06/01 \\
03:21:13 jrandom Exp qsmith $ - $Id: CVS_2dFAQ,v 1.15 2004/08/10 02:42:40 podoni Exp podoni $ - Like $Header: /home/podoni/public_html/moniwiki/data/text/RCS/CVS_2dFAQ,v 1.15 2004/08/10 02:42:40 podoni Exp podoni $, but without the full path to the RCS file:
$Id: CVS_2dFAQ,v 1.15 2004/08/10 02:42:40 podoni Exp podoni $ - $Log: CVS_2dFAQ,v $
- Revision 1.15 2004/08/10 02:42:40 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.14 2004/08/09 01:59:44 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.13 2004/08/05 07:56:13 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.12 2004/08/05 07:55:44 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.11 2004/08/05 07:30:24 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.10 2004/08/05 06:48:56 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.9 2004/08/05 06:40:24 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.8 2004/07/29 03:48:33 podoni
- 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of $Log: CVS_2dFAQ,v $
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of Revision 1.15 2004/08/10 02:42:40 podoni
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of Revision 1.14 2004/08/09 01:59:44 podoni
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of Revision 1.13 2004/08/05 07:56:13 podoni
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of Revision 1.12 2004/08/05 07:55:44 podoni
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of Revision 1.11 2004/08/05 07:30:24 podoni
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of Revision 1.10 2004/08/05 06:48:56 podoni
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of Revision 1.9 2004/08/05 06:40:24 podoni
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of
- $Log: CVS_2dFAQ,v $
- Revision 1.15 2004/08/10 02:42:40 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.14 2004/08/09 01:59:44 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.13 2004/08/05 07:56:13 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.12 2004/08/05 07:55:44 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.11 2004/08/05 07:30:24 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.10 2004/08/05 06:48:56 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.9 2004/08/05 06:40:24 podoni
- 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of Revision 1.8 2004/07/29 03:48:33 podoni
- $Log: CVS_2dFAQ,v $
- Revision 1.15 2004/08/10 02:42:40 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.14 2004/08/09 01:59:44 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.13 2004/08/05 07:56:13 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.12 2004/08/05 07:55:44 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.11 2004/08/05 07:30:24 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.10 2004/08/05 06:48:56 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.9 2004/08/05 06:40:24 podoni
- 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of 210.183.99.253;;podoni;;
- $Log: CVS_2dFAQ,v $
- Revision 1.15 2004/08/10 02:42:40 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.14 2004/08/09 01:59:44 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.13 2004/08/05 07:56:13 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.12 2004/08/05 07:55:44 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.11 2004/08/05 07:30:24 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.10 2004/08/05 06:48:56 podoni
- 210.183.99.253;;podoni;;
1.
- Revision 1.9 2004/08/05 06:40:24 podoni
- 210.183.99.253;;podoni;;
- - The log message of this revision, along with the revision number, date, and author. Unlike other keywords, the previous expansions are not replaced. Instead, they are pushed down, so that the newest expansion appears at the top of an ever-growing stack of messages:
$Log: CVS_2dFAQ,v $Revision 1.12 1999/07/19 06:12:43 jrandom
Revision 1.15 2004/08/10 02:42:40 podoni
210.183.99.253;;podoni;;
Revision 1.14 2004/08/09 01:59:44 podoni
210.183.99.253;;podoni;;
Revision 1.13 2004/08/05 07:56:13 podoni
210.183.99.253;;podoni;;
Revision 1.12 2004/08/05 07:55:44 podoni
210.183.99.253;;podoni;;
Revision 1.11 2004/08/05 07:30:24 podoni
210.183.99.253;;podoni;;
Revision 1.10 2004/08/05 06:48:56 podoni
210.183.99.253;;podoni;;
Revision 1.9 2004/08/05 06:40:24 podoni
210.183.99.253;;podoni;;
Revision 1.8 2004/07/29 03:48:33 podoni
210.183.99.253;;podoni;;
say hello in Aramaic
Any text preceding the Revision 1.15 2004/08/10 02:42:40 podoni
Any text preceding the 210.183.99.253;;podoni;;
Any text preceding the
Any text preceding the Revision 1.14 2004/08/09 01:59:44 podoni
Any text preceding the 210.183.99.253;;podoni;;
Any text preceding the
Any text preceding the Revision 1.13 2004/08/05 07:56:13 podoni
Any text preceding the 210.183.99.253;;podoni;;
Any text preceding the
Any text preceding the Revision 1.12 2004/08/05 07:55:44 podoni
Any text preceding the 210.183.99.253;;podoni;;
Any text preceding the
Any text preceding the Revision 1.11 2004/08/05 07:30:24 podoni
Any text preceding the 210.183.99.253;;podoni;;
Any text preceding the
Any text preceding the Revision 1.10 2004/08/05 06:48:56 podoni
Any text preceding the 210.183.99.253;;podoni;;
Any text preceding the
Any text preceding the Revision 1.9 2004/08/05 06:40:24 podoni
Any text preceding the 210.183.99.253;;podoni;;
Any text preceding the
Any text preceding the Revision 1.8 2004/07/29 03:48:33 podoni
Any text preceding the 210.183.99.253;;podoni;;
Any text preceding the keyword on the same line will be prepended to the downward expansions too; this is so that if you use it in a comment in a program source file, all of the expansion is commented, too.
- $Locker: podoni $ - Name of the person who has a lock on this revision (usually no one):
$Locker: podoni $ - $Name: $ - Name of the sticky tag:
$Name: $ - $RCSfile: CVS_2dFAQ,v $ - Name of the RCS file in the repository:
$RCSfile: CVS_2dFAQ,v $ - $Revision: 1.15 $ - Revision number:
$Revision: 1.15 $ - $Source: /home/podoni/public_html/moniwiki/data/text/RCS/CVS_2dFAQ,v $ - Full path to the RCS file in the repository:
$Source: /home/podoni/public_html/moniwiki/data/text/RCS/CVS_2dFAQ,v $ - $State: Exp $ - State of this revision:
$State: Exp $
1.55 파일 감시(watching)와 잠금(locking) #
많은 버전관리 시스템과 달리 CVS는 파일 잠금을 지원하지 않는다. - CVS는 파일에 대해서 여러명이 연속적으로 편집하는 것을 막지 않는다. 그러나 여러분이 파일들을 감시하도록 하면 CVS는 파일이 편집될 때 감시자(watcher)를 알려줄 것이다. 파일들이 감시되고 있으면, 개발자는 편집을 위해서 cvs edit를 사용하고, 편집한 파일을 릴리스하기 위해서는 cvs unedit를 사용해야한다. 감시되지 않는 파일들은 CVS에게 알리지 않고 편집할 수 있다.cvs watch on (files) cvs watch off (files)
cvs watch add (files) cvs watch remove (files)또는
cvs watch add -a edit|unedit|commit|all (files) cvs watch remove -a edit|unedit|commit|all (files)특별한 CVS 파일 notify는 감시중인 파일이 변경될 때 무슨 일이 일어나는지 알려준다. 이것은 CVS서버에 있는 사용자의 사용자명을 메일로 전송한다. CVS 사용자가 다른 주소를 갖고 있다면 레포지토리의 CVSROOT 디렉터리에 "users" 파일을 설정하도록 한다. 항목은 ser:email 형식으로 한 줄에 입력한다.
1.55.1 Watch #
on - Declares that the files are being watched. This means that they are created read-only on checkout, and users should do cvs edit to make them read-write (and notify any watchers that the file is now being edited). Turning on a watch does not add you to the watch list for any files. (See watch add and watch remove for that.)off - Opposite of watch on. Declares that the files are no longer being watched.
add - Adds you to the list of watchers for this file. You are notified when someone commits or runs cvs edit or cvs unedit (but see the -a option).
remove - Opposite of watch add. Removes you from the list of watchers for this file.
: 디렉토리에 watch on을 하면 그 디렉토리에 생성되는 파일은 모두 watch on상태가 됨.
1.56 다수의 개발자가 CVS 이용하기 #
cvs status -q
이 명령은 다음과 같은 결과를 출력한다.
Up-to-date
The file is identical with the latest revision in the repository for the branch in use.
Locally Modified
You have edited the file, and not yet committed your changes.
Locally Added
You have added the file with add, and not yet committed your changes.
Locally Removed
You have removed the file with remove, and not yet committed your changes.
Needs Checkout
Someone else has committed a newer revision to the repository. The name is slightly misleading;
you will ordinarily use update rather than checkout to get that newer revision.
Needs Patch
Like Needs Checkout, but the CVS server will send a patch rather than the entire file.
Sending a patch or sending an entire file accomplishes the same thing.
Needs Merge
Someone else has committed a newer revision to the repository,
and you have also made modifications to the file.
File had conflicts on merge
This is like Locally Modified, except that a previous update command gave a conflict.
If you have not already done so, you need to resolve the conflict as described in section Conflicts example.
Unknown
CVS doesn't know anything about this file. For example, you have created a new file and have not run add. . edit : 소스를 수정할 준비(선언)을 한다.(읽기속성 해제가 되며 다른 개발자들이 알게 된다.)
. unedit : edit 을 한후 수정한 사항들을 버릴때.
. commit : edit 이 된것을 적용(체크인) 할때
1.57 cvs에 추가되어서는 안되는 파일 설정 ( CVSROOT/cvsignore ) #
repository 내애 추가되지 말아야 할 파일들을 적어둔다. 예를 들면,RCS SCCS CVS CVS.adm RCSLOG cvslog.* tags TAGS DEBUG core *.aps *.suo *.ncb *.vspscc *.vssscc *.scc
2 help 사용법 #
버전 확인$ cvs --version Concurrent Versions System (CVS) 1.11.2 (client/server)
$ cvs
Usage: cvs [cvs-options] command [command-options-and-arguments]
where cvs-options are -q, -n, etc.
(specify --help-options for a list of options)
where command is add, admin, etc.
(specify --help-commands for a list of commands
or --help-synonyms for a list of command synonyms)
where command-options-and-arguments depend on the specific command
(specify -H followed by a command name for command-specific help)
Specify --help to receive this message
The Concurrent Versions System (CVS) is a tool for version control.
For CVS updates and additional information, see
the CVS home page at http://www.cvshome.org/ or
Pascal Molli's CVS site at http://www.loria.fr/~molli/cvs-index.html
$ cvs -H update
Usage: cvs update [-APCdflRp] [-k kopt] [-r rev] [-D date] [-j rev]
[-I ign] [-W spec] [files...]
......
$ cvs --help-synonyms
CVS command synonyms are:
add ad new
admin adm rcs
annotate ann
checkout co get
commit ci com
diff di dif
export exp ex
history hi his
import im imp
log lo
login logon lgn
rannotate rann ra
rdiff patch pa
release re rel
remove rm delete
rlog rl
rtag rt rfreeze
status st stat
tag ta freeze
update up upd
version ve ver
(Specify the --help option for a list of other help options)
3 용어 #
repositoryworking file
working directory (or area)
checkout
commit (checkin)
RCS file
modules
revision
tag
branch
"the trunk"
HEAD / BASE
merge
conflict
4 문서를 만들면서 #
개인적으로, 몇 년 전 CVS를 처음 배우면서 제일 어려웠던게 간단한 소개 문서는 한글로 된게 있었지만 조금만 더 상세한 걸 찾아보려면 제대로 된 (영어든 한글이든) HOWTO 같은게 있지도 않았고, (지금도 있는지는 모르겠지만) Faq-O-Matic 으로 된 영어 FAQ 사이트가 레퍼런스로 쓸만한 유일한 곳이었습니다. 그래서 그때부터도 처음 오픈소스 세상을 접하는 개발자에게 CVS라는 장벽을 뛰어 넘는데 보탬이 되는 문서 같은게 꼭 필요하다고 느끼고 있었습니다.5 관련 자료 #
The CVS Manual
가장 정석적인 매뉴얼. 이 내용 그대로 인쇄된 책도 팔고 있죠. 배경지식 없이 처음부터 읽어나가기는 조금 부담스럽기도 합니다.CVS Best Practices (TLDP)
CVS 관련 (영문) 문서 가운데 가장 압축적으로 잘 쓴 문서 아닌가 싶습니다. 한번 훑어만 봐도 CVS 사용에 대해 한단계 업그레이드할 수 있는 문서. 중급자용 ^^;The CVS Book
- HomePage에서 html / pdf 형식 온라인 문서를 제공합니다.
- 2003년 8월에 3판이 나왔습니다.
- 특히 tag / branch 가 뭐고 어디에 어떻게 쓰는 물건인지 궁금한 분들은 이 책을 차근차근 읽어보세요.
- 자매품
The Subversion Book, 한글번역문서 Subversion_Book도 있습니다. 2003년 하반기에 출간될 예정이라는군요.
- HomePage에서 html / pdf 형식 온라인 문서를 제공합니다.
- 한글로 된 다른 문서 (hey님 위키에서)
- 관련 링크