SVN版本控制

很久以前用的SVN管理代碼!!!許久沒使用了,老知識回顧?。。?br> 按照自己慣例,一篇文章?。?!??????????




版本控制(Version Control)的作用:追蹤文件的變化。

文件備份;
文件名中存儲版本號或者日期;
多人編輯的環(huán)境下,共享一個文件目錄,要求每個人編輯完以后,在文件上出所需的標(biāo)識。


版本控制系統(tǒng):

簡稱:VCS,也叫做“文件數(shù)據(jù)庫”,追蹤 文件變化,避免出現(xiàn)混亂。


版本庫:

版本庫又名倉庫,英文名:repository
可以理解成一個目錄,這個目錄里面所有文件都可以被版本控制系統(tǒng)管理,各文件的“修改”、“刪除”都能跟蹤,以便何時都可以追蹤歷史,在將來任一時刻都可“還原”。



Git與SVN區(qū)別:

Git:每個人電腦里都有完整的版本庫

分布式:Git



SVN:版本庫是集中存放在中央服務(wù)器。
集中式:SVN

集中式版本控制系統(tǒng)最大的毛病就是必須聯(lián)網(wǎng)才能工作。



SVN

Windows環(huán)境下,一般使用“TortoiseSVN”;
Mac環(huán)境下,由于Mac自帶SVN服務(wù)器端客戶端功能,所以不安裝任何第三方軟件就可以使用 SVN功能,需要做一些簡單配置


搭建SVN服務(wù)器

先在任一目錄(/User/gyh/)下新建一個SVNs目錄,以后就可以在SVNs目錄(/Users/gyh/SVNs)下創(chuàng)建(放置)多個倉庫目錄。

打開終端,創(chuàng)建一個repoOfmy倉庫,輸入指令:svnadmin create /Users/gyh/SVNs/repoOfmy
指令執(zhí)行成功后,硬盤上多一個“/Users/gyh/SVNs/repoOfmy目錄,其目錄結(jié)構(gòu)如下:




配置svn用戶權(quán)限:(conf文件夾)
在“/Users/gyh/SVNs/repoOfmy/conf/”目錄下,有3個權(quán)限文件: authz、passwd、snvserve.conf
GYHdeMacBook-Pro:conf gyh$ ls
authz hooks-env.tmpl passwd svnserve.conf

  • 打開authz:用戶權(quán)限分配內(nèi)容 (vi authz
    # 用戶組 (添加用戶組成員
    [groups]
    # admins是組名,admin是組員(可以寫多個,用“,”分隔。如:admins=admin,gyh,coco)
    admins=admin
    # harry_and_sally = harry,sally
    # harry_sally_and_joe = harry,sally,&joe

    # 設(shè)置目錄權(quán)限成員權(quán)限設(shè)置)
    # [/foo/bar]
    # harry = rw
    # &joe = r
    # * =
    [/]
    @admins=rw # 意思是:admins組里面的成員都有rw的權(quán)限,rw:讀寫權(quán)限, 也可以寫成admin=rw,只賦予admin用戶有讀寫權(quán)限
    # 這里如果不寫,代表:下一級目錄的用戶不具備繼承關(guān)系,也就是沒有訪問的權(quán)限。
    * = r:別的用戶只能讀; * = rw:其他的用戶也有繼承關(guān)系(具備讀/寫權(quán)限)

  • 打開passwd:配置svn用戶密碼vi passwd
    [users]
    # 與authz的用戶名對應(yīng),后面是用戶密碼
    admin=abc123

    # harry = harryssecret
    # sally = sallyssecret

  • 打開svnserve.conf:svn的配置信息 (vi svnserve.conf
    配置項如下: (#空格都去掉)
    # anon-access = read #匿名用戶有讀的權(quán)限
    # auth-access = write #登錄用戶的寫的權(quán)限

    # 關(guān)聯(lián)passwd(需要放開注釋)
    # password-db = passwd
    # 關(guān)聯(lián)authz (需要放開注釋)
    # authz-db = authz
    最終:
    # 禁用匿名用戶讀的權(quán)限
    anon-access = none
    # 登錄用戶有寫的權(quán)限
    auth-access = write

    # 關(guān)聯(lián)passwd.
    password-db = passwd
    # 關(guān)聯(lián)authz
    authz-db = authz


啟動 svn服務(wù)器: [ ]( svnserve -d -r /Users/gyh/SVNs )
GYHdeMacBook-Pro:conf gyh$ svnserve -d -r /Users/gyh/SVNsGYHdeMacBook-Pro:conf gyh$ svnserve -d -r /Users/gyh/SVNs/repoOfmy
(不能再加“/mycode”的子目錄,否則導(dǎo)入代碼會長時間沒反應(yīng))

重復(fù) 啟動服務(wù)器,會報錯:
GYHdeMacBook-Pro:conf gyh $ svnserve -d -r /Users/gyh/SVNs
GYHdeMacBook-Pro:conf gyh $ svnserve -d -r /Users/gyh/SVNs
svnserve: E000048: Can't bind server socket: Address already in use



關(guān)閉 svn服務(wù)器



這樣就搭建了svn服務(wù)器環(huán)境。


使用svn客戶端功能

1.從本地導(dǎo)入(import)代碼到服務(wù)器 (第一次:初始化導(dǎo)入)

格式:svn import 工程的路徑 服務(wù)器地址 --username=用戶名 --password=密碼 -m "注釋內(nèi)容"

例子:
svn import /Users/gyh/Documents/project svn://localhost/ios/project --username=gyh --password=abc123 -m "初始化導(dǎo)入"

svn import /Users/gyh/Documents/project https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化導(dǎo)入" (https:對應(yīng)的服務(wù)器地址)

將“/Users/gyh/Documents/project”中的所有內(nèi)容上傳到服務(wù)器ios倉庫project目錄下(后面雙引號中的"初始化導(dǎo)入"是注釋)。



2.從服務(wù)器端 下載代碼到客戶端本地checkout

格式:svn checkout 服務(wù)器地址 --username=用戶名 --password=密碼 存儲在本地的路徑

例子:
svn checkout https://123.45.67.890/ios/project --username=gyh --password=abc123 -m "初始化導(dǎo)入" /Users/gyh/Desktop/project (https:對應(yīng)的服務(wù)器地址)

將服務(wù)器中project倉庫的內(nèi)容下載到本地的“/Users/gyh/Desktop/project”目錄中。

svn import /Users/gyh/Desktop/Company/svnDocuments https://123.45.67.890/svn/res/項目文檔 --username=gyh --password=abc123 -m "import first"
500 svn checkout https://123.45.67.890/svn/res/項目文檔 --username=gyh --password=abc123 /Users/gyh/Desktop/Company/svnDocuments



3.提交 (commit) 已經(jīng)更改過代碼到服務(wù)器 (文件路徑的修改)

  • <1>.先定位到“/Users/gyh/Desktop/project”目錄
    cd /Users/gyh/Desktop/project”
  • <2>.輸入提交指令
    格式:svn commit -m "修改的內(nèi)容"

例子:

cd /Users/gyh/Desktop/project”
svn commit -m "修改了plist文件"

將“/Users/gyh/Desktop/project”下的所有修改同步服務(wù)器端。



4.更新服務(wù)器端的代碼到客戶端svn update
cd /Users/gyh/Desktop/project”
svn update



5.svn其他用法svn help

GYHdeMacBook-Pro:ios gyh$ svn help
 usage: svn <subcommand> [options] [args]
 Subversion command-line client.
 Type 'svn help <subcommand>' for help on a specific subcommand.
 Type 'svn --version' to see the program version and RA modules
  or 'svn --version --quiet' to see just the version number.

 Most subcommands take file and/or directory arguments, recursing
 on the directories.  If no arguments are supplied to such a
 command, it recurses on the current directory (inclusive) by default.

 Available subcommands:
   add
   auth
   blame (praise, annotate, ann)
   cat
   changelist (cl)
   checkout (co)
   cleanup
   commit (ci)
   copy (cp)
   delete (del, remove, rm)
   diff (di)
   export
   help (?, h)
   import
   info
   list (ls)
   lock
   log
   merge
   mergeinfo
   mkdir
   move (mv, rename, ren)
   patch
   propdel (pdel, pd)
   propedit (pedit, pe)
   propget (pget, pg)
   proplist (plist, pl)
   propset (pset, ps)
   relocate
   resolve
   resolved
   revert
   status (stat, st)
   switch (sw)
   unlock
   update (up)
   upgrade

 Subversion is a tool for version control.
 For additional information, see http://subversion.apache.org/

其中,括號中的內(nèi)容 一般代表著指令簡稱。
比如:用svn ci代替svn commit,用svn co代替svn checkout。




SVN的步驟:

svn add * // 添加所有路徑


最簡步驟:
<1>.先定位到“/Users/gyh/Desktop/project”目錄
cd /Users/gyh/Desktop/project”
<2>.輸入提交指令
格式:svn commit -m "修改的內(nèi)容"



標(biāo)準(zhǔn)步驟:

a. repository(源代碼庫):源代碼統(tǒng)一存放地方

b. Checkout (提取):當(dāng)你手上沒有源代碼的時候,你需要從repository里checkout一份
svn checkout svn地址

c. Commit(提交):當(dāng)你已經(jīng)修改了代碼,你就需要Commit到repository
svn commit -m "修改的內(nèi)容"

d. Update(更新):當(dāng)你已經(jīng)Checkout了一份源代碼, Update一下,就可以和Repository上的源代碼進(jìn)行同步,手上的代碼就會有最新變更。


開發(fā)過程
已Checkout好的代碼 → Update(獲得最新的代碼) → 作出自己的修改并調(diào)試成功 → Commit(提交后,大家就可以看到你的修改)


多人開發(fā):(跟git類似)
如果程序員同時修改了同一個文件,SVN可以默認(rèn)Merge這兩個程序員的改動。(Merge合并
實際上SVN管理源代碼是以“”為單位的:
兩個程序員只要修改的不是程序的同一行,SVN都會自動合并兩種修改;
如果是同一行呢,SVN會提示:文件Confict(沖突)。需要手動確認(rèn)、解決。




參考:
SVN子命令add用法淺析

MAC下SVN的常用命令
subversion的使用總結(jié)





常見報錯,參考:






goyohol's essay

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

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

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