SVN--小白教程

主流的版本控制系統,現在來說,就是Git和SVN了,而且Git似乎更加流行,當然也有很多公司使用SVN,我目前經歷的幾家公司都是在使用SVN,所以本篇文章就來詳細的介紹那些你需要會的,在工作中經常用到的SVN技巧與使用!

首先看看啥是SVN

以下是百度百科的解釋:

SVN是subversion的縮寫,是一個開放源代碼的版本控制系統,通過採用分支管理系統的高效管理,簡而言之就是用於多個人共同開發同一個項目,實現共享資源,實現最終集中式的管理。

如果你還是有點不瞭解,建議多去百度搜搜,比如你可以這樣搜索:“什麼是SVN”,建議多看看百度百科和維基百科之類的,上面說的還是比較詳細的!

要用它就得安裝它

先來說Windows上的安裝,簡單來說說,我們要使用SVN的話就需要安裝一個客戶端,好比你要聽音樂的話就需要安裝一個音樂軟件在電腦上,當然,你可以選擇安裝qq音樂或者是網易雲音樂!

那麼SVN的話也是有版本可以選擇的,在Windows上的話就是小烏龜,這是這個客戶端的別名,人家叫做“TortoiseSVN”,因爲Tortoise是烏龜的意思,所以就叫做小烏龜了,你看看它的圖標:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

可以吧,是不是很可耐,我們要下載它:
https://tortoisesvn.net/downloads.html

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

根據自己的電腦情況,選擇安裝即可!

這裏有些需要注意的地方:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

選擇這個就行,另外在上面選擇安裝下載哪個版本之後,在跳出來的頁面記的選擇左下角的accept,然後等待下載,如果長時間沒有下載可以手動點擊頁面上面第一行的鏈接,仔細看,那段英文還是可以看懂的,我這裏就不貼圖了。

如果你需要使用命令行的話,這裏可以選擇上:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後一路next即可!然後安裝之後,你在電腦上隨便找一個文件夾右鍵出現這個就代表安裝成功:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後你也可以再操作:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這也代表是ok的!另外說一點啊,這個安裝之後都是英文的,其實可以安裝中文簡體語言,但是嘞,我覺得還是用英文吧,真的,能用英文不要使用中文,咱可是高大上的程序員啊!

安裝之後,搞起,看看怎麼使用

上面都是準備工作,現在搞好了,怎麼使用嘞,咱們一起來看看!

svn是個中心化的東西

啥意義嘞,就是說svn是有一個服務中心的,總的代碼就在這個服務中心上,然後其他各個電腦上的客戶端可以鏈接到這個中心,從而可以從中心拿取代碼以及提交代碼,畫個圖大概就是這樣的:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

所以啊,一般如果你們是使用svn協同開發的話,你們就會有中心服務代碼,這個是你不需要管的,你只需要在你的電腦上安裝好svn客戶端就行了,上述已經告訴你如何安裝了。

可能有些人比較好奇,這個服務中心是啥在哪啊,這個一般就是svn服務器,也是需要搭建的,可以本地搭建,也可以遠程搭建,公司一般就是遠程大家,大家一起食使用了,這個大家感興趣,我到時候可以另外寫一篇教大家如何搭建svn服務器!

開始拉取代碼吧(第一個重點)

一切準備就緒,你的本地上也安裝了svn客戶端,這個時候啊,就會有個人給你svn服務器的一個項目地址,比如以我本地搭建的svn服務器地址爲例,給你看看,是這個樣子的:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

比如說,這裏要讓你參與simplejava項目的開發,這個時候就會給你一個地址:

https://LAPTOP-GO8995UD:8443/svn/SVNdemo-ithuangqing/simplejava

然後還會給你分配一個用戶名和密碼:

username: user1 password: user1

拿到這些之後,你就可以拉取代碼了,首先你先想想你要把拉取下來的代碼放在哪裏,比如桌面上,可以新建一個文件夾比如叫做“project”

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後打開這個文件夾,接着右鍵出現這個,點擊這個:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

點擊之後就會彈出這個窗口:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這裏意思就是你要連接svn服務中心了,但是也不能隨便連啊,需要用戶名和密碼,這個是給過你的,我們填寫上去,注意這裏的左下角,是否記住密碼:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這樣就拉取成功了,但是你看看拉取下來的代碼,我們服務中心上這個項目叫做simplejava,其實我也想拉取下來就是這個simplejava,這樣拉取下來的都是項目中的文件,怎麼辦?

其實可以這樣做:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

我們點擊這個Choose items,可以看到我們要來取得這個項目的內容,這個時候我們可以把這個項目名稱去掉,也就是專這樣:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這樣就可以看到更廣的一面,然後選擇我們要拉取得那個項目,然後ok,拉去下來就是這樣得了

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

權限問題

但是這樣真的可以嗎?答案是有的時候還真不可以,比如我們再試一次:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

好,這個沒問題,我們再試着看看上一級:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

