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




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






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





命令結(jié)果表示有一個(gè)新的來(lái)自版本庫(kù)的文件:read-from-repo.txt文件和一個(gè)本地新增的read-from-local.txt文件。
下面我們來(lái)試一下如果不更新直接提交會(huì)如何?













可以看到操作成功了,有一點(diǎn)需要留意的是即便我們先提交,版本號(hào)變?yōu)?5,但是執(zhí)行svn status --show-updaets命令時(shí)依然會(huì)告訴我們有些東西還沒(méi)有同步。特別是版本號(hào)13提醒我們現(xiàn)在本地的版本號(hào)依然是13而不是15---因?yàn)槲覀冞€沒(méi)有執(zhí)行update操作,而commit操作是不會(huì)主動(dòng)幫我們update版本的。15是版本庫(kù)的最新版本號(hào)。只有再次執(zhí)行update操作更新后,才會(huì)真正實(shí)現(xiàn)本地和版本庫(kù)的同步
那么如果是先更新再提交呢?















結(jié)果依然是同樣的。我們可以看到先update再commit時(shí)版本號(hào)變更了兩次,這是因?yàn)榈谝淮伪镜匕姹颈劝姹編?kù)的版本低,第二次是因?yàn)楸镜靥峤涣诵碌陌姹?br />
-------------------------------------------------------------
生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。