<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    隨筆 - 175  文章 - 202  trackbacks - 0
    <2007年1月>
    31123456
    78910111213
    14151617181920
    21222324252627
    28293031123
    45678910

    第一個Blog,記錄哈哈的生活

    常用鏈接

    留言簿(16)

    隨筆分類

    隨筆檔案

    文章分類

    文章檔案

    收藏夾

    Java links

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    這篇教程是寫給從未接觸過Subversion的人看的,高手就不要浪費時間了。由于Subversion自帶的文檔太長,而且講得太全面了,可能剛入門者沒有耐心一點點看完(比如我剛接觸Subversion的時候^_^),所以想寫一篇比較基礎,但是版本控制過程中遇到的各個方面(這里是指我自己遇到過的,Subversion還有許多基礎的方面我沒有遇到,用軟件工程的話講就是沒有需求^_^,這些方面我就沒有寫)都能涉及到的教程,讓更多的人能夠了解subversion和使用subversion這個優(yōu)秀的版本控制工具(好像subversion在國內用的人很少啊)。文中如有不對的地方,還請高手指正。特別感謝subversion.org.cn的論壇斑竹回答我關于lock的問題,特別感謝subversion的作者提供了這么一個優(yōu)秀的版本控制工具。

    一.安裝subversion
    首先安裝subversion1.2.3和圖形化客戶端TortoiseSVN-1.2.4.4479(該版本的TortoiseSVN針對subversion1.2.3)。subversion在服務器端和客戶端都需要安裝,TortoiseSVN只要在客戶端安裝就行。

    二.建立Repository(保存文檔各個版本的數(shù)據(jù)庫)
    在服務器端建立一個空目錄,比如“C:\SVNProjects\Project1”。建立Repository的具體方式是:在subversion安裝目錄下的\bin子目錄下有一個svnadmin.exe文件,在DOS窗口下進入該\bin目錄,并執(zhí)行“svnadmin create --fs-type bdb C:\SVNProjects\Project1”。之后你會發(fā)現(xiàn)原本是空目錄的“C:\SVNProjects\Project1”下多出了幾個目錄和幾個文件。這些目錄和文件就是用來存儲文檔各個版本的數(shù)據(jù)庫。
    ***除了用命令行方式建立Repository外,還可以用TortoiseSVN建立,不過這要求在服務器端也安裝TortoiseSVN。建立Repository的具體方式是:在“C:\SVNProjects\Project1”目錄上右擊鼠標,TortoiseSVN->Create Repository here....,然后彈出一個對話框選擇Berkeley Database(BDB),然后點OK按鈕。

    三.配置Repository
    建立Repository后,還應該對Repository進行配置,主要的目的是控制訪問權限和添加Repository的用戶。“C:\SVNProjects\Project1\conf\svnserve.conf”文件就是該Repository的配置文件。它是一個典型的INI文件,雖然該文件并不是以INI作為擴展名。用文本編輯器打開它后,可以看見一些文本,該文件以“#”開始的行都是注釋行。將“#[general]”行的“#”刪掉,“#anon-access = none”“#auth-access = write”“#password-db = passwd”行也刪掉“#”,注意,只是刪掉“#”字符,不要把整行都刪了。“anon-access = none”是指不允許匿名訪問Repository,不管是讀操作還是寫操作。“auth-access = write”表示認證的訪問允許寫操作,當然讀操作就更允許了。“password-db = passwd”表示用戶名及用戶密碼存在一個叫passwd的文件里,這個文件也在“C:\SVNProjects\Project1\conf”目錄下,用文本編輯器打開后,將“# [users]”的“#”字符刪掉,然后在文件的最后添加一個新行,在該行寫上用戶名和密碼,格式為“xxxx = yyyy”其中“xxxx”表示用戶名,“yyyy”表示密碼,一行只能設定一個用戶,要設定多個用戶,請再起新行。

    四.啟動subversion服務器
    Subversion提供了三種服務器模式,這里介紹其中的一種,它是subversion自帶的一種輕量級的服務器,該服務器啟動后,在服務器端的3690端口監(jiān)聽客戶端的連接請求(這是默認情況下,如果你有其他程序占用了3690端口,可以用“--listen-port”參數(shù)指定服務器監(jiān)聽端口)。服務器的具體啟動方式是:在subversion安裝目錄下的\bin子目錄下有一個svnserve.exe文件,該文件運行時可帶參數(shù),常用的參數(shù)有兩個一個是“-d”,該參數(shù)表明服務器作為一個精靈進程一直運行,直到手動結束該程序。另一個參數(shù)就是“-r”,該參數(shù)指定服務器進程尋找Repository的根路徑。在DOS窗口下進入\bin目錄,并執(zhí)行:
    “svnserve.exe -d -r C:\SVNProjects”。服務器這時就啟動了。“-r C:\SVNProjects”參數(shù)的作用是:當在客戶端用“svn://xxx/project1”(xxx可以是服務器端主機名,也可以是服務器端的ip地址)訪問服務器的Repository時,服務器會知道你要訪問的Repository路徑是“C:\SVNProjects\Project1”。如果當我有兩個完全不相干的項目要進行版本控制時,可以再建立一個空目錄 “C:\SVNProjects\Project2”,并在其中再建立一個Repository,此時客戶端就可以用“svn://xxx/project2”訪問“C:\SVNProjects\Project2”下的Repository。至此,服務器端就配置完畢了。

    五.客戶端的使用
    1.Checkout Repository
    首先要Checkout服務器端的Repository,所謂的Checkout就是指獲得服務器端指定的Repository存儲的所有文件。這個Checkout和Visual Source Safe的Checkout意義完全不一樣,VSS的Checkout指的是鎖定某個文件,如果你以前使用過VSS,在學習Subversion時這個問題一定要注意。Checkout的具體方式是:在客戶端新建一個空目錄,比如:F:\Project1
    在該目錄上單擊右鍵,在彈出式菜單中選中SVN Checkout...,之后在“URL of Repository”文本框中填入你想要連接的Repository的地址,對于在本教程第二節(jié)建立的Repository,URL應該是“svn://xxx/project1” (xxx可以是服務器端主機名,也可以是服務器端的ip地址)。
    然后點OK,會彈出一個認證對話框,輸入在教程第三節(jié)設置的用戶名和密碼。點OK后就完成了對Repository的Checkout。比如:在服務器端Repository中有一個a.txt文件,那么Checkout之后F:\Project1目錄下也會出現(xiàn)一個a.txt文件。在本例中由于服務器端的Repository還未添加任何文件,所以在客戶端的F:\Project1下沒有文件被Checkout。執(zhí)行Checkout除了會在F:\Project1產生Repository存儲的文件及目錄外,還會產生了一個“.svn”的隱含目錄,該目錄是由subversion管理的,不要刪除或者手工改動其中的文件和目錄。現(xiàn)在F:\Project1中的文件和目錄就叫做Repository的“Working Copy”簡寫“WC”(這個簡寫...汗)。以后對Repository中文件和目錄的修改,添加,刪除的操作,都是通過對這個“Working Copy”的操作實現(xiàn)的。Checkout執(zhí)行完后,會發(fā)現(xiàn)F:\Project1目錄的圖標的左下角附著了一個小的狀態(tài)圖標(當F:\Project1目錄中的文件改變時,這個狀態(tài)圖標也會隨之變化),它表示F:\Project1是一個Repository的“Working Copy”,F(xiàn):\Project1內的所有文件和目錄也會有類似的狀態(tài)圖標。

    2.添加文件
    將要添加的文件或者目錄拷貝到F:\Project1下,然后在該文件或目錄上單擊右鍵,TortoiseSVN->Add,點OK。如果添加了不止一個文件或目錄,則鼠標不要在F:\Project1中點中任何文件,然后單擊右鍵,TortoiseSVN->Add,就可以添加多個文件或目錄。這時文件的狀態(tài)圖標會發(fā)生變化。Add命令只是告訴本地的“Working Copy”將該文件納入版本管理,并沒有將這個改變提交到服務器端,如果想要別人也看見你對Repository的修改,你需要
    在F:\Project1下單擊右鍵,SVN Commit...,將你所做的修改提交到Repository。文件的狀態(tài)圖標也會更新。不管你在“Working Copy”內添加、修改、刪除文件后,要想其他人也看見你的修改,都必須用Commit命令將所做修改遞交到服務器端的Repository。

    3.修改文件
    用文本編輯器或IDE對文件修改后,文件的狀態(tài)圖標會變化,然后單擊右鍵,SVN Commit...
    提交修改,只有當執(zhí)行Commit提交修改后,你所作的修改才會反映到服務器端的Repository中。

    4.刪除文件
    刪除文件時,選中要刪除的文件或目錄,單擊右鍵,TortoiseSVN->Delete,提交修改。注意千萬不要用“Delete”鍵來刪除文件,否則將無法提交你的修改。這一點對目錄的刪除來說尤為重要。

    5.放棄修改
    當你添加、修改、刪除文件后,決定放棄修改,你可以單擊右鍵,TortoiseSVN->Revert,本地的“Working Copy”中的文件和目錄會恢復到你修改前的狀態(tài)。

    6.獲取Repository的最新版本
    當一個團隊合作開發(fā)項目時,每一個人都在不斷的對Repository進行更新,你需要不斷的更新自己的“Working Copy”,以獲取項目最新的文件。當?shù)谝淮潍@得最新Repository的文件時,我們用Checkout命令,前面已經介紹了,以后再獲取最新文件時就不用Checkout了。而改用Update命令。接著前面的例子,這時F:\Project1已經成為一個“Working Copy”了(通過執(zhí)行Checkout命令),現(xiàn)在其他人已經對Repository進行了修改,我想將別人的修改反映到我的“Working Copy”中,具體的方法是:在F:\Project1目錄上單擊右鍵,SVN Update。這時F:\Project1中的文件就是最新的版本了。注意,如果當你的“Working Copy”中有被修改的文件,或者有被刪除的文件,并且還未提交這些修改時,這些文件在執(zhí)行Update過程中是不會被更新的。比如你修改了F:\Project1下a.txt文件,還未提交修改,那么,當你對F:\Project1進行Update時,a.txt文件是不會更新為Repository上的a.txt文件的。所以如果想放棄當前的所有修改,并將F:\Project1下所有文件及目錄更新到最新版本應該先對F:\Project1執(zhí)行Revert命令再執(zhí)行Update命令。

    7.subversion的版本控制模型
    當你用subversion進行版本控制時,Subversion會記錄你對Repository進行的每一次修改(包括添加,修改,刪除等等),每修改一次Repository都會產生一個新的Revision(修訂版本號),不同的Revision代表了不同時刻Repository的狀態(tài),因此我們可以用這個Revision回朔任意時刻Repository的狀態(tài),就像時間機器一樣,也就是說某一Revision 就是Repository 在某一時刻的一個“快照”。注意:Revision 不是針對某一個文件或者目錄,而是針對整個Repository而言的。每修改一次Repository,Revision 都會增加1。
    Subversion的版本控制模型是一種叫做Copy-Modify-Merge(拷貝-修改-合并)的模型。考慮這種情況:張三和李四是公司同一個部門的同事,他們共同維護一個文本文件a.txt,并且對該文件進行版本控制,因此他們把這個文件放到一個Repository上共同維護該文件。周一上午9點,張三和李四同時想對a.txt文件進行修改,于是他們同時從Repository上取得該文件的最新版本(Revision 10),然后進行修改。過了三分鐘,張三首先完成了修改,他在該文件的第五行修改了一個單詞的拼寫(將Typo改為Type),于是張三對修改后的文件執(zhí)行Commit 命令,將修改提交到服務器端的Repository 中。這時Repository 的Revision 變?yōu)?1。六分鐘過后,李四也完成了他的修改,他修改了該文件第十行上的一個單詞拼寫(將He改為She),于是他也對修改后的文件執(zhí)行Commit 命令,這時Subversion 在提交修改時會發(fā)現(xiàn),李四修改的文件是Revision 10的a.txt文件,而不是最新的Revision 11的a.txt文件。于是,Subversion 提示李四在提交修改前,應該先將Working Copy更新到最新版本,李四執(zhí)行Update命令將Working Copy更新到Revision 11,這時Subversion會提示已經完成合并,李四的a.txt文件的第五行的“Typo”已經變?yōu)榱恕癟ype”,第十行還是“She”,就是說Subversion 已經將張三的修改“合并”到李四的a.txt文件中了。之后,李四再執(zhí)行Commit命令,就能將他對第十行的修改(將He改為She)提交到服務器端的Repository中了(生成Revision 12)。但是這種合并在某些情況下會變得復雜一些,比如:李四對a.txt文件的修改并不是第十行,而是與張三同樣修改第五行的單詞,李四將“Typo”改為“Typr”,并且提交修改,這時Subversion會提示李四在提交修改前,應該先將Working Copy更新到最新版本,李四執(zhí)行Update命令將Working Copy更新到Revision 11,這時Subversion將Revision11的a.txt文件與李四修改的a.txt文件進行合并時發(fā)現(xiàn)李四修改的同樣是第五行,于是Subversion就無法判斷是李四的修改(“Tpyr”)正確還是張三的修改(“Type”)正確,因為他們都是在Revision10的a.txt基礎上作的修改。這種情況叫做Conflict(沖突),a.txt文件的圖標會變成一個黃色三角。這時,只能依靠李四自己去判斷到底第三行應該修改為“Typr”還是“Type”。當李四確定修改之后,在a.txt文件上單擊右鍵,TortoiseSVN->Resolved
    告訴Subversion已經解決了Conflict。這時再執(zhí)行Commit命令就能提交修改(生成Revision 12)。Subversion 這種控制方式保證了你對文件所作的修改都是基于文件的最新版本。

    8.“.svn”目錄
    在客戶端Working Copy的每一層目錄中都會有一個“.svn”目錄,該目錄是Subversion進行管理用的目錄。不要手動修改其中的文件。該目錄存儲了Working Copy的一個副本(實際存儲副本的地方是F:\project1\.svn\text-base目錄),比如:F:\Project1是一個Working Copy,該目錄下有兩個文件a.txt和b.txt還有一個子目錄ccc,子目錄ccc中還有一個d.txt文件。“.svn”目錄中存儲的是你最近一次執(zhí)行完Update或者Commit命令之后當前目錄中文件的副本,比如:F:\project1\.svn\text-base中存儲的a.txt和b.txt是最近一次執(zhí)行完Update或者Commit命令之后F:\project1下的a.txt和b.txt的拷貝。也就是說你所作的修改都是基于“.svn”目錄存儲的那些文件。這種機制可以讓我們在不連接網絡的情況下,將Working Copy中的文件恢復到修改之前的狀態(tài)。Subversion的Revert命令就是利用了這種機制來實現(xiàn)的。比如你修改了F:\project1\a.txt文件,這時你又改變了主意想放棄對該文件的修改,你可以單擊右鍵,TortoiseSVN->Revert,修改過的F:\project1\a.txt文件就會被F:\project1\.svn\text-base中a.txt文件的副本所替代,使得a.txt恢復到修改前的狀態(tài)。
    Working Copy中每一個子目錄下都會有一個“.svn”目錄,并不是只有最上層目錄才有“.svn”目錄。所以,F(xiàn):\project1\ccc下也有一個“.svn”目錄,該目錄存儲的是F:\project1\ccc\d.txt的副本(d.txt的副本位于F:\project1\ccc\.svn\text-base)。也就是說每個“.svn”目錄只存儲同級目錄中的“文件”副本,而不存儲“目錄”副本。“.svn”目錄存有許多重要的內容,所以前面說在刪除文件或目錄時,必須用TortoiseSVN->Delete,而不能用“Delete”鍵來刪除文件或目錄,尤其是對于目錄的刪除。

    9.混合版本
    Subversion的Working Copy被設計成一種能夠包含不同版本的文件共存的形式。比如F:\Project1是一個Working Copy,該目錄下有兩個文件a.txt和b.txt。執(zhí)行Update命令,將Working Copy更新到最新版本(Revision 24)。這時,a.txt和b.txt的Revision都是24(其實對于單個文件來說并不存在Revision,Revision是對于整個Repository而言的,這里所指的是Repository的Revision24所存儲的a.txt和b.txt,但為了方便而采用這種描述方式,請注意,下同)。之后,你的同事修改了a.txt,并且提交了修改,這時Repository的Revision就變成25了。注意,這時你沒有再次執(zhí)行Update,因此你的Working Copy的Revision還是24。這時你修改了b.txt文件,并提交修改。因為Revision25并沒有對b.txt文件進行修改,因此你對b.txt文件的修改是基于b.txt文件最新的版本,所以不會出現(xiàn)Conflict。當你提交b.txt的修改后,產生Revision26。這時你會發(fā)現(xiàn)你的Working Copy中的a.txt文件并不是Revision25中的a.txt文件,它還是Revision24的a.txt文件,而你的b.txt文件是Revision26的b.txt文件。也就是說當你Commit時,你的Working Copy中只有你提交的那些文件是最新版本,而其他沒有修改的文件并不會更新為最新版本。這樣就造成了你的Working Copy由不同的Revision文件所組成(Revision24的a.txt文件和Revision26的b.txt文件)。前面說過在提交修改前必須保證你是在文件的最新版本基礎上修改,如果在這種混合版本的情況下,怎樣才能知道當前Working Copy中的文件是否為最新版本?在前面所說的“.svn”目錄中有一個文件名為“entries”的文件,該文件記錄了當前Working Copy中的每一個文件的Revision,因此當你Commit時,Subversion會從該文件中取得你提交文件的Revision,再與Repository的最新Revision一比較就可以知道你修改的文件是否基于該文件的最新版本。

    10.文件的鎖定
    前面說過Subversion的版本控制模型是一種叫做Copy-Modify-Merge(拷貝-修改-合并)的模型。該模型在對文本文件進行版本控制時工作的很好,但是有些需要進行版本控制的文件并不是文本文件,比如說圖像文件,這種模型在這種情況下就不能正常工作了,因為文本文件可以合并,而二進制文件則無法合并。所以Subversion從1.2開始支持一種叫Lock-Modify-Unlock(鎖定-修改-解鎖)的版本控制模型。在Windows下最常用的版本控制軟件Visual Source Safe(VSS)就是采用這種模型。這種模型要求在對一個文件修改前首先要鎖定這個文件,然后才能修改,這時,別人將無法對該文件進行修改,當修改完后再釋放鎖,使其他人可以對該文件進行鎖定,然后修改。鎖定文件的方法是:TortoiseSVN->Get Lock...再點OK按鈕,這時就完成了對文件的鎖定。這時,如果其他人想對文件進行鎖定時,Subversion會對他提示該文件已經被別人鎖定。當你修改完文件后,然后單擊右鍵,SVN Commit...,將修改提交,默認情況下,提交的時候就會對該文件解鎖,如果你想仍然鎖定該文件,請在commit時彈出的對話框中選中keep lock復選框。

    11.文件的附加屬性
    在Subversion中,每個文件可以擁有一種叫做附加屬性的東西。附加屬性描述了該文件所擁有的一些特性。Subversion已經預定義了一些附加屬性(這里只是指Subversion已經定義了一些附加屬性的“名稱”,并不是指已經將這些屬性附加在文件上了,比如默認情況下文本文件一開始不含任何屬性,直到人為的對該文件添加附加屬性),并且你可以對文件添加自定義的屬性。Subversion對待附加屬性就像對待文件內容一樣,當修改了一個文件的附加屬性(添加,改變,刪除附加屬性),即使沒有對文件的內容進行修改,同樣可以Commit該文件,就像更改了文件內容那樣,Repository也會生成新的Revision,所以從某種意義上來說,Subversion不區(qū)別對待文件的附加屬性的修改和文件的內容的修改,文件的附加屬性可以看成是一種特殊的文件內容。Subversion預定義了若干個附加屬性,這里只討論“svn:needs-lock”屬性,因為它與我們上面的文件鎖定會產生的一個問題有關。其他的屬性可以參考Subversion自帶的幫助文檔。考慮這種情況,張三和李四同時想對一個圖片文件a.jpg作修改,張三在修改時先將該文件鎖定,然后進行修改,同時李四也開始對該文件進行修改,但李四忘記了對非文本文件進行修改時應該先鎖定該文件。張三首先對該文件修改完畢,于是張三向服務器提交了他的修改。之后,李四也完成了修改,當他提交修改時,Subversion提示李四的文件版本不是最新的,在Commit之前應先更新a.jpg到最新版本,由于圖片文件無法合并,這就意味著張三和李四之間必定有一個人的修改會作廢。應用“svn:needs-lock”屬性可以避免這個問題。當一個文件擁有“svn:needs-lock”屬性時,該文件在沒有鎖定時,文件的圖標是灰色的,表示該文件是一個只讀文件(該文件的Windows只讀屬性的復選框為選中),這個灰色的圖標就會提醒想對該文件進行修改的人,在修改該文件之前應該首先鎖定該文件。鎖定該文件之后,文件的只讀屬性就會去掉了,一旦釋放掉鎖,文件的圖標又會變成灰色,文件也會變成只讀的了。李四在這種情況下就會避免在沒有鎖定文件時對文件進行修改。對非文本文件添加“svn:needs-lock”屬性應該在將該文件第一次添加到Repository時就設置,當然,一個文件可以在任意時刻添加附加屬性,這樣做是為了減少李四所遇到的那個問題發(fā)生的幾率。具體的方法是:首先將a.jpg文件拷貝到Working Copy中,然后在該文件上單擊右鍵,TortoiseSVN->Add,告訴Subversion要將該文件納入版本控制,接著在該文件上單擊右鍵并選中屬性,在彈出的屬性對話框中選中Subversion 頁。在下拉框中選中“svn:needs-lock”,并在下面的文本框中填入“*”(其實這里填什么都無所謂,只要文件有“svn:needs-lock”附加屬性就行),之后點Set按鈕,“svn:needs-lock”附加屬性就設置好了。然后執(zhí)行Commit命令提交修改。這時當其他人執(zhí)行Update時,a.jpg就會添加到他們的Working Copy中,并且文件的附加屬性也會隨文件一起被得到。可以看到a.jpg此時的圖標就是灰色的,文件的Windows屬性也是只讀的。

    12.回到以前的版本
    由于Subversion會記錄你對Repository的每一次修改,因此能夠很容易的獲得Repository以前某一時刻的狀態(tài)。比如:現(xiàn)在Repository的最新Revision是56,這時我想看看Repository在Revision24時的狀態(tài),可以在本地的Working Copy中單擊右鍵,TortoiseSVN->Update to Revision...,然后輸入你想要回復到的Revision號,點OK按鈕。
    回到以前的版本還有一種情況是我想將Repository的最新Revision的狀態(tài)與以前某一個Revision的狀態(tài)一模一樣,上面那種方法就不適合,上面的那種方法只是將本地的Working Copy回復到以前的狀態(tài),而服務器端的Repository并沒有回到以前的狀態(tài)。將Repository的最新Revison的狀態(tài)回復到以前某個Revision的狀態(tài)具體的方法是:先執(zhí)行Update命令將Working Copy更新到最新的Revision,然后在Working Copy中單擊右鍵,TortoiseSVN->Show Log,彈出的Log Messages窗口中會顯示該Repository的所有Revision,選中最新的Revision,之后按住Shift鍵,再單擊你想回復到的Revision+1的那個Revision(比如Repository的最新Revision是30,你想將Repository的狀態(tài)回復到Revision16,那么就選中Revision30,再按住Shift鍵,選中Revision17,就是說選中Revision17到Revision30之間的所有Revision)。然后在選中的Revision上單擊右鍵,選中“Revert changes from these revision”。再點Yes按鈕,就可以將Working Copy的狀態(tài)回復到目標Revision。注意,此時
    只是Working Copy回復到目標Revision,之后應該用Commit提交修改,這樣Repository最新狀態(tài)就與目標Revision的狀態(tài)一樣了。
    這兩種回復到以前版本的方式截然不同,第一種方式是將整個Working Copy回復到某個Revision,也就是說這種方式Working Copy中的“.svn”目錄所存的文件副本也與目標Revision的一模一樣,如果這時你沒有修改文件,你將不能執(zhí)行Commit命令。而第二種方式客戶端Working Copy中的“.svn”目錄所存的副本始終是最新的Revision的文件副本(這里我們基于一個假設:在Update之后沒有其他人對Repository做修改)。這種方式就像是我們自己手工將Working Copy的文件狀態(tài)修改為目標Revision,在修改之后提交修改一樣。


    13.查看修改
    有時我們對Working Copy的許多文件進行了修改,這些文件位于不同的子目錄,我們就可以在Working Copy的最上層目錄單擊右鍵,TortoiseSVN->Check For Modifications,彈出的對話框就會顯示你所做的所有修改明細。
    還有一種情況是我們的Working Copy已經很久沒有執(zhí)行Update命令,我們想看看Working Copy中有哪些文件已經發(fā)生修改了,這時就可以在Working Copy的最上層目錄單擊右鍵,TortoiseSVN->Check For Modifications,在彈出的對話框點擊Check Repository按鈕后,就會顯示服務器端已經修改了的文件。該方法還有一個用途就是查看文件的鎖定,當你想鎖定一個文件時,你想先看看這個文件有沒有被別人鎖定,點擊Check Repository按鈕會顯示服務器端Repository所有被鎖定的文件,如果你想鎖定的文件不在這里面,那就說明該文件目前沒有人鎖定

    posted on 2007-01-10 16:39 哈哈的日子 閱讀(492) 評論(0)  編輯  收藏 所屬分類: Java
    主站蜘蛛池模板: 成人免费网站在线观看| 亚洲成人高清在线观看| 波多野结衣久久高清免费| 曰批全过程免费视频在线观看无码| 亚洲日韩av无码中文| 麻豆亚洲AV永久无码精品久久| 国产国拍亚洲精品福利 | 国国内清清草原免费视频99| 一级特黄录像免费播放肥| 亚洲av片在线观看| 99亚偷拍自图区亚洲| 精品无码一区二区三区亚洲桃色| 亚洲一区二区三区影院| 亚洲国产精品成人| 国产美女a做受大片免费| 大地资源二在线观看免费高清| 99精品视频免费在线观看| 无码国产亚洲日韩国精品视频一区二区三区| 国产午夜无码视频免费网站| 中文字幕免费观看| 可以免费观看的毛片| 韩国免费a级作爱片无码| 男女交性无遮挡免费视频| 妇女自拍偷自拍亚洲精品| 亚洲av中文无码字幕色不卡| 中文字幕亚洲男人的天堂网络| 亚洲婷婷综合色高清在线| 久久水蜜桃亚洲av无码精品麻豆| 亚洲A∨无码一区二区三区| 亚洲AV综合色区无码一区| 亚洲av中文无码乱人伦在线r▽ | 国产福利免费视频| 国产精品免费久久久久影院| 国产精品福利片免费看| 精品久久久久久国产免费了| 老司机精品免费视频| 另类免费视频一区二区在线观看| 最新国产乱人伦偷精品免费网站| 日韩免费电影网址| 美丽的姑娘免费观看在线播放 | 亚洲精品麻豆av|