svn update 的坑


svn update 沒(méi)有效果 ; svn update 無(wú)法覆蓋本地文件

一般情況下公司里的所有人都會(huì)叫你在別人修改完成時(shí),使用update來(lái)將版本庫(kù)的代碼同步進(jìn)來(lái)。這沒(méi)有錯(cuò)。但是用過(guò)github的人都不是很理解這個(gè)命令,因?yàn)樵趃it中有commit + pushcheckout + pull來(lái)分別提交和下拉版本庫(kù),而自己的文檔一般都是在分支下完成。
!此時(shí)如果初學(xué)者,例如我,單純地把update理解為checkout的話(實(shí)際上用法很類(lèi)似?。。?,你將付出一定的代價(jià)。解釋在下文,伸手黨直接跳轉(zhuǎn) 結(jié)論。
假設(shè)在電腦1提交一個(gè)文件如下:

test
abc

svn commit -m 'first commit'
#假設(shè)此時(shí)版本為 1

當(dāng)你在另外一臺(tái)電腦2上,co 進(jìn)來(lái)時(shí)文件內(nèi)容應(yīng)當(dāng)是一樣的
此時(shí)電腦1上做修改:

test
abc
computer1 add

并且同時(shí)在電腦2上做修改:

test
computer2 add
abc

ok, 萬(wàn)事妥當(dāng),當(dāng)電腦1提交commit -m 'second commit #假設(shè)此時(shí)版本為 2'
此時(shí),電腦2上 進(jìn)行update會(huì)出現(xiàn)一個(gè) G 表示版本庫(kù)文件與本地文件有沖突,但是svn已經(jīng)幫你解決
電腦2的文件是這個(gè)樣子的:

test
computer2 add
abc
computer1 add

也就是說(shuō),update并不會(huì)覆蓋你本地的工作目錄,此時(shí)電腦上的結(jié)果是svn 還有 diff 但是版本已經(jīng)成為 2 ,這就是很多人update了但沒(méi)有效果的實(shí)際例子。
那么經(jīng)過(guò)查看文檔和多方驗(yàn)證得出以下結(jié)論。

<a id="jump" name="jump">結(jié)論</a>
svn update 是這樣計(jì)算的

  1. 當(dāng)你的文件處于最新版本,且文件內(nèi)的修改 新于 版本時(shí)間,那么update 將無(wú)效(沒(méi)有任何效果)
  2. 當(dāng)你的文件處于非最新版本,且有修改內(nèi)容 與 版本庫(kù)不沖突(或者svn可以解決的沖突)update能夠正常使用,而且保留你的修改內(nèi)容,并使得版本庫(kù)的修改也更新進(jìn)來(lái)?;氐?1 狀態(tài)
  3. 當(dāng)你的文件處于非最新版本,且沖突無(wú)法解決,svn 返回 C 也就是沖突狀態(tài),那么你就默默解決沖突吧

可見(jiàn)事實(shí)上,svn update 的其實(shí)是為了保護(hù)你本地修改而做的先一步merge,這個(gè)是用git的同學(xué)無(wú)法簡(jiǎn)單理解的(就像我一樣),因?yàn)槠鋵?shí)svn事實(shí)上沒(méi)有分支的概念,分支也只是另開(kāi)一個(gè)文件夾,可以理解為輔主分支,所有人都是在輔主分支上干活,所以每次update的是別人的代碼,自己的工作區(qū)一定不能被覆蓋或者拋棄。
但git 的思路其實(shí)是不一樣的,每個(gè)人都有自己的分支(真分支)做完以后merge到主干(無(wú)論是輔主干還是真主干)所以每次我們需要做的僅僅是把自己的分支內(nèi)容 checkout 到自己的工作區(qū),沒(méi)有svn 那種問(wèn)題。并且我會(huì)在本地做一些log 或者簡(jiǎn)單的測(cè)試代碼,用完即刪的那種,測(cè)完了,就可以checkout,so happy。保證自己的工作區(qū)或者版本庫(kù)是干凈的。但是svn 用久了就會(huì)發(fā)現(xiàn)本地工作區(qū)很亂,有時(shí)候commit的時(shí)候都會(huì)把一些奇怪的測(cè)試代碼(提交前你沒(méi)仔細(xì)diff的話)一并交上去。要扯到 ignore 和 ci 方式上去了,打住。

結(jié)束語(yǔ)

那么如果真的你需要覆蓋本地文件的話怎么辦呢?一種是刪除再 update,另一種是revert命令??梢詫⒈镜匚募桶姹編?kù)文件真正同步成一模一樣。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書(shū)系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • 命令的使用 1、檢出 svn cohttp://路徑(目錄或文件的全路徑)[本地目錄全路徑] --username...
    小李龍彪閱讀 4,529評(píng)論 0 9
  • iOS 開(kāi)發(fā) SVN 版本控制器 更多技術(shù)交流請(qǐng)加群 iOS技術(shù)聯(lián)盟 27512466 SVN是Subversio...
    Sunny_Fight閱讀 8,983評(píng)論 7 63
  • SVN SVN使用 基本操作svn checkout:把項(xiàng)目源碼下載到本地,只需要做一次svn update:將本...
    彼岸的黑色曼陀羅閱讀 1,748評(píng)論 0 4
  • &開(kāi)發(fā)過(guò)程中離不開(kāi)源代碼的管理, 目地:為了解決在軟件開(kāi)發(fā)過(guò)程中,由源代碼引發(fā)的各種蛋疼、繁瑣的問(wèn)題。 目前開(kāi)發(fā)使...
    早起的蟲(chóng)兒子被鳥(niǎo)吃閱讀 2,616評(píng)論 0 16
  • 曾以為, 早已忘卻, 那似水的年華, 以及彩虹般的夢(mèng), 如晶瑩的雪般, 隨著春風(fēng), 消散的無(wú)影無(wú)蹤。 不曾想, 你...
    十八貝勒閱讀 191評(píng)論 1 1

友情鏈接更多精彩內(nèi)容