我呆過的公司,要麼是git,要麼是svn來做程式碼版本管理工具,不過在我看來SVN用的還是比較多的。

說實在的,git我也不會用,雖然道理差不多。

今天來講一講SVN吧。

抱歉,也沒有去深挖、去追根究底這是怎麼來,又是怎麼發展的,我是個

實用主義

,我只告訴你這個工具一般使用方法。

瞭解就行。

能用就行。

一、SVN是個什麼東西?

其實吧,你可以這麼理解:

在一個專案開發中,不是一個人在提交程式碼或檔案,而是很多人,有前端、後端、策劃、測試,關鍵每個崗位都不是一個人,而是多個人。

怎麼讓這麼多人配合起來?

專案就只有一個專案,如果是一個人,那好,直接在自己本地把程式碼一改。

完美。

那兩個人呢?

還是同樣的專案,你電腦存一份,我電腦也存一份,等我們兩個都修改好了。

再把改動的都同步一下。

雖然有點麻煩,但還是OK的。

那三個人呢?

五個人呢?

十個人呢?

二十個人呢?

一樣的方法,那還不得爆炸。

這樣的專案還不如一個人搞呢。

太麻煩了。

同樣效率也低。

所以就出了類似於中央處理器一樣的程式碼工具,比如svn。

svn的作用是什麼?

就是為了解決多人合作的。

如果你看了我前面寫的主幹與分支的概念,那麼你就可以這麼理解。

svn作為一個伺服器,當然也是一個單獨的電腦。

其實它就是這個專案的主幹。

一個人的話,還是老樣子,自己改就行。

兩個人的話,就可以從svn這臺伺服器的專案程式碼全部複製到自己的電腦本地,就是一個分支。

三個人也是一樣,更多的人,也是這樣。

都是從svn裡把完整的專案copy一份出來,放到自己的本地電腦,可以想象為一個分支。

分散是分散了,還不是跟之前一樣嘛,不就是多了一臺SVN的伺服器?還多用了一臺電腦呢。

多人合作的關鍵就在於合併。

說到合併,就需要說到提交:你在你自己本地改了的內容只對你生效,其他人不會生效。

為了生效。

如果你這麼一個人一個人去傳遞你的改動,那就太麻煩了。

有了SVN,你只需要把修改的程式碼傳到svn,對於那些需要你改動程式碼部分的人而言,就直接從svn拉取就ok了。

所以流程就沒必要從你直接單獨傳給ABCD,或者你傳給A,再由他們互相傳,直至所有都更新到。

突然 有點像小時候傳作弊答案一樣。。。

svn它像一個完整的中間商,但是它不賺差價。

不僅不賺差價,而且衝突了還不會給你上傳。

那什麼是衝突呢?

比如svn有一份檔案1,第一行是四個字:

提交衝突

同事A把這份檔案複製到他的電腦,並且在第一行的位置加了兩個字,變成:提交衝突了嗎。

同事B也把這份檔案複製到他的電腦,然後在第一行的位置減了兩個字,變成:提交。

如果是同事A先把這份檔案提交到了SVN,那麼這份檔案1的第一行就變成了:提交衝突了嗎。

這時同事B也提交,SVN一看:你這怎麼提交的還是老版本?

不行,不給你提交,直接給你個報錯:conflict(衝突)。

那同事B也想提交怎麼辦?

那他首先需要把這份檔案更新到最新版本,也就是說,把第一行的“提交衝突”,先更新成“提交衝突了嗎?”

更新完之後,再刪掉“衝突了嗎。”,只剩下“提交。”

這時再上傳,svn就沒道理拒絕了。

現在svn就從最初的“提交衝突”,變成“提交衝突了嗎。”,再到現在的“提交。”

完成了整個版本的更新管理。。

說白了,它就是一個提交和拉程式碼的工具。

應該明白了吧。

不明白就再看一遍。

再看一遍還不明白,

那就算了。

接著往下看吧。

讓我想想,對於我們測試而言,能拿svn做 什麼。。。

算了,我直接擼一遍完整的流程吧。

假設你現在入職了一家新公司,這是你上班的第一天。

你的leader讓你先down一份自己專案的程式碼,於是給了你一份svn的安裝包,和一個svn地址的url。

然後就讓你自由活動了。

你傻瓜式的下一步下一步把svn安裝成功了。

