SVN版本控制

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




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

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


版本控制系統:

簡稱:VCS,也叫做“文件數據庫”,追蹤 文件變化,避免出現混亂。


版本庫:

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



Git與SVN區別:

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

分布式:Git



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

集中式版本控制系統最大的毛病就是必須聯網才能工作。



SVN

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


搭建SVN服務器

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

打開終端,創建一個repoOfmy倉庫,輸入指令:svnadmin create /Users/gyh/SVNs/repoOfmy
指令執行成功后,硬盤上多一個“/Users/gyh/SVNs/repoOfmy目錄,其目錄結構如下:




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

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

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

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

    # harry = harryssecret
    # sally = sallyssecret

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

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

    # 關聯passwd.
    password-db = passwd
    # 關聯authz
    authz-db = authz


啟動 svn服務器: [ ]( 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”的子目錄,否則導入代碼會長時間沒反應)

重復 啟動服務器,會報錯:
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



關閉 svn服務器



這樣就搭建了svn服務器環境。


使用svn客戶端功能

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

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

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

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

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



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

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

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

將服務器中project倉庫的內容下載到本地的“/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) 已經更改過代碼到服務器 (文件路徑的修改)

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

例子:

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

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



4.更新服務器端的代碼到客戶端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/

其中,括號中的內容 一般代表著指令簡稱
比如:用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 "修改的內容"



標準步驟:

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

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

c. Commit(提交):當你已經修改了代碼,你就需要Commit到repository
svn commit -m "修改的內容"

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


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


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




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

MAC下SVN的常用命令
subversion的使用總結





常見報錯,參考:






goyohol's essay

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,362評論 6 537
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,013評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,346評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,421評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,146評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,534評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,585評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,767評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,318評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,074評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,258評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,828評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,486評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,916評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,156評論 1 290
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,993評論 3 395
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,234評論 2 375

推薦閱讀更多精彩內容