2008-10-10 116 views
7

我們的一個內部編寫工具被送入一個cvs提交表格的痕跡:如何通過命令行從CVS獲取新增文件的特定版本?

Checking in src/com/package/AFile.java; 
    /home/cvs/src/com/package/AFile.java,v <-- Afile.java 
    new revision: 1.1.2.56; previous revision: 1.1.2.55 
    done 

的工具,然後在工作目錄發出cvs update -r 1.1.2.56命令獲取來自CVS的文件已經有檢查特定的代碼分支退房手續。

如果在工作目錄中存在AFile.java的現有版本,此命令可正常工作。但是當我們得到工作目錄中沒有版本的文件的跟蹤時,該命令無法獲取文件。

有沒有辦法做到這一點?

回答

21

目前尚不清楚您的最終目標是什麼:將整個存儲庫置於所需狀態(選擇所選分支的修訂版本)或從存儲庫獲取單個文件以供進一步處理。我認爲這是後者。

然後,你需要這個命令:

cvs checkout -r <revision> -p filename.ext > ~/tmp/filename.ext 

這將轉儲到標準輸出指定文件(或文件),這可能會被重定向到臨時位置和處理的指定版本。

或者你可以使用:

cvs export -r <revision> -d ~/tmp module/filename.ext 

,這將導出存儲庫指定的目標目錄(的一部分)。

+1

謝謝。 我正在與cvs co -r /module/path/to/file.txt沒有-p選項 – 2008-10-10 06:32:11

+0

如果你不使用-p選項,它會設置sticky標誌,所以所有的fugure checkout將使用舊版本。 – CpnCrunch 2017-03-15 15:34:49

+0

結帳命令對我不起作用:它爲我指定的文件顯示「找不到模塊」。 – CpnCrunch 2017-03-15 15:47:06

1

一種解決方案是將工具更改爲爲該文件發出「cvs co」,並指定與更新一樣的修訂版本。 checkout命令必須從樹的頂部完成,而不是在包含文件的目錄中完成。我遇到過類似的情況,即更新無法找到新文件,需要按照我所描述的方式檢出文件。

+0

謝謝。 我在發佈問題後立即嘗試過,它工作。 – 2008-10-10 06:29:59

2

cvs --help

告訴你,你可以使用-H ARG查看幫助,在一個特定的CVS命令,像這樣:

$ cvs -H checkout 
Usage: 
    cvs checkout [-ANPRcflnps] [-r rev] [-D date] [-d dir] 
    [-j rev1] [-j rev2] [-k kopt] modules... 
     -A  Reset any sticky tags/date/kopts. 
     -N  Don't shorten module paths if -d specified. 
     -P  Prune empty directories. 
     -R  Process directories recursively. 
     -c  "cat" the module database. 
     -f  Force a head revision match if tag/date not found. 
     -l  Local directory only, not recursive 
     -n  Do not run module program (if any). 
     -p  Check out files to standard output (avoids stickiness). 
     -s  Like -c, but include module status. 
     -r rev Check out revision or tag. (implies -P) (is sticky) 
     -D date Check out revisions as of date. (implies -P) (is sticky) 
     -d dir Check out into dir instead of module name. 
     -k kopt Use RCS kopt -k option on checkout. (is sticky) 
     -j rev Merge in changes made between current revision and rev. 
(Specify the --help global option for a list of other help options) 

...教人如何釣魚... :)

2

我曾嘗試如下方法

cvs checkout -r <revision> -p filename.ext > ~/tmp/filename.ext 

它給錯誤樣

cvs checkout: cannot find module `filename.ext` -ignored. 

所以我做了如下的方式

cvs checkout -r <revision> -p Module_name/path_to_file/filename.ext > ~/tmp/filename.ext 

現在它工作得很好。

1

這是對我的作品,如檢出命令總是給人一種「模塊找不到」錯誤的唯一方法:

cvs diff -r <revision> <file> > /tmp/patch 
cp <file> /tmp 
cd /tmp 
patch -R < patch 

看來,CVS丟球這一點。

相關問題