然後你問leader:接下來怎麼辦?

leader:你先在e盤新建一個資料夾

你不會傻傻地在C盤建立一個吧?

於是你在e盤建立了一個資料夾:新專案

leader:你最好改一下名字,不要用中文,不然會出現一堆亂七八糟的問題,我建議你把資料夾名字改成英文縮寫+時間的形式。比如NEW0908。

你聽著有道理,於是把資料夾改成了NEW0909,改完後接著問leader然後怎麼做?

leader:你先把

專案程式碼

都拉到本地。

入行遊戲測試小知識之版本管理工具SVN

你先點選滑鼠右鍵,看到上面的checkout了嗎?點這個。(checkout,檢出)

入行遊戲測試小知識之版本管理工具SVN

然後你再把我剛剛給你的

url地址

貼上上去,再點OK。

你按著leader的指示,複製完url,然後點選OK,你看到一堆的update刷得你眼花繚亂。

入行遊戲測試小知識之版本管理工具SVN

你邊玩手機,邊看著下載進度,一小時後,你終於點選了被從灰色到高亮的ok按鈕。

然後你繼續問leader接下來怎麼辦。

leader:你先把專案用unity開啟。

然後就到了第二天。

你發現了人生第一個bug,很開心。

開發大佬跟你發了訊息說,這個bug已經修復了。

你讚歎於開發大佬解bug的速度是如此之快,然後開啟unity再去看下,結果bug還在。

你心情有點複雜:開發大佬都說解決了,為什麼我這裡看這個bug還存在呢?

想不通就問leader。

leader:你程式碼是不是沒更新?你更新完再看。

入行遊戲測試小知識之版本管理工具SVN

你默默地點了一下update,又發現一堆的程式碼在載入。

恍然大悟:哦,原來需要先更新啊。

你更新完再開啟unity,結果發現這個bug還在,你再次詢問leader。

leader拿起你的滑鼠,點選showlog,檢視一下專案提交日誌。

入行遊戲測試小知識之版本管理工具SVN

入行遊戲測試小知識之版本管理工具SVN

leader:看上傳記錄,都沒提交。

你只能硬著頭皮問開發大佬:大佬,這個是不是沒提交啊?

開發大佬過了一會兒給你回了一條資訊:抱歉,剛剛漏傳了。

你發了個可愛的表情。

然後繼續update,再開啟unity,結果發現這個bug還在。

你再次問開發大佬:我剛更新了,bug還沒解決。

開發大佬秒回了你的資訊:不可能啊,我本地是正常的啊,是不是程式碼衝突了?

你只能再求助leader:剛剛開發已經提交程式碼了,但是我更新完還是老樣子。

leader:程式碼衝突?那你還原一下。

入行遊戲測試小知識之版本管理工具SVN

你點選了revert(還原),接著是一段程式碼載入,再次開啟unity,結果發現bug還在。

你撓了撓頭,一臉懵逼地再次 問leader。

leader:還原不行,那你再清理一下。

於是你點選了cleanup(清理),照樣一頓程式碼載入閃爍。

入行遊戲測試小知識之版本管理工具SVN

你再次開啟unity,結果發現bug還在。

leader:那肯定是bug沒改好。

開發大佬再次給你回了個資訊:剛剛打錯了一個字元,你更新再測一下。

你再次點選update,看unity終於bug解決了。

你開心地像個300斤的胖子。

第二天就這麼愉快地結束了。

第三天你照常更新之後,發現昨天這個bug明明已經解決了,怎麼現在又出現了。

你問出了你的疑惑。

leader:你回退一下版本看看。

入行遊戲測試小知識之版本管理工具SVN

你點選showlog,翻到昨天的版本,點選了revert to this revision(回退到這個版本)

又是一陣眼花繚亂的載入,你開啟unity,發現bug是解決了的狀態。

你向開發反饋了這個情況。

開發大佬過了一會兒給你回信息了:xxx把我的程式碼給覆蓋了,你再更新看一下。

你嘗試更新之後,bug是解決了。

就這麼開心地度過了第三天。

第四天的時候,leader讓你寫一份專案體驗報告提交到svn測試專案。

入行遊戲測試小知識之版本管理工具SVN

於是你用了一天的時間,終於在下班前選擇了commit(提交)。。。