本人使用SVN的時間不是很長,在使用之前也僅僅是粗淺的了解過這個軟件,。從今年的8月份開始,由于一個項目使用Eclipse 3.1,,跨地域的開發(fā),為了適應(yīng)不同的開發(fā)人員處于不同的地理位置,,因此我們使用SVN作為團隊開發(fā)的管理工具。開始使用時,,僅僅是邊學(xué)邊用,遇到不懂的 地方再去查找資料,。今天由于有點時間,先把合并過程遇到的沖突問題詳細(xì)了解一下,。 可以使用svn status -u命令來查看一下某個問題是否會有沖突發(fā)生。在使用svn update 的時候,,會出現(xiàn)如下一些信息: $ svn update U INSTALL G README C bar.c Updated to revision 46. 那 么,U 開頭的信息提示你,,這個文件在你本地沒有修改過,,文件已經(jīng)根據(jù)版本庫的新版本更新了,。G 開頭的信息提示你,這個文件在你本地已經(jīng)修改過,,但是和版本庫中對應(yīng)的版本并沒有沖突的地方,svn已經(jīng)合并更新了,。而C 開頭的信息提示你,這個文件有點麻煩,你在本地的修改和版本庫中的版本修改的地方重疊了,,也就是說,你修改了某一行,,你的同事也修改了同一行。這個就需要 你自己手工去解決了,。當(dāng)沖突發(fā)生時,要注意到有三件事情可以幫助你解決問題,。 a.Subversion會給這個文件作出c標(biāo)記,。 b.如果Subversion認(rèn)為這個文件時可以合并的,,它會一個沖突標(biāo)記(特殊的橫線來分開沖突的代碼塊) c.對每一個沖突的文件,,Subversion放置三個額外的未版本化文件到你的工作拷貝。 filename.mine 你更新前的文件,,沒有沖突標(biāo)志,只是你最新更改的內(nèi)容,。(如果這個文件不可以合并,.mine文件不會創(chuàng)建,,因為它和工作文件相同。) filename.rOLDREV 這個是你做更新操作以前的BASE版本,,就是你在上次更新之后未作更改的版本。 filename.rNEWREV 這是Subversion從服務(wù)器剛剛收到的版本,。這個版本就是版本庫的HEAD版本,。 例 如,,如果sally修改了一個文件sandwich.txt, 而harry也剛剛修改了這個文件的相同位置并提交到服務(wù)器。那么sally在做這個文件的update操作的時候會得到三個額外的文件 sandwich.txt.mine,、sandwich.txt.r1、sandwich.txt.r2,。并且在提交的時候會遭到服務(wù)器的拒絕,,因為這個 文件的沖突問題還沒有得到解決。要解決這個沖突,,可以選擇: a. 手工合并沖突文件(檢查和修改文件中的沖突標(biāo)志),。 b.用一個臨時文件(三個中的一個)覆蓋你的工作文件,。 c.運行svn revert <filename>來放棄所有的修改。 一旦解決了你的沖突,,需要通過命令svn resolved讓subversion知道并刪除三個臨時文件,。這時才可以提交。 下面再說說手工合并沖突,。開始的時候讓人覺得害怕,但做一段時間之后,,就覺得不那么煩人了。 看看如下文本: Mayonnaise Lettuce Tomato Provolone <<<<<<< .mine Salami Mortadella Prosciutto ======= Sauerkraut Grilled Chicken >>>>>>> .r2 Creole Mustard 一連串的大于,、小于,、等于號是沖突標(biāo)記,這些數(shù)據(jù)得全部刪除才可以提交,。其中, <<<<<<< .mine Salami Mortadella Prosciutto ======= 是你在沖突區(qū)里面做的修改,。 Sauerkraut Grilled Chicken >>>>>>> .r2 是別人在沖突區(qū)做的修改,。 在沖突區(qū)中,,或許你需要和你的同事溝通來安排沖突區(qū)的文本內(nèi)容,如果是程序代碼,,你需要和同事商量一下,中間的這段代碼到底應(yīng)該是什么樣子的,。 所有沖突區(qū)得到合理的解決之后,你就可以提交你的文件了,。 命令行 Subversion 入門如果您參與的項目正在使用 Subversion 進行版本控制,您將需要使用 Subversion 訪問和更改項目源文件。您可以點擊項目的左側(cè)導(dǎo)航窗格上的“Subversion”鏈接,,在線瀏覽源代碼以查看該項目的目錄結(jié)構(gòu)和文件,。 “Subversion”頁面顯示三個子目錄:branches/、tags/,、trunk/ 和一個自述文件。自述文件可以使您對 Subversion 存儲庫有一個整體了解,。您可以點擊“訪問選項”,查看 Subversion 客戶端安裝說明,。您的本地計算機上必須安裝有 Subversion 客戶端。 獲取項目的本地工作副本: 若要獲取最新源文件的“工作副本”,,您必須首先簽出這些源文件,這一過程會將文件從存儲庫復(fù)制到您的系統(tǒng)中,。在您的外殼程序或終端客戶端,請鍵入: svn checkout https://(項目名稱).(域)/svn/(項目名稱)/(DIR) (項目名稱) --username [在此處輸入用戶名] 當(dāng)系統(tǒng)提示您時輸入您的用戶密碼,。此密碼應(yīng)與您在本站點中的用戶賬號的密碼相同,。不指定目錄將簽出整個項目源代碼。您可能希望簽出“trunk/”目錄,,因為此目錄具有工作“www/”文件夾,。 轉(zhuǎn)換:--revision (-r) REV, --quiet (-q), --non-recursive (-N), --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR 注意:如果站點未啟用 SSL(安全套接字層),則在執(zhí)行 Subversion 操作時,,請使用
處理 Subversion 存儲庫中的文件從項目存儲庫中簽出本地副本后,,您可以在本地計算機上編輯現(xiàn)有文件,、創(chuàng)建新文件和目錄,、以及刪除文件。在您將所做的任何更改提交回 Subversion 存儲庫之前,,這些更改只對項目文件的本地副本起作用,。 將工作副本中的文件/目錄添加到存儲庫中: 在您第一次在工作目錄中創(chuàng)建并編輯新文件后,,可以將此文件添加到存儲庫中,,或添加一個目錄,,目錄中有無內(nèi)容均可。 svn add FILENAME/DIR ,。這樣就會在您的工作副本中添加文件/目錄,,并安排它們以添加到存儲庫中。您下次提交時,,會上載這些文件/目錄,,并將它們添加到存儲庫中,。如果您了添加內(nèi)容,但在提交前又改變了主意,,則可以使用 轉(zhuǎn)換:--targets FILENAME, --non-recursive (-N), --quiet (-q), --config-dir arg, --auto-props, --no-auto-props 請參見添加文件/目錄示例,。 查看帶有修訂和作者信息的特定文件的內(nèi)容: 若要在線查看指定文件的作者和修訂信息,請鍵入: svn blame FILENAME 每行文本的開始處都以上次更改該行的作者(用戶名)和修訂版本號作為批注,。 轉(zhuǎn)換:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR 查看特定文件的內(nèi)容: 有時,與存儲庫相比較,,您的工作副本可能已過時,;或者您可能已修改了本地工作副本,。在這些情況下,,在提交更改或決定編輯您的工作副本之前,您會希望查看指定文件的內(nèi)容差異,。運行 轉(zhuǎn)換:--revision (-r) REV, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR 清理工作副本: 有時可能會出現(xiàn)“工作副本已鎖定”錯誤,。若要刪除鎖定,,并遞歸清理工作副本,,請使用 轉(zhuǎn)換:--diff3-cmd CMD, --config-dir DIR 請參見 復(fù)制工作副本或存儲庫中的文件或目錄: 在項目中,,您可能需要用到過去的舊文檔。例如,,您可能想要使用一個已存在的 HTML 文件,使用其代碼作為參考以在創(chuàng)建新內(nèi)容時保持產(chǎn)品外觀和感覺,。創(chuàng)建文件時,您無需從頭開始,,只需使用 轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --revision (-r) REV, --quiet (-q), --username USER, --password PASS, --no-auth-cache, --non-interactive, --force-log, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR 請參見 從本地工作副本中刪除文件或目錄: 您可能希望從本地工作副本中刪除不需要的文件,。使用
查看文件之間的差異: 可以使用 svn diff (文件的路徑) (項目存儲庫的 URL) 例如,若要將本地修改后的文件“index.html”與項目存儲庫中的相應(yīng)文件進行比較,,請鍵入: svn diff $SRC/...../index.html https://(項目名稱).(域)/svn/(項目名稱)/trunk (項目名稱) --username [在此處輸入用戶名] 除此之外,,您也可以轉(zhuǎn)到該文件所屬的目錄,,并鍵入: svn diff (FILENAME) 該命令將顯示差異,,并且?guī)в行抻啺姹咎枴?/p> 在本地計算機上導(dǎo)出空目錄樹: 在您的本地計算機上,,可以從項目存儲庫或本地工作副本內(nèi)部提取一個無版本的副本,,也稱為空目錄樹,。若要從存儲庫中獲得較舊修訂版本的空目錄,請鍵入: svn export [-r REV] [PATH] 該命令將從 URL 指定的存儲庫中的修訂版本 REV 位置(如果指定,,否則從 HEAD 位置)將空目錄樹導(dǎo)出到 PATH,。如省略 PATH,,則該 URL 的最后一部分將用作本地目錄名稱。除此之外,,您也可以在本地計算機內(nèi)部,,從一個工作副本(由 PATH1 指定)向另一工作副本(由 PATH2 指定)導(dǎo)出空目錄樹,。這將保留所有的本地更改,,但不會復(fù)制版本控制中的文件。若要執(zhí)行此操作,,請鍵入: svn export PATH1 PATH2
獲取有關(guān) Subversion 的幫助: Subversion 可以在命令行界面為您提供幫助,。若要獲得有關(guān)特定子命令的幫助,請鍵入: svn help [SUBCOMMAND...]
將您的更改提供給 SVN 存儲庫對文件和/或目錄進行本地更改后,,您必須向 SVN 存儲庫提交這些更改,。 提交您的更改: 若要向共享存儲庫提交您的更改,,請鍵入: svn commit -m "請在此處鍵入您的理由" 如果您不包括對該文件更改的描述,,系統(tǒng)將提示您調(diào)用文件編輯器添加描述,然后 svn 才能完成提交操作,;否則將會出現(xiàn)“提交失敗”錯誤。所有的提交都會被自動記錄,,并發(fā)布到項目的提交討論中,。 轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --non-recursive (-N), --targets FILENAME, --force-log, --username USER, --password PASS, --no-auth-cache, --non-interactive, --encoding ENC, --config-dir DIR 請參見提交您的更改、editor-cmd,。 將無版本的文件或樹導(dǎo)入到項目存儲庫中: 您可以使用 svn import [PATH] URL 示例:若要在您的本地計算機上創(chuàng)建帶有一個文件的無版本目錄 (D),。請點擊項目左側(cè)導(dǎo)航窗格中的“Subversion”鏈接,找到 Subversion 頁面,。請注意,“瀏覽源代碼”下未列出 NEWDIR,。若要將 D 導(dǎo)入項目存儲庫,請鍵入: svn import -m "請在此處鍵入您的信息" D http://(項目名稱).(域)/svn/(項目名稱)/NEWDIR 刷新該頁面,。請注意,此時“瀏覽源代碼”下列出了 D,。點擊 D 查看該文件,。 轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --non-recursive (-N), --username USER, --password PASS, --no-auth-cache, --non-interactive, --force-log, --editor-cmd EDITOR, --encoding ENC, --config-dir DIR, --auto-props, --no-auto-props 打印有關(guān)工作副本中路徑的信息: 有時,,您將需要有關(guān)工作副本中文件的具體信息,以執(zhí)行某些子命令,。鍵入 轉(zhuǎn)換:--targets FILENAME, --recursive (-R), --config-dir DIR 查看存儲庫中的目錄項列表: 在開始處理項目或取出“工作副本”之前,,您可能希望查看項目存儲庫中的內(nèi)容(即目錄和文件),,或查看本地工作副本中的目錄項。在命令提示符處鍵入 轉(zhuǎn)換:--revision (-r) REV, --verbose (-v), --recursive (-R), --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR 查看提交日志信息: 如果要查看“工作副本”或存儲庫中文件/目錄的各個文件/目錄歷史,,以跟蹤修訂信息,請鍵入: svn log [PATH] 該命令會顯示出文件/目錄的修訂信息,,從最近所做的修訂版本開始顯示提交信息和作者姓名等信息。除此之外,,您也可以使用該站點,,查看項目存儲庫中各個文件的提交日志信息。請點擊項目左側(cè)導(dǎo)航窗格中的“Subversion”鏈接。將出現(xiàn) Subversion 頁,。搜索“瀏覽源代碼”的目錄中的文件,,然后點擊文件名,。這時將會顯示一個提交日志信息頁面。 轉(zhuǎn)換:--revision (-r) REV, --quiet (-q), --verbose (-v), --targets FILENAME, --stop-on-copy, --incremental, --xml, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR 請參見 合并更改: 您可以運行 轉(zhuǎn)換:--revision (-r) REV, --non-recursive (-N), --quiet (-q), --force, --dry-run, --diff3-cmd CMD, --ignore-ancestry, --username USER, --password PASS, --no-auth-cache, --non-interactive, --config-dir DIR 請參見 使用存儲庫創(chuàng)建新目錄: 若要在您的工作副本中創(chuàng)建新目錄,,請鍵入: svn mkdir PATH 若要在您的項目存儲庫中創(chuàng)建新目錄,請鍵入: svn mkdir URL PATH 或 URL 的最后一部分決定目錄名稱,。在立即提交時在存儲庫中創(chuàng)建目錄,所以還需要一條提交信息 轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --quiet (-q), --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --force-log, --config-dir DIR 移動文件或目錄: 您可以使用 轉(zhuǎn)換:--message (-m) TEXT, --file (-F) FILE, --revision (-r) REV, --quiet (-q), --force, --username USER, --password PASS, --no-auth-cache, --non-interactive, --editor-cmd EDITOR, --encoding ENC, --force-log, --config-dir DIR 使用屬性 Subversion 具有很多具體屬性,,這些屬性影響或決定其行為,。您可以修改,、提交和撤消屬性更改,就像對文件內(nèi)容所執(zhí)行的操作一樣,。您還可以從本地工作副本或項目存儲庫的文件,、目錄或修訂版本中,刪除,、編輯,、打印,、列出以及設(shè)置屬性。 請參見 屬性,、無版本屬性、元數(shù)據(jù)屬性,、 解決沖突: 更新本地工作副本時,可能會遇到?jīng)_突,。您需要解決此沖突,。解決沖突后,鍵入
請參見解決沖突(合并其他人的更改),。 撤消您的更改: 使用 Subversion 時,,您會發(fā)現(xiàn)
注意,,如不提供目標(biāo),,會導(dǎo)致工作副本中的更改丟失,。
獲取文件/目錄的狀態(tài): 在版本控制中,將更改提交到項目存儲庫之前最好對其進行審查,??梢赃\行
請參見檢查你的更改,。 轉(zhuǎn)換工作副本: 可以使用
請參見轉(zhuǎn)換工作副本,、分支和合并以及 更新工作副本: 為了進行更好的版本控制,建議您每天用項目存儲庫更新本地工作副本,,請使用:
列出的已更新條目以及它們的當(dāng)前狀態(tài)顯示如下:
分支和標(biāo)記 項目的主干通常用作開發(fā)主線,而分支通常用作主線的變更,。分支是正在進行的開發(fā)線,。在軟件開發(fā)生命周期中,如果軟件產(chǎn)品的發(fā)布版本已到期,,經(jīng)常會用到分支,,使測試者可以使用候選版本,,使新的開發(fā)可以繼續(xù)進行,,不受測試的約束,。分支還用于實驗性工作,,以及完成代碼重寫。標(biāo)記是將一組文件修訂版本標(biāo)記為整體的方式,。雖然分支和標(biāo)記都是使用 本站點上您項目的 Subversion 存儲庫支持對您的源文件進行分支和標(biāo)記,。對于 Subversion 來說,,標(biāo)記和分支屬于簡單實用的“復(fù)制”操作。 若要創(chuàng)建分支或標(biāo)記項目文件,,請鍵入:
|
|