吆喝,不行了,這是咋回事,其實也好理解啊,人家總體的代碼也不能說你想看就想看啊,讓你做啥就做啥得了,不是你做的項目你看的全力都沒有,所以啊這裏是有權限的,你看看服務中心這些:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這裏每一個文件夾其實都是可以分配權限的,也就是說,讓你參與進來開發,會給你創建一個屬於你的賬戶,但是你的賬戶是有讀寫權限的,有些你可以看,而有些你是看不了的。

所以,有的時候拿到賬戶和地址之後,發現出現問題,拿去不到代碼,那就問問是不是權限沒給你開,有的時候還真的是權限沒開,我就碰到過。

至於如何設置權限啥的,這是svn服務器這塊的知識,咱這裏先不涉及,等咱聊到svn服務器搭建的時候再說吧!

那你可能要問了,我看不到那咋辦啊,簡單啊,自己在本地先創建項目文件夾,比如要拉取simplejava,就先創建一個唄,然後再拉取,一樣的:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

好啦,寫寫代碼,咱也提交吧

那以上準備工作搞定之後,你就該寫代碼啦,來來,打開咱拉取的代碼:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

我們看到裏面就一個Java類,來來,咱給他修改修改:

public class Test1 {
    public static void main(String[] args) {
        System.out.println("歡迎學習svn!");
        System.out.println("大家好,我是用戶user1");
    }
}

可以吧,ok,現在咱也寫代碼上去了,接下來看看變化:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

看看,這裏出現紅感嘆號,難道是錯誤?其實不是的,這裏代表代碼有改變了,畢竟你新增加了代碼嘛,接下來就把自己新增加的代碼提交上去吧,可以這樣操作:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

右鍵需要提交的文件,然後點擊commit,彈出如下框框

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後就ok了,看一下,是不是又變回綠色了。

增加一個新東西

可以吧,第一次提交,很有成就感,接下來看看,假如說我們新增加了一個Java類嘞,來來,寫一個:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這裏我們創建了一個新的User類,其實吧,被svn管理起來之後,就會在文件上面顯示相對應的表示,比如正常的java文件上面顯示一個綠色的勾號,但是吧,有的時候這玩意會出現問題,比如這新增加的一個文件應該在上面顯示一個藍色的問號,大致的標識是這樣(對於Java文件來說)

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

要記住了,新增加的一個文件屬於未知文件,我們需要把它添加進我們的版本庫:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

添加進來之後就被識別了

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

是一個藍色的+號,接着我們就可以把它提交了

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

提交步驟和上面的類似

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

我想刪除一個文件,怎麼搞

有的時候可能需要刪掉一個文件,就比如把剛纔創建的User給刪除了,我們可以這樣做:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這個時候你刪除之後,突然後悔了怎麼搞?你使勁的按鍵盤上的Ctrl+Z,好像沒什麼卵用,你需要這樣操作:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

記住,是點擊空白處,不過你如果真的想刪除的話,當你上述操作刪除之後,其實在服務中心上的文件還是沒有刪除,你還需要進行提交,點擊空白處,選擇提交:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這個時候就成功刪除啦!

我怎麼提交不上去啊(更新代碼)

我們使用svn是進行協同開發,也就是說這些代碼並不是只有你自己在寫,其他人也在寫,比如別人對Test1進行了修改,比如這樣:

public class Test1 {
    public static void main(String[] args) {
        System.out.println("歡迎學習svn!");
        System.out.println("大家好,我是用戶user1");
        System.out.println("大叫好,我是用戶ithuangqing");
    }
}

你看,這是另外一個人添加的新代碼,這時候你再看看你的代碼,你的還是這樣的:

public class Test1 {
    public static void main(String[] args) {
        System.out.println("歡迎學習svn!");
        System.out.println("大家好,我是用戶user1");
    }
}

比如,你開始修改這個代碼:

public class Test1 {
    public static void main(String[] args) {
        System.out.println("歡迎學習svn!");
        System.out.println("大家好,我是用戶user1,好好學習天天向上!");
    }
}

然後你也開始提交,但是你看

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

我去,報錯了報錯了,腫麼辦?來,先翻譯一句英文:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

知道咋回事不,就是服務器上的代碼改變了,你這裏不是最新的,你需要更新一下,那就更新一下:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後再看看更新下來的代碼:

public class Test1 {
    public static void main(String[] args) {
        System.out.println("歡迎學習svn!");
        System.out.println("大家好,我是用戶user1,好好學習天天向上!");
        System.out.println("大叫好,我是用戶ithuangqing");
    }
}

看,是不是有用戶ithuangqing添加的代碼了,然後提交吧,這下就保證成功了的!

我去,衝突是咋回事

協同開發肯定會遇到的一個問題就是衝突了,一般的話就是你和別人修改了同樣位置上的代碼,來看個例子:

首先別人修改了這行代碼:

