今天閑聊的時候辞槐,有位程序媛姐姐吐槽了一下小烏龜(TortoiseSVN):感覺小烏龜不好用咏删,我還是習(xí)慣用IDE里的svn工具悄蕾,但是IDE里的svn工具有的時候提交會有問題嵌灰,唉...
我:不會啊弄匕,我覺得小烏龜挺好用的,你還是別用IDE里的svn了沽瞭,誰知道IDE有沒有對svn做什么私人訂制(純意淫)~
程序媛姐姐:可是我一直搞不太清楚小烏龜?shù)臎_突應(yīng)該怎么解決
我秒回:我知道迁匠,有空跟你科普一下唄?
程序媛姐姐:好啊驹溃,晚上加班的時候吧城丧。
想象一下程序媛姐姐的內(nèi)心活動:翻了一個360度的白眼,切豌鹤,姐只是隨便找個理由來表示一下自己不喜歡小烏龜而已~看把你能的
拿到了一次裝逼的機會亡哄,當然要好好對待。到晚上還有時間布疙,不如搭建個svn服務(wù)器蚊惯,上傳份代碼,實況演示一下灵临。說干就干截型。
這里使用VisualSVN Server來搭建svn服務(wù)器∪甯龋可以到這里根據(jù)需要進行下載宦焦。怎么安裝就跳過了,這里主要看一下怎么創(chuàng)建倉庫。
安裝好VisualSVN Server以后赶诊,運行起來頁面是這樣的:
在創(chuàng)建代碼倉庫之前笼平,需要先創(chuàng)建個用戶园骆,右鍵點擊Users->Create User...舔痪,在彈出的頁面里創(chuàng)建用戶,用戶名根據(jù)你自己的需要來锌唾,我這里寫的wht:
然后點擊OK锄码,這個用戶就創(chuàng)建好了。你可以通過創(chuàng)建Groups來給用戶分組晌涕,對每個組的成員進行權(quán)限限制滋捶。
創(chuàng)建好了用戶,就可以創(chuàng)建代碼倉庫了余黎,右鍵點擊Repositories->Create New Repository...重窟,彈出頁面選擇倉庫類型:
兩種偏好:一種普通的基于標準FSFS數(shù)據(jù)存儲的倉庫,一種基于VDFS的分布式的倉庫惧财。具體細節(jié)可以點擊彈框的左下角鏈接查看巡扇。我這里選擇的第一種,點擊下一步垮衷,給倉庫起個名字:
依然下一步厅翔,這里選擇倉庫初始的目錄結(jié)構(gòu),根據(jù)需要進行選擇搀突,我這里選的空倉庫刀闷,也是VisualSVN Server推薦的。我們可以通過新建文件夾來自定義倉庫目錄結(jié)構(gòu)仰迁,比較靈活:
接下來是倉庫訪問權(quán)限甸昏,同樣根據(jù)需要進行選擇,我這里選擇自定義徐许,然后點擊custom...按鈕筒扒,選擇我們創(chuàng)建的用戶wht,給他讀/寫權(quán)限:
然后點擊Create绊寻,代碼倉庫創(chuàng)建成功花墩,你會看到如下界面:
至此,我們的代碼倉庫就創(chuàng)建完成了澄步,Repository URL就是代碼倉庫的地址冰蘑,將來用svn客戶端(小烏龜)checkout代碼的時候會用到。
目前TestRepo倉庫是空的村缸,你可以通過右鍵點擊倉庫名祠肥,選擇新建Folder來給倉庫創(chuàng)建目錄結(jié)構(gòu),我這里為TestRepo創(chuàng)建了trunk(放代碼的地方)梯皿,tags(打標簽)仇箱,branches(代碼分支)三個目錄县恕。接下來就可以導(dǎo)入工程到svn服務(wù)器了,這步操作需要在svn的客戶端(小烏龜)上來進行剂桥。
找到工程目錄忠烛,右鍵點擊文件夾>TortoisSVN>Import...,彈出頁面:
倉庫地址欄填入剛創(chuàng)建的代碼倉庫的url(可以右鍵點擊倉庫名权逗,點擊Copy url to Clipboard獲让朗),點擊OK完成導(dǎo)入斟薇。導(dǎo)入完成后你就可以在代碼倉庫的trunk目錄下看到你導(dǎo)入的工程了师坎。
這里提一下,每次使用svn客戶端上傳代碼的時候最好都填寫一下備注信息堪滨,這樣有利于版本維護胯陋,這個地方是可以通過客戶端進行必填設(shè)置的。
現(xiàn)在svn服務(wù)器搭建完成了袱箱,坐等程序媛姐姐的召喚遏乔。
...
終于等來這一神圣的裝逼時刻。我們來看看代碼沖突怎么發(fā)生以及怎么解決的犯眠。
1. 來到程序媛姐姐的座位上按灶,用她的小烏龜客戶端checkout一份工程代碼到本地,打開工程筐咧,找個文件鸯旁,修改一行代碼,保存量蕊,注意铺罢,不提交。
2. 回到我電腦上残炮,找到同樣的文件韭赘,定位到同一行代碼,做出修改势就,保存泉瞻,這里提交到svn服務(wù)器。
3. 再次來到程序媛姐姐的電腦上苞冯,用小烏龜從svn服務(wù)器上更新一下代碼到本地袖牙,發(fā)現(xiàn)小烏龜在抱怨代碼沖突了(conflicted)。
看到?jīng)]舅锄,小烏龜抱怨說main.js沖突鞭达!因為程序媛姐姐和我對同一個文件的同一個位置進行了修改,小烏龜不知道到底應(yīng)該用誰的版本,所以報出沖突的警告畴蹭。
看下工程目錄坦仍,是這個鬼樣子:
別慌,這幾個文件分別是原始文件(main.js)叨襟,程序媛姐姐本地修改后的版本(.mine)繁扎,另外兩個一個是程序媛姐姐本地修改前的版本,一個是svn服務(wù)器上目前的版本芹啥,也就是我修改后的版本锻离。直接打開main.js看得更清楚:
代碼里面已經(jīng)標出來哪個是目前本地的修改铺峭,哪個是svn服務(wù)器上的版本(我用的是VSCode墓怀,在一些其他編輯器或IDE環(huán)境上會同時列出mine,r5卫键,r6三個版本的代碼)傀履。這時候只需要根據(jù)具體情況來判斷到底應(yīng)該使用哪個版本。如果你需要繼續(xù)使用你自己的版本莉炉,就刪掉======和>>>>>>.r6之間的代碼钓账;如果你想更新成svn服務(wù)器上的代碼,就刪掉<<<<<<.mine和=======之間的代碼絮宁。這里梆暮,我們保留程序媛姐姐自己的修改,所以刪掉了我的修改(也就是svn上的版本)绍昂。插一句啦粹,在真實場景中,如果你和同事的代碼沖突了窘游,不要隨意做決定唠椭,一定要和當事人溝通好,到底用你修改的版本還是他修改的版本忍饰,再做操作贪嫂。
到這里還差一步,就是告訴小烏龜艾蓝,我已經(jīng)解決掉沖突了力崇。右鍵點擊沖突的文件>TortoiseSVN>Resolved...,這樣那三個文件就消失了赢织。至此亮靴,代碼沖突解決完畢。
還有一種情況敌厘,沖突的代碼是你由于某種原因(比如不小心碰到了鍵盤台猴,臨時作了修改)修改的,是鐵定不會上傳到svn上的,那就不用像上面那樣操作了饱狂,直接連同原始文件一起刪掉曹步,然后重新update一下就ok了。
一頓操作下來休讳,程序媛姐姐捧場的說:啊讲婚,是這樣啊。內(nèi)心活動估計又是一個驚天大白眼:就跟誰不知道似的~
反正我臉皮厚俊柔,我就當你不知道筹麸,哈!
希望對你有幫助雏婶。