欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
Learning Subversion

學(xué)習Subversion

-- 主流版本管理系統的使用和管理

作者:Zoom.Quiet

1. 概述

本文包含了創(chuàng )建和使用Subversion 進(jìn)行軟件開(kāi)發(fā)的基本知識,為有志于使用Subversion 這一方便的版本管理工具來(lái)支持規范化團隊軟件開(kāi)發(fā)的程序員,在進(jìn)行分布式協(xié)同開(kāi)發(fā)時(shí),如何組織版本控制提供了基礎的建議和實(shí)用技巧;

2. 簡(jiǎn)介

Subversion:
  • 簡(jiǎn)稱(chēng)SVN 是 http://subversion.tigris.org/ 社區開(kāi)發(fā)的,一個(gè)流行的用以代替CVS 的高效版本管理系統;和CVS 類(lèi)似,也是一種"中央倉庫式"的版本管理系統;不過(guò),和CVS 相比 SVN 具有很多高級特性;
  • 詳細的信息,可以參考在線(xiàn)的 SVNBookv1.4

3. 安裝SVN

當前最新版本是 1.5.5, SVN支持在各種操作系統中運行,安裝前請從官方網(wǎng)站下載對應版本; 本文將以 Ubuntu 系統為例進(jìn)行說(shuō)明.

3.1. 環(huán)境準備

一個(gè) 7.04 以上版本的Ubuntu 環(huán)境,有root 權限即可;

3.2. 安裝測試

因為SVN 已經(jīng)包含在 Ubuntu 軟件倉庫中,安裝SVN 僅需一個(gè)命令:

$ sudo apt-get install subversion

 

如果系統報告了依賴(lài)關(guān)系的錯誤,請找出相應的軟件包并安裝它們。如果存在其它問(wèn)題,也請自行解決。如果您是再不能解決這些問(wèn)題,可以考慮通過(guò) Ubuntu 的網(wǎng)站、Wiki、論壇或郵件列表尋求支持。

3.3. 運營(yíng)發(fā)布

SVN 可以提供多種協(xié)議的訪(fǎng)問(wèn)渠道,以下是模式列表:

模式 訪(fǎng)問(wèn)方法
file:/// 直接訪(fǎng)問(wèn)本地硬盤(pán)上文件倉庫
http:// 通過(guò) WebDAV 協(xié)議訪(fǎng)問(wèn)支持 Subversion 的 Apache 2 Web 服務(wù)器
https:// 類(lèi)似 http://,支持 SSL 加密
svn:// 通過(guò)自帶協(xié)議訪(fǎng)問(wèn) svnserve 服務(wù)器
svn+ssh:// 類(lèi)似 svn://,支持通過(guò) SSH 通道
  • 其中svn:// 是本文介紹的模式;
  • 要想使用SVN,首先要初始化一個(gè)版本倉庫:
    $ svnadmin create /path/to/svn/myproj
        
  • 然后,運行`svnserve`
    $ svnserve -d -r /path/to/svn
        
    • 這樣,所有 `/path/to/svn` 目錄中的SVN倉庫都可以通過(guò) svn:// 協(xié)議進(jìn)行遠程訪(fǎng)問(wèn)了
      # 本地訪(fǎng)問(wèn)
              $ svn co svn://localhost/myproj
              # 遠程訪(fǎng)問(wèn)
              $ svn co svn://host.example.org/myproj
              # 即刻下載,建立了本地工作復本,可以進(jìn)行協(xié)同開(kāi)發(fā)了
              

3.4. 在線(xiàn)免費SVN倉庫

事實(shí)上在網(wǎng)絡(luò )中有很多SVN的免費空間可以使用,其中 http://code.google.com/intl/zh/ 是一個(gè)較輕便卻完備的的項目管理環(huán)境,只要注冊成功一個(gè)項目空間,就同時(shí)獲得了一個(gè)維基,一個(gè)Issue ~ 提案追蹤環(huán)境,和一個(gè)SVN倉庫;

  • 比如說(shuō),筆者管理的一個(gè)項目 OpenBookProject:
  • 在線(xiàn)代碼游覽入口:
    • http://openbookproject.googlecode.com/svn/trunk/

       

      如果沒(méi)有方便的主機資源,又想聯(lián)合分布在各地的朋友共同來(lái)進(jìn)行協(xié)同式軟件項目開(kāi)發(fā)的話(huà),可以考慮使用 Google 公司貢獻的這一服務(wù).