public class Test1 {
    public static void main(String[] args) {
        System.out.println("歡迎學習svn!");
        System.out.println("大家好,我是用戶user1,好好學習天天向上!-- 別學了,學不會的,哈哈");
        System.out.println("大叫好,我是用戶ithuangqing");
    }
}

然後你也修改了這行代碼:

public class Test1 {
    public static void main(String[] args) {
        System.out.println("歡迎學習svn!");
        System.out.println("大家好,我是用戶user1,好好學習天天向上!真難啊");
        System.out.println("大叫好,我是用戶ithuangqing");
    }
}

這裏你需要捋一下,就是上面人家已經修改了這段代碼,並且提交上去了,你這裏沒有先更新,而是直接修改了代碼,然後你開始提交,發現這個錯誤:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這個問題之前說過了,那就去更新唄,結果:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這就出現衝突了,其實也好理解,你倆都去修改這段代碼,人家的已經提交上去,你去更新,相當於把服務器上的這行代碼拉去下來,然後發現你也修改了,那完犢子了,誰修改的是對的呢?應該留下哪個呢?

這時候就需要解決衝突了,這個時候你再看文件:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這都是啥玩意?這是因爲出現衝突了,需要你解決衝突,怎麼解決嘞?我們打開源文件看看:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

這個時候就需要你處理,該留下哪段代碼,這個是需要和別人商量的,看看是哪裏出問題了,一起看下最終決定六留下哪段代碼,比如最終你自己的修改是對的,那就把這些刪除掉:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後就成這樣了:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後你再看這些文件:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

不是已經解決了衝突了嗎?是的,你是解決了衝突,但是你沒有告訴svn啊,你得給svn說聲衝突解決了,這樣操作:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後這個:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

點就ok就徹底解決衝突啦:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

衝突解決了之後,你就可以正常提交你的修改啦!(之前提交不成功,需要更新,更新遇到了衝突,解決衝突之後,再次提交就沒問題啦)

查看日誌

日誌這個玩意,在以後的開發中務必引起重視,在這個svn裏面,我們也是可以查看日誌的,比如我們查看這個類的日誌:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

在這裏可以看到自己和他人對這個文件的一些修改。

版本回滾需要重視

這個功能也是使用比較多的,但是剛開始的話會覺得有點摸不着頭腦,比如我們在寫代碼的時候,後來發現自己寫的代碼有問題,結果已經提交上去了,別人拉取咱的代碼,那肯定出問題啊,怎麼搞,這個時候咱們就可以使用版本回滾,來看看具體怎麼操作。

比如現在我們需要寫個功能,這樣寫的:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後我們也提交上去了,咋整,後悔了,能不能時光倒流,人家更新代碼的話,會更新到我的錯誤代碼,你看看人家原來是這樣的:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後人家更新了下,就是這樣的:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

啪啪打臉啊,不行,我得把自己的錯誤代碼幹掉,怎麼搞嘞,那就是版本回滾,看着:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後選擇需要回滾的版本:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

然後你再看,其實之前的錯誤代碼已經沒有了。

注意注意注意!

當你寫了錯誤的代碼提交上去之後,別人更新會更新到你的代碼,但是這個時候可能只有你知道這段代碼有問題,而你想重新寫,那就像上面那樣,你進行版本回滾,之前的錯誤代碼都沒了,你可以重新寫,但是,別人現在更新還是會得到你之前的錯誤代碼。

所以這個時候你需要commit一下,把svn服務器上的提交的錯誤代碼也恢復到原來的版本,記住回滾之後需要提交一下!

如果你回滾之後沒有commit,而是繼續寫正確的代碼,就會是另外一種情況(不commit的話是沒有真正回滾的,本地回滾,但是遠程服務器沒有),這個時候當你把正確的代碼寫完之後,提交上去的話,會提示你更新,你一旦更新,就會產生衝突,和你之前的錯誤代碼衝突了,這個時候你需要解決衝突,留下正確的代碼,然後跟提交上去,這個時候別人再次更新就會得到你正確的代碼了。

有沒有更好的方式

以上那種回滾導致的錯誤是使用這種回滾方式:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

實測中會出現回滾之後沒有commit就寫了新的代碼,緊接着提交的時候會提示更新,更新會出現衝突,但是如果使用這種方式回滾:

新公司還是使用SVN,一怒之下寫了這篇保姆級小白教程

 

即時回滾之後沒有commit就寫了新的正確的代碼,再次commit提交依然可以完成,不會像上面那樣,提示你更新,然後更新會出現衝突!

至於爲什麼會出現這樣的情況,我們有深入的研究,後期如有需要會繼續分享!

總結

關於svn的使用,對於一個剛入職初次使用svn的朋友來說已經夠用了,主要的還是要明白一些操作概念,然後熟練掌握更新和提交,一般在寫代碼之前先更新一下,避免出現衝突,其他更多的就是在實際的使用中遇到新的問題再查資料或者請教他人快速解決,快速積累經驗!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章