假設我們是在一個團隊的環境下工作,對于同一個項目,可能不同人會負責不同的部分。那么如何保持自己的本地副本時刻和版本庫同步呢?最好的方法是經常檢查更新并進行同步。
假設現在團隊里的其他人向ECoupon版本庫新增了一個名為ignore.txt的文件,那么我們如何知道這個變化呢?還記得我們前面《SVN In Action (3)》的第7節---查看項目的實時信息中提到的svn status命令嗎?根據SVN文檔只要配合--show-updates參數就可以顯示本地工作副本尚未更新的變化




show-updates參數會令客戶端顯示本地工作副本那些文件是out-of-date的。它并不會立即更新本地副本,而是告訴你那些文件會在下次的svn update中被更新
這是本地執行后的結果。我們會看到輸出的結果有"*"。那么這個*代表什么含義呢?
* --- 服務器上出現了一個新的受版本控制的文件
'' --- 本地工作副本的文件已經out-of-date
很明顯從命令輸出結果來看,在版本庫上存在一個新的受版本控制的文件:ignore.txt。位于doc目錄下,所以現在我們需要立即同步改變






【13】同時更新本地副本和提交本地變更
很多時候程序員總是習慣在每天工作結束之前,一次性地提交自己當天所做的改動。在此之前,如果其他人也對項目進行了修改,那么在提交時必然會遇到以下兩個問題:
A.先提交還是先更新
B.如果沒有提交而更新,他人所做的修改會不會覆蓋我本地尚未提交的內容
下面我們來做一個實驗,假設現在在本地工作副本,我們新增了一個文件:read-from-local.txt,與此同時其他人向版本庫添加了一個新的read-from-repo.txt文件。下面是執行svn status命令的結果





命令結果表示有一個新的來自版本庫的文件:read-from-repo.txt文件和一個本地新增的read-from-local.txt文件。
下面我們來試一下如果不更新直接提交會如何?













可以看到操作成功了,有一點需要留意的是即便我們先提交,版本號變為15,但是執行svn status --show-updaets命令時依然會告訴我們有些東西還沒有同步。特別是版本號13提醒我們現在本地的版本號依然是13而不是15---因為我們還沒有執行update操作,而commit操作是不會主動幫我們update版本的。15是版本庫的最新版本號。只有再次執行update操作更新后,才會真正實現本地和版本庫的同步
那么如果是先更新再提交呢?















結果依然是同樣的。我們可以看到先update再commit時版本號變更了兩次,這是因為第一次本地版本比版本庫的版本低,第二次是因為本地提交了新的版本
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。