4. 管理SVN

SVN 本身提供了豐富的管理工具, 在系統配置方面,僅僅有少量文件用以聲明關(guān)鍵信息.

4.1. 關(guān)鍵配置

在倉庫目錄的 conf 目錄中 svnserve.conf 是關(guān)鍵配置文件:

...
[general]
# 聲明匿名用戶(hù)權限 read|write
anon-access = read
# 聲明登錄用戶(hù)權限 read|write
auth-access = write
# 聲明登錄用戶(hù)口令信息文件
password-db = passwd.cfg
# 聲明登錄用戶(hù)倉庫訪(fǎng)問(wèn)權限
authz-db = authz.cfg
...

 

4.2. 權限配置

配合svnserve.conf 的聲明, SVN 通過(guò)理解兩個(gè)文件來(lái)對倉庫的訪(fǎng)問(wèn)進(jìn)行控制:

4.2.1. password-db

聲明的口令文件,定義了權限用戶(hù)和口令:

[users]
# 用戶(hù)名=口令 的格式來(lái)逐行聲明用戶(hù)賬號
woodpecker = 1q2w3e4r@woodpecker.org
...

 

4.2.2. authz-db

聲明的認證文件,定義了權限用戶(hù)組和倉庫不同部分的訪(fǎng)問(wèn)控制:

[groups]
# 聲明用戶(hù)組 repomana 包含了幾個(gè)用戶(hù)
repomana = woodpecker,zoomq
# 倉庫目錄權限聲明 [倉庫名:目錄名] 格式引導多個(gè)權限聲明
[woodpecker:/]
# * 代表任何人
* = r
# repoman 組成員可以讀寫(xiě)
@repomana = rw
[woodpecker:/foo]
# 任何人可寫(xiě)
* = rw
# river 用戶(hù)只讀
river = r
...

 

5. 使用SVN

作為標準意義上的版本管理系統,SVN 和其它任何版本管理系統日常使用并沒(méi)有什么巨大的不同,是一個(gè)非常容易上手的工具系統;

5.1. 日常使用

以命令行形式說(shuō)明日常通過(guò)SVN 進(jìn)行協(xié)同開(kāi)發(fā)時(shí)最常用的操作:

  1. 更新本地工作復本:
    • $ svn up
  2. 進(jìn)行一些修訂:
    • $ svn add ~ 增補文件/目錄
    • $ svn del ~ 刪除文件/目錄
    • $ svn cp ~ 復制文件/目錄
    • $ svn mv ~ 移動(dòng)文件/目錄
    • 以上命令隨時(shí)可以通過(guò) --help 獲得充分的指示,例如:
       $ svn mv --help
              move (mv, rename, ren): 在工作副本或版本庫中移動(dòng)或改名文件或目錄。
              用法: move SRC... DST
              當移動(dòng)多個(gè)源時(shí),它們作為 DST 的子節點(diǎn)增加,DST 必須是目錄。
              注意: 本子命令等同于先 “copy”,然后 “delete”。
              注意: 此命令中 --revision 選項沒(méi)有作用,已經(jīng)淘汰。
              SRC 可同時(shí)為工作副本(WC) 路徑或 URL:
              WC  -> WC  :  移動(dòng)并加入新增調度 (連同歷史記錄)
              URL -> URL :  完全是服務(wù)器端更名。
              所有 SRC 必須是同一類(lèi)型。
              有效選項:
              -r [--revision] ARG      : ARG (一些命令也接受ARG1:ARG2范圍)
              版本參數可以是如下之一:
              NUMBER       版本號
              '{' DATE '}' 在指定時(shí)間以后的版本
              'HEAD'       版本庫中的最新版本
              'BASE'       工作副本的基線(xiàn)版本
              'COMMITTED'  最后提交或基線(xiàn)之前
              'PREV'       COMMITTED的前一版本
              -q [--quiet]             : 不打印信息,或只打印概要信息
              --force                  : 強制操作運行
              --parents                : 創(chuàng  )建中間目錄
              -m [--message] ARG       : 指定日志信息ARG
              -F [--file] ARG          : 從文件ARG讀取日志信息
              --force-log              : 強制校驗日志信息資源
              --editor-cmd ARG         : 使用 ARG 作為外部編輯器
              --encoding ARG           : 將ARG的值視為字符編碼
              --with-revprop ARG       : 在新版本設置版本屬性 ARG
              使用格式 name[=value]
              

       

  3. 可能取消一些修改
    • $ svn revert
    • 詳細幫助:
      revert: 將工作副本文件恢復到原始版本(恢復大部份的本地修改)。
              用法: revert PATH...
              注意: 本子命令不會(huì )訪(fǎng)問(wèn)網(wǎng)絡(luò ),它解除任何沖突的狀態(tài)。
              但是,它不恢復被刪除的目錄。
              有效選項:
              --targets ARG            : 傳遞文件 ARG 內容為附件參數
              -R [--recursive]         : 向下遞歸,與 --depth=infinity 相同
              --depth ARG              : 受深度參數 ARG(“empty”,“files”,“immediates”,或“infinity”) 約束的操作
              -q [--quiet]             : 不打印信息,或只打印概要信息
              --changelist ARG         : 只能對修改列表 ARG 成員操作
              [aliases: --cl]
              

       

  4. 可能解決一些沖突:
    • $ svn resolved
    • 詳細說(shuō)明:
      resolved: 刪除工作副本中目錄或文件的“沖突”狀態(tài)。
              用法: resolved PATH...
              注意: 本子命令不會(huì )依語(yǔ)法來(lái)解決沖突或是刪除沖突標記;它只是刪除沖突相關(guān)的
              附加文件,讓 PATH 可以被再次提交。它已經(jīng)過(guò)時(shí),被
              “svn resolve --accept working”取代。
              有效選項:
              --targets ARG            : 傳遞文件 ARG 內容為附件參數
              -R [--recursive]         : 向下遞歸,與 --depth=infinity 相同
              --depth ARG              : 受深度參數 ARG(“empty”,“files”,“immediates”,或“infinity”) 約束的操作
              -q [--quiet]             : 不打印信息,或只打印概要信息
              
    • 可能的情景:
      $ svn up
              C  sandwich.txt
              Updated to revision 2.
              $ ls -1
              sandwich.txt
              sandwich.txt.mine
              sandwich.txt.r1
              sandwich.txt.r2
              
      • 在這種情況下,SVN不會(huì )允許你提交sandwich.txt,直到你解決沖突,可選的處置是:
        1. “手動(dòng)”合并沖突文本(檢查和修改文件中的沖突標志)
        2. 運行svn revert <filename>來(lái)放棄所有的本地修改
        3. 用某一個(gè)版本的 臨時(shí)文件覆蓋你的工作文件
          • <filename>.r* 代表的是文件的第幾個(gè)版本
          • <filename>.mine 代表的是本地我的文件版本
          • <filename> 是包含沖突標識的提示文件

             

  5. 提交修改:
    • $ svn ci -m "提交理由"

       

      然后,就是以上過(guò)程的不斷循環(huán)

5.1.1. 對于 CVS 用戶(hù)

特別的,對于從CVS系統遷移過(guò)來(lái)的用戶(hù),需要提升一些關(guān)鍵概念,來(lái)更好的使用 SVN:

  1. 版本號不同了
    • 在CVS中,修訂版本號是每文件的,這是因為CVS使用RCS文件保存數據,每個(gè)文件都在版本庫有一個(gè)對應的RCS文件,版本庫幾乎就是根據項目樹(shù)的結構創(chuàng )建。
    • 在Subversion,版本庫看起來(lái)像是一個(gè)單獨的文件系統,每次提交導致一個(gè)新的文件系統;本質(zhì)上,版本庫是一堆樹(shù),每棵樹(shù)都有一個(gè)單獨的修訂版本號。當有人談?wù)?code>“修訂版本54”時(shí),他們是在討論一個(gè)特定的樹(shù)(并且間接來(lái)說(shuō),文件系統在提交54次之后的樣子)。
    • 技術(shù)上講,談?wù)?code>“文件foo.c的修訂版本5”是不正確的,相反,一個(gè)人會(huì )說(shuō)“foo.c在修訂版本5出現”。同樣,我們在假定文件的進(jìn)展時(shí)也要小心,在CVS,文件foo.c的修訂版本5和6一定是不同的,在Subversion,foo.c可能在修訂版本5和6之間沒(méi)有改變。
    • 類(lèi)似的,在CVS中標簽或分支是文件的一種標注,或者是單個(gè)文件的版本信息,而在Subversion中,標簽和分支是整個(gè)目錄樹(shù)的拷貝
    • 版本庫作為一個(gè)整體,每個(gè)文件的許多版本可見(jiàn):每個(gè)分支的最新版本,每個(gè)標簽的最新版本以及trunk本身的最新版本。所以,我們再精煉一下術(shù)語(yǔ),我們說(shuō)“foo.c在修訂版本5出現在/branches/REL1”
  2. 目錄有版本了
    • 因為 SVN 的版本是針對整個(gè)倉庫的變遷,所以:
      1. svn addsvn delete現在也工作在目錄上了,就像在文件上一樣,還有svn copysvn move也一樣;然而,這些命令不會(huì )導致版本庫即時(shí)的變化,相反,工作的項目只是“預定要”添加和刪除,在運行svn commit之前沒(méi)有版本庫的修改
      2. 目錄不再是啞容器了;它們也有文件一樣的修訂版本號(更準確一點(diǎn),談?wù)?strong>“修訂版本5的目錄foo/”是正確的)

         

  3. 狀態(tài)豐富并合理了
    • 在Subversion,已經(jīng)設法抹去cvs statuscvs update之間的混亂。
    • cvs status命令有兩個(gè)目的:
      • 第一,顯示用戶(hù)在工作拷貝的所有本地修改,
      • 第二,顯示給用戶(hù)哪些文件是最新的。
    • 很不幸,因為CVS難以閱讀的狀態(tài)輸出,許多CVS用戶(hù)并沒(méi)有充分利用這個(gè)命令的好處。相反,他們慢慢習慣運行cvs updatecvs -n update來(lái)快速查看區別,如果用戶(hù)忘記使用-n選項,副作用就是將還沒(méi)有準備好處理的版本庫修改合并到工作拷貝。
    • 對于Subversion,通過(guò)修改svn status的輸出使之同時(shí)滿(mǎn)足閱讀和解析的需要來(lái)努力消除這種混亂,同樣,svn update只會(huì )打印將要更新的文件信息,而不是本地修改
    • 詳細說(shuō)明:
      status (stat, st): 顯示工作副本中目錄與文件的狀態(tài)
              用法: status [PATH...]
              未指定參數時(shí),只顯示本地修改的條目(沒(méi)有網(wǎng)絡(luò )訪(fǎng)問(wèn))。
              使用 -q 時(shí),只顯示本地修改條目的摘要信息。
              使用 -u 時(shí),增加工作版本和服務(wù)器上版本過(guò)期信息。
              使用 -v 時(shí),顯示每個(gè)條目的完整版本信息。
              輸出的前六欄各占一個(gè)字符寬度:
              第一欄: 表示一個(gè)項目是增加、刪除,還是修改
              “ ” 無(wú)修改
              “A” 增加
              “C” 沖突
              “D” 刪除
              “I” 忽略
              “M” 改變
              “R” 替換
              “X” 未納入版本控制,但被外部項目所用
              “?” 未納入版本控制
              “!” 該項目已遺失(被非 svn 命令刪除)或不完整
              “~” 版本控制下的項目與其它類(lèi)型的項目重名
              第二欄: 顯示目錄或文件的屬性狀態(tài)
              “ ” 無(wú)修改
              “C” 沖突
              “M” 改變
              第三欄: 工作副本目錄是否被鎖定
              “ ” 未鎖定
              “L” 鎖定
              第四欄: 已調度的提交是否包含副本歷史
              “ ” 沒(méi)有包含
              “+” 包含
              第五欄: 該條目相對其父目錄是否已切換
              “ ” 正常
              “S” 已切換
              第六欄: 版本庫鎖定標記
              (沒(méi)有 -u)
              “ ” 沒(méi)有鎖定標記
              “K” 存在鎖定標記
              (使用 -u)
              “ ” 沒(méi)有在版本庫中鎖定,沒(méi)有鎖定標記
              “K” 在版本庫中被鎖定,存在鎖定標記
              “O” 在版本庫中被鎖定,鎖定標記在一些其他工作副本中
              “T” 在版本庫中被鎖定,存在鎖定標記但已被竊取
              “B” 沒(méi)有在版本庫中被鎖定,存在鎖定標記但已被終止
              是否過(guò)期的信息出現的位置是第八欄(與 -u 并用時(shí)):
              “*” 服務(wù)器上有更新版本
              “ ” 工作副本是最新版的
              剩余的欄位皆為變動(dòng)寬度,并以空白隔開(kāi):
              工作版本號(使用 -u 或 -v 時(shí))
              最后提交的版本與最后提交的作者(使用 -v 時(shí))
              工作副本路徑總是最后一欄,所以它可以包含空白字符。
              范例輸出:
              svn status wc
              M     wc/bar.c
              A  +   wc/qax.c
              svn status -u wc
              M           965    wc/bar.c
              *     965    wc/foo.c
              A  +         965    wc/qax.c
              Status against revision:   981
              svn status --show-updates --verbose wc
              M           965       938 kfogel       wc/bar.c
              *     965       922 sussman      wc/foo.c
              A  +         965       687 joe          wc/qax.c
              965       687 joe          wc/zig.c
              Status against revision:   981
              有效選項:
              -u [--show-updates]      : 顯示更新信息
              -v [--verbose]           : 打印附加信息
              -N [--non-recursive]     : 過(guò)時(shí);嘗試 --depth=files 或 --depth=immediates
              --depth ARG              : 受深度參數 ARG(“empty”,“files”,“immediates”,或“infinity”) 約束的操作
              -q [--quiet]             : 不打印信息,或只打印概要信息
              --no-ignore              : 忽略默認值和 svn:ignore 屬性
              --incremental            : 給予適合串聯(lián)的輸出
              --xml                    : 輸出為 XML
              --ignore-externals       : 忽略外部項目
              --changelist ARG         : 只能對修改列表 ARG 成員操作
              [aliases: --cl]
              

       

  4. 分支和標簽自然了
    • Subversion不區分文件系統空間和“分支”空間;分支和標簽都是普通的文件系統目錄,這恐怕是CVS用戶(hù)需要逾越的最大心理障礙;-)
    • 帶來(lái)的好處是 分支自然可見(jiàn)了!標簽不必要了!
      • 開(kāi)辟分支,只是將目錄復制到約定的分支容器中,比如說(shuō):
        • $ svn cp trunk branches/my-proj-branch_0.1
      • 在CVS 中作為changeset(修訂集)來(lái)使用的標簽 在SVN 中,版本號天然就包含了這一特性, 完全可以用版本號來(lái)當 標簽用!
    • 注意:
      因為Subversion把分支和標簽看作普通目錄看待,一直要記住檢出項目的trunk(http://svn.example.com/repos/calc/trunk/),
              而不是項目本身的(http://svn.example.com/repos/calc/)。
              如果你錯誤的檢出了項目本身,你會(huì )緊張的發(fā)現你的項目拷貝包含了所有的分支和標簽
              

5.1.2. 遷移 CVS 到 SVN

  • 要享用SVN 帶來(lái)的便利,最直接的方法就是遷移原先的版本倉庫到SVN來(lái);
  • 最流行的(好像是最成熟的)轉化工具是cvs2svn(http://cvs2svn.tigris.org/), 它是最初由Subversion自己的開(kāi)發(fā)社區成員開(kāi)發(fā)的一個(gè)Python腳本:它會(huì )多次掃描你的CVS版本庫,并盡可能?chē)L試推斷提交,分支和標簽,當它 結束時(shí),結果是可以代表代碼歷史的Subversion版本庫或可移植的Subversion轉儲文件,關(guān)于指令和警告的詳細信息可以看官方網(wǎng)站.

5.2. 客戶(hù)端

SVN 有豐富的客戶(hù)端軟件可以選擇,一般命令行內置工具已經(jīng)足夠好用,但是對習慣窗口界面的人,SVN 也有很多選擇,其中最穩定和友好的是官方社區創(chuàng )建的:

  • TortoiseSVN
    • 這是和Windows 資源管理器緊密結合的工具,所有操作都包含在右鍵菜單中;
    • 同時(shí)也包含了 合并,diff查閱,遠程倉庫瀏覽器 等等豐富的支持;
    • 而且支持世界上大多數地區語(yǔ)言的界面;

       

      建議Windows 中的用戶(hù)下載體驗;

5.3. 高級管理

SVN 作為成熟的版本管理系統,可以支持各種級別的開(kāi)發(fā)支持; 當面對大型復雜系統開(kāi)發(fā)時(shí),作為基礎配置管理支持系統,必須擁有一些高級功能來(lái)支撐復雜業(yè)務(wù),這里介紹幾方面常用知識;

5.3.1. 常用分支模式

  • 版本控制在軟件開(kāi)發(fā)中廣泛使用,這里是團隊里程序員最常用的兩種分支/合并模式的介紹,如果你不是使用Subversion軟件開(kāi)發(fā),可隨意跳過(guò) 本小節,如果你是第一次使用版本控制的軟件開(kāi)發(fā)者,請更加注意,以下模式被許多老兵當作最佳實(shí)踐,這個(gè)過(guò)程并不只是針對Subversion,在任何版本 控制系統中都一樣,但是在這里使用Subversion術(shù)語(yǔ)會(huì )感覺(jué)更方便一點(diǎn)。

5.3.1.1. 發(fā)布分支

  • 大多數軟件存在這樣一個(gè)生命周期:編碼、測試、發(fā)布,然后重復。這樣有兩個(gè)問(wèn)題,第一,開(kāi)發(fā)者需要在質(zhì)量保證小組測試假定穩定版本時(shí)繼續開(kāi)發(fā)新特 性,新工作在軟件測試時(shí)不可以中斷,第二,小組必須一直支持老的發(fā)布版本和軟件;如果一個(gè)bug在最新的代碼中發(fā)現,它一定也存在已發(fā)布的版本中,客戶(hù)希 望立刻得到錯誤修正而不必等到新版本發(fā)布。
  • 這是版本控制可以做的幫助,典型的過(guò)程如下:
    1. 開(kāi)發(fā)者提交所有的新特性到主干。 每日的修改提交到/trunk:新特性,bug修正和其他。
    2. 這個(gè)主干被拷貝到“發(fā)布”分支。 當小組認為軟件已經(jīng)做好發(fā)布的準備(如,版本1.0)然后/trunk會(huì )被拷貝到/branches/1.0。
    3. 項目組繼續并行工作,一個(gè)小組開(kāi)始對分支進(jìn)行嚴酷的測試,同時(shí)另一個(gè)小組在/trunk繼續新的工作(如,準備2.0),如果一個(gè)bug在任何一個(gè)位置被發(fā)現,錯誤修正需要來(lái)回運送。然而這個(gè)過(guò)程有時(shí)候也會(huì )結束,例如分支已經(jīng)為發(fā)布前的最終測試“停滯”了。
    4. 分支已經(jīng)作了標簽并且發(fā)布,當測試結束,/branches/1.0作為引用快照已經(jīng)拷貝到/tags/1.0.0,這個(gè)標簽被打包發(fā)布給客戶(hù)。
    5. 分支多次維護。當繼續在/trunk上為版本2.0工作,bug修正繼續從/trunk運送到/branches/1.0,如果積累了足夠的bug修正,管理部門(mén)決定發(fā)布1.0.1版本:拷貝/branches/1.0到/tags/1.0.1,標簽被打包發(fā)布。

       

      整個(gè)過(guò)程隨著(zhù)軟件的成熟不斷重復:
    • 當2.0完成,一個(gè)新的2.0分支被創(chuàng )建,測試、打標簽和最終發(fā)布,
    • 經(jīng)過(guò)許多年,版本庫結束了許多版本發(fā)布,進(jìn)入了“維護”模式,許多標簽代表了最終的發(fā)布版本。

5.3.1.2. 特性分支

  • 一個(gè)特性分支是本章中那個(gè)重要例子中的分支,你正在那個(gè)分支上工作,而Sally還在/trunk繼續工作,這是一個(gè)臨時(shí)分支,用來(lái)作復雜的修改 而不會(huì )干擾/trunk的穩定性,不象發(fā)布分支(也許要永遠支持),特性分支出生,使用了一段時(shí)間,合并到主干,然后最終被刪除掉,它們在有限的時(shí)間里有 用。
  • 還有,關(guān)于是否創(chuàng )建特性分支的項目政策也變化廣泛,一些項目永遠不使用特性分支:大家都可以提交到/trunk,好處是系統的簡(jiǎn)單— 沒(méi)有人需要知道分支和合并,壞處是主干會(huì )經(jīng)常不穩定或者不可用,另外一些項目使用分支達到極限:沒(méi)有修改曾經(jīng)直接提交到主干,即使最細小的修改都要創(chuàng )建短 暫的分支,然后小心的審核合并到主干,然后刪除分支,這樣系統保持主干一直穩定和可用,但是造成了巨大的負擔。
  • 許多項目采用折中的方式,堅持每次編譯/trunk并進(jìn)行回歸測試,只有需要多次不穩定提交時(shí)才需要一個(gè)特性分支,這個(gè)規則可以用這 樣一個(gè)問(wèn)題檢驗:如果開(kāi)發(fā)者在好幾天里獨立工作,一次提交大量修改(這樣/trunk就不會(huì )不穩定。),是否會(huì )有太多的修改要來(lái)回顧?如果答案是“是”, 這些修改應該在特性分支上進(jìn)行,因為開(kāi)發(fā)者增量的提交修改,你可以容易的回頭檢查。
  • 最終,有一個(gè)問(wèn)題就是怎樣保持一個(gè)特性分支“同步”于工作中的主干,在前面提到過(guò),在一個(gè)分支上工作數周或幾個(gè)月是很有風(fēng)險的,主干的修改也許會(huì )持續涌入,因為這一點(diǎn),兩條線(xiàn)的開(kāi)發(fā)會(huì )區別巨大,合并分支回到主干會(huì )成為一個(gè)噩夢(mèng)。
  • 這種情況最好通過(guò)有規律的將主干合并到分支來(lái)避免,制定這樣一個(gè)政策:每周將上周的修改合并到分支,注意這樣做時(shí)需要小心,需要手工記 錄合并的過(guò)程,以避免重復的合并(在“手工跟蹤合并”一節描述過(guò)),你需要小心的撰寫(xiě)合并的日志信息,精確的描述合并包括的范圍(在“合并分支到另一分支 ”一節中描述過(guò)),這看起來(lái)像是脅迫,可是實(shí)際上是容易做到的。
  • 在一些時(shí)候,你已經(jīng)準備好了將“同步的”特性分支合并回到主干,為此,開(kāi)始做一次將主干最新修改和分支的最終合并,這樣以后,除了你的分支修改的部分,最新的分支和主干將會(huì )絕對一致,所以在這個(gè)特別的例子里,你會(huì )通過(guò)直接比較分支和主干來(lái)進(jìn)行合并:
    $ cd trunk-working-copy
        $ svn update
        At revision 1910.
        $ svn merge http://svn.example.com/repos/calc/trunk@1910     http://svn.example.com/repos/calc/branches/mybranch@1910
        U  real.c
        U  integer.c
        A  newdirectory
        A  newdirectory/newfile
        …
        
    通過(guò)比較HEAD修訂版本的主干和HEAD修訂版本的分支,你確定了只在分支上的增量信息,兩條開(kāi)發(fā)線(xiàn)都有了分枝的修改。

5.3.2. HOOKS

和CVS 類(lèi)似SVN 同樣為自動(dòng)化事務(wù)響應開(kāi)辟有"HOOKS"~鉤子腳本支持;只是更加精簡(jiǎn)和規范化了;

一般提供9類(lèi)標準鉤子模板:

$ ls repos/hooks/
post-commit.tmpl	  post-unlock.tmpl  pre-revprop-change.tmpl
post-lock.tmpl		  pre-commit.tmpl   pre-unlock.tmpl
post-revprop-change.tmpl  pre-lock.tmpl     start-commit.tmpl

分別響應核心的四類(lèi)操作:

HOOK 觸發(fā)事件 參數
start-commit 提交事務(wù)產(chǎn)生前 REPOS-PATH:到版本庫的路徑;USER:要進(jìn)行提交的用戶(hù)名
pre-commit 事務(wù)完成提交之前 REPOS-PATH:版本庫的路徑;TXN-NAME正在提交的事務(wù)名稱(chēng)
post-commit 事務(wù)完成后 REPOS-PATH:到版本庫的路徑;REV:被創(chuàng )建的新的修訂版本號
pre-revprop-change 修訂版本屬性變更前 REPOS-PATH:到版本庫的路徑;REVISION:要修改屬性的修訂版本;USER:經(jīng)過(guò)認證的用戶(hù)名;ACTION:屬性自身的名字
post-revprop-change 修訂版本屬性被改變之后 REPOS-PATH:到版本庫的路徑;REVISION:屬性存在的修訂版本;USER:經(jīng)過(guò)校驗的產(chǎn)生變化的用戶(hù)名;ACTION:和屬性自身的名字
pre-lock 嘗試鎖定文件時(shí) REPOS-PATH:到版本庫的路徑;PATH:鎖定的路徑;USER:企圖執行鎖定的用戶(hù)
post-lock 路徑被鎖定后執行 REPOS-PATH:到版本庫的路徑;USER:企圖執行鎖定的用戶(hù)
pre-unlock 企圖刪除一個(gè)文件上的鉤子時(shí) REPOS-PATH:到版本庫的路徑;PATH:鎖定的路徑;USER:企圖解鎖的用戶(hù)
post-unlock 路徑被解鎖后 REPOS-PATH:到版本庫的路徑;USER:企圖解鎖的用戶(hù)
警告:
  • 不要嘗試用鉤子腳本修改事務(wù)。一個(gè)常見(jiàn)的例子就是在提交時(shí)自動(dòng)設置svn:eol-style 或svn:mime-type這類(lèi)屬性。這看起來(lái)是個(gè)好主意,但它會(huì )引起問(wèn)題。主要的問(wèn)題是客戶(hù)并不知道由鉤子腳本進(jìn)行的修改,同時(shí)沒(méi)有辦法通告客戶(hù)它的 數據是過(guò)時(shí)的,這種矛盾會(huì )導致出人意料和不能預測的行為。
  • 作為嘗試修改事務(wù)的替代,我們通過(guò)檢查pre-commit鉤子的事務(wù),在不滿(mǎn)足要求時(shí)拒絕提交。

5.3.2.1. 強制寫(xiě)注釋

舉個(gè)實(shí)用的HOOKS 腳本實(shí)例:

  • pre-commit.tmpl 重命名為:pre-commit 并修訂為以下內容:
    #!/bin/sh
        # PRE-COMMIT HOOK
        REPOS="$1"
        TXN="$2"
        SVNLOOK=/usr/local/bin/svnlook
        $SVNLOOK log -t "$TXN" "$REPOS" |     grep "[a-zA-Z0-9]" > /dev/null
        if [ $? != 0 ]; then
        echo "$TXN $REPOS" 1>&2
        echo "Alert! Commit message may not be empty." 1>&2
        exit 1
        fi
        exit 0
        
  • 然后配置可執行屬性,就可以自動(dòng)拒絕空注釋的檢入事務(wù),并送回對應提示:"Alert! Commit message may not be empty."

5.4. 項目管理

SVN作為基礎配置管理支撐系統,可以輕快的完成版本管理的全方位支持了,而且,進(jìn)一步的配合Trac 可以完成項目管理的大部分流程支持!

5.4.1. Trac

Trac 是種輕型全功能項目管理環(huán)境,主要特性有:

  • 以維基為核心的內容組織
  • 以傳票為核心的任務(wù)式流程
  • 提供豐富的 TrackInks 維基字符約定,可以在任何場(chǎng)所方便的指向 SVN版本/傳票/報表等等所有Trac 內部資源
  • 類(lèi)SQL語(yǔ)句的報表定制支持
  • 里程碑綜合視圖
  • 等等

     

    詳細的敬請期待哲思手冊相關(guān)文章;

     

    PS:

     

    Trac中文化項目長(cháng)期由 Zoom.Quiet 團隊支持,推薦體驗;

6. 文檔版本

  • v0.9 090308 ZoomQuiet 完成初稿
  • v0.8 090303 ZoomQuiet 完成管理SVN部分,以及日常使用大部
  • v0.7 090216 ZoomQuiet 增補文檔大綱
  • v0.6 090209 ZoomQuiet 認領(lǐng)寫(xiě)作
  • v0.5 080301 zeuux 創(chuàng )建
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
圖文:eclipse中SVN分支合并到主干 | Darren Fang的生活點(diǎn)滴
版本控制軟件SubVersion 入門(mén) - Powered by iNewS4
SVN介紹和安裝部署
SVN中Branch的創(chuàng )建與合并
linux下svn的使用
詳細說(shuō)明svn分支與合并,以及實(shí)例
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久