<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    Junky's IT Notebook

    統(tǒng)計

    留言簿(8)

    積分與排名

    WebSphere Studio

    閱讀排行榜

    評論排行榜

    Windows下架設(shè)Subversion服務(wù)器(轉(zhuǎn))

    作者:indian

    版本:v1.1

    修訂:2007年12月25日2:24:53

    出處:blog.kysf.net

    版權(quán):作者保留對本文的一切修改、發(fā)布等權(quán)力。任何人想要轉(zhuǎn)載本文部分或全部內(nèi)容時,必須保留包括作者、版本、修訂、出處、版權(quán),共五項信息。對本文的參考引用,則不受限制。

     

    關(guān)鍵詞:subversion, 安裝配置, 權(quán)限, 目錄訪問

     

    1 前言
    2 基本概念
    2.1 什么是版本控制
    2.2 什么是 Subversion
    2.3 版本庫(repository)
    3 安裝配置
    3.1 安裝獨立服務(wù)器 SVNServer
    3.2 安裝 ApacheSVN 服務(wù)器
    4 FAQ
    5 參考資料

     

     

    1、前 言

     

    花了72小時,終于把 Subversion 初步掌握了。從一個連“什么是版本控制”都不知道的門外漢,到配置出精確至每目錄訪問的入門者,中間還卡了一天時間。其中費了許多氣力,摸索實驗了多次, 還差點放棄了,但是收獲是巨大的。現(xiàn)把我的配置和學(xué)習(xí)過程寫下來,供大家參考,也讓初學(xué)者少走彎路。

    由于本人不會 Unix/Linux (正在學(xué)習(xí)中),故僅以 Windows 平臺為例講解,Unix/Linux 平臺請參考相關(guān)資料。如其中有謬誤的地方,包括錯別字,請聯(lián)系我修訂。

    技術(shù)在分享中進(jìn)步!

     

     

    2、基本概念

     

    2.1、什么是版本控制

    簡單點來說,版本控制就是數(shù)據(jù)倉庫,它可以記錄你對文件的每次更改。這樣,就算你在昏天黑地的改了幾個月后老板說不要了,還是按照過去那樣,你也不會抓狂,簡單的恢復(fù)版本操作就搞定一切。

     

    2.2、什么是 Subversion

    Subversion是一個自由/開源版本控制系統(tǒng),它管理文件和目錄可以超越時間。一組文 件存放在中心版本庫,這個版本庫很像一個普通的文件服務(wù)器,只是它可以記錄每一次文件和目錄的修改,這便使你可以取得數(shù)據(jù)以前的版本,從而可以檢查所作的 更改。從這個方面看,許多人把版本控制系統(tǒng)當(dāng)作一種“時間機(jī)器”。

    Subversion可以通過網(wǎng)絡(luò)訪問它的版本庫,從而使用戶可以在不同的電腦上使用。一定 程度上可以說,允許用戶在各自的地方修改同一份數(shù)據(jù)是促進(jìn)協(xié)作。進(jìn)展可能非常的迅速,并沒有一個所有的改變都會取得效果的通道,由于所有的工作都有歷史版 本,你不必?fù)?dān)心由于失去某個通道而影響質(zhì)量,如果存在不正確的改變,只要取消改變。

    一些版本控制系統(tǒng)也是軟件配置管理(SCM)系統(tǒng),這種系統(tǒng)經(jīng)過特定的精巧設(shè)計來管理源代 碼,有許多關(guān)于軟件開發(fā)的特性—本身理解編程語言、或者提供構(gòu)建程序的工具。然而,Subversion不是這樣一個系統(tǒng),它是一個通用系統(tǒng),可以管理任 何類型的文件集,對你這可能是源代碼,對別人,可能是一個貨物報價單或者是書稿等。

     

    2.3、版本庫(repository)

    Subversion 的核心就是 rpository ,中文翻譯成“版本庫”。就是位于服務(wù)器端,統(tǒng)一管理和儲存數(shù)據(jù)的地方。

     

     

    3、安裝配置

     

    3.1 安裝獨立服務(wù)器 SVNServer

    環(huán)境

    OS:Windows XP SP2

    Web:Apache 2.2.6

    SVN:svn-win32-1.4.6

     

    一、準(zhǔn)備工作

    1、獲取 Subversion 服務(wù)器程序

    到官方網(wǎng)站(http://subversion.tigris.org/)下載最新的服務(wù)器安裝程序。目前最新的是1.4.6版本,具體下載地址在:http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=8100&expandFolder=8100&folderID=91 ,注意找 for apache 2.2.x 版本的。

    2、獲取 TortoiseSVN 客戶端程序

    從官方網(wǎng)站 http://tortoisesvn.net/downloads 獲取最新的 TortoiseSVN 。TortoiseSVN 是一個客戶端程序,用來與 subvers 服務(wù)器端通訊。Subversion 自帶一個客戶端程序 svn.exe ,但 TortoiseSVN 更好操作,提高效率。

     

    二、安裝服務(wù)器端和客戶端

    首先安裝 Apache 2.2.6 ,具體安裝方法大家參考相關(guān)資料,或者參看我寫的《Windows下安裝Apache 2.2.x》。

    其次安裝 Subversion(以下簡稱SVN)的服務(wù)器端和客戶端。下載下來的服務(wù)器端是個 zip壓縮包,直接解壓縮即可,比如我解壓到 E:\subversion 。客戶端安裝文件是個 exe 可執(zhí)行文件,直接運行按提示安裝即可,客戶端安裝完成后提示重啟。

     

    三、建立版本庫(Repository)

    運行Subversion服務(wù)器需要首先要建立一個版本庫(Repository)。版本庫可以看作是服務(wù)器上集中存放和管理數(shù)據(jù)的地方。

    開始建立版本庫。首先建立 e:\svn 空文件夾作為所有版本庫的根目錄。然后,進(jìn)入命令行并切換到subversion的bin目錄。輸入如下命令:

    svnadmin create E:\svn\repos1

    此命令在 E:\svn 下建立一個版本庫 repos1 。repos1 下面會自動生成一些文件夾和文件。

    我們也可以使用 TortoiseSVN 圖形化的完成這一步:

    先建立空目錄 E:\svn\repos1 ,注意一定是要空的。然后在 repos1 文件夾上“右鍵->TortoiseSVN->Create Repository here...”,然后可以選擇版本庫模式,這里使用默認(rèn)的FSFS即可,然后就創(chuàng)建了一系列文件夾和文件,同命令行建立的一樣。

     

    四、運行獨立服務(wù)器

    此時 subversion 服務(wù)還沒有開始,只是通過它的命令建立了版本庫。繼續(xù)在剛才的命令窗口輸入:

    svnserve.exe –daemon

    svnserve 將會在端口 3690 等待請求,--daemon(兩個短橫線)選項告訴 svnserve 以守護(hù)進(jìn)程方式運行,這樣在手動終止之前不會退出。注意不要關(guān)閉命令行窗口,關(guān)閉窗口會把 svnserve 停止。

    為了驗證svnserve正常工作,使用TortoiseSVN -> Repo-browser 來查看版本庫。在彈出的 URL 對話框中輸入:

    svn://localhost/svn/repo1

    點 OK 按鈕后就可以看見 repo1 版本庫的目錄樹結(jié)構(gòu)了,只不過這時 repo1 是個空庫。

    你也可以使用--root選項設(shè)置根位置來限制服務(wù)器的訪問目錄,從而增加安全性和節(jié)約輸入svnserve URL的時間:

    svnserve.exe --daemon --root drive:\path\to\repository

    以前面的測試作為例,svnserve 將會運行為:

    svnserve.exe --daemon --root e:\svn

    然后TortoiseSVN中的版本庫瀏覽器URL縮減為:

    svn://localhost/repo1

     

    五、配置用戶和權(quán)限

    用文本編輯器打開E:\svn\repos1\conf目錄,修改svnserve.conf:

    將:

    # password-db = passwd

    改為:

    password-db = passwd

    即去掉前面的 # 注釋符,注意前面不能有空格。

    然后修改同目錄的passwd文件,增加一個帳號:

    將:

    [users]
    # harry = harryssecret
    # sally = sallyssecret

    增加帳號:

    [users]
    #harry = harryssecret
    #sally = sallyssecret
    test = test

     

    六、初始化導(dǎo)入

    下面就是將我們的數(shù)據(jù)(項目)導(dǎo)入到這個版本庫,以后就由版本庫管理我們的數(shù)據(jù)。我們的任何改動都回被版本庫記錄下來,甚至我們自己丟失、改錯數(shù)據(jù)時版本庫也能幫我們找回數(shù)據(jù)。

    比如,我在 d:\wwwroot 下有個 guestbook 文件夾,里面存放的是我編寫的留言簿程序。在此文件夾上“右鍵 -> TortoiseSVN -> Import...” ,在彈出對話框的“URL of repository”輸入“svn://localhost/repos1/guestbook”。在“Import message”輸入“導(dǎo)入整個留言簿”作為注釋。
    點 OK 后要求輸入帳號。我們在用戶名和密碼處都輸入 test 。完成后 guestbook 中的內(nèi)容全部導(dǎo)入到了 svn://localhost/svn/repo1/guestbook 。

    我們看到在 e:\svn\repo1 沒有任何變化,連個 guestbook 文件夾都沒有建立,唯一的變化就是e:\svn\repo1容量變大了。實際上我們源guestbook中的內(nèi)容已經(jīng)導(dǎo)入 repo1 版本庫了,源 guestbook 文件夾可以刪除了。

    需要注意的是,這一步操作可以完全在另一臺安裝了 TortoiseSVN 的客戶機(jī)上進(jìn)行。例如運行svnserve的主機(jī)的IP是133.96.121.22,則URL部分輸入的內(nèi)容就是“svn://133.96.121.22” 。

     

    七、基本操作流程

    1、取出(check out)

    取出版本庫到一個工作拷貝:

    來到任意空目錄下,比如在f分區(qū)建立一個空文件夾 f:\work 。“右鍵 -> SVN Checkout”。在“URL of repository”中輸入“svn://localhost/svn/repo1/guestbook”,這樣我們就得到了一份 guestbook 中內(nèi)容的工作拷貝。

    2、存入(check in)/提交(commit)

    在工作拷貝中作出修改并提交:

    在 guestbook 工作拷貝中隨便打開一個文件,作出修改,然后“右鍵 -> SVN Commit... ”。這樣我們就把修改提交到了版本庫,版本庫根據(jù)情況存儲我們提交的數(shù)據(jù)。

    在修改過的文件上“右鍵 -> TortoiseSVN -> Show Log” ,可以看到對這個文件所有的提交。在不同的 revision 條目上“右鍵 -> Compare with working copy”,我們可以比較工作拷貝的文件和所選 revision 版本的區(qū)別。

     

     

    3.2 安裝 ApacheSVN 服務(wù)器

    Subversion的設(shè)計包括一個抽象的網(wǎng)絡(luò)層,這意味著版本庫可以通過各種服務(wù)器進(jìn)程訪問。理論上講,Subversion可以使用無限數(shù)量的網(wǎng)絡(luò)協(xié)議實現(xiàn),目前實踐中存在著兩種服務(wù)器。

     

    • SVNServer:svnserve 是一個小的(也叫輕型的)、獨立服務(wù)器,使用自己定義的協(xié)議和客戶端。(作者注:以下稱這種服務(wù)器為“svnserver服務(wù)器”,上面的安裝配置就是安裝svnserver服務(wù)器。)

    • ApacheSVN:Apache是最流行的web服務(wù)器,通過使用 mod_dav_svn 模塊,Apache可以訪問版本庫,并且可以使客戶端使用HTTP的擴(kuò)展協(xié)議WebDAV/DeltaV進(jìn)行訪問。(作者注:以下稱這種服務(wù)器為“ApacheSVN服務(wù)器”)

     

    通過 Http 協(xié)議訪問版本庫是 Subversion 的亮點之一。ApacheSVN服務(wù)器 具備了許多 svnserve服務(wù)器 沒有的特性,使用上更加靈活,但是有一點難于配置,靈活通常會帶來復(fù)雜性。

    由于 Subversion 需要版本化的控制,因此標(biāo)準(zhǔn)的 Http 協(xié)議不能滿足需求。要讓 Apache 與 Subversion 協(xié)同工作,需要使用 WebDAV(Web-based Distributed Authoring and Versioning:)Web 分布式創(chuàng)作和版本控制)。WebDAV 是 HTTP 1.1 的擴(kuò)展,關(guān)于 WebDAV 的規(guī)范和工作原理,可以參考 IETF RFC 2518http://www.ietf.org/rfc/rfc2518.txt)。

     

    一、必備條件

    為了讓你的版本庫使用HTTP網(wǎng)絡(luò),你必需具備以下幾個條件:

    1. 配置好httpd 2.2.x,并且使用mod_dav啟動。
    2. 為mod_dav安裝mod_dav_svn插件。
    3. 配置你的httpd.conf,使http協(xié)議能訪問版本庫。

    下面以我的配置過程詳細(xì)講解。

    環(huán)境:

    OS:Windows XP SP2

    Web:Apache 2.2.6

    SVN:svn-win32-1.4.6

     

    二、安裝

    1、安裝Apache

    具體安裝方法見:《Windows下安裝Apache 2.2.x

    2、安裝 Subversion

    將下載下來的 svn-win32-1.4.6.zip 直接解壓即可,比如我解壓到 e:\subversion 。
    從Subversion安裝目錄的 bin 子目錄將 intl3_svn.dll、libdb44.dll、mod_authz_svn.so、mod_dav_svn.so 拷貝到Apache的模塊目錄(Apache 安裝目錄的 modules 文件夾)。

     

    三、基本的Apache配置

    修改Apache的配置文件 httpd.conf ,使用LoadModule來加載mod_dav_svn模塊。

    將:

    #LoadModule dav_module modules/mod_dav.so

    改成:

    LoadModule dav_module modules/mod_dav.so

    即去掉前面的“#”號。

    添加:

    LoadModule dav_svn_module modules/mod_dav_svn.so

    一定確定它在 mod_dav 之后。

    現(xiàn)在你已經(jīng)設(shè)置了Apache和Subversion,但是Apache不知道如何處理 Subversion客戶端,例如TortoiseSVN。為了讓Apache知道哪個目錄是用來作為Subversion版本庫,你需要使用編輯器(例 如記事本)編輯Apache的配置文件。

    在配置文件最后添加如下幾行:

    <Location / repository>
    DAV svn
    SVNPath e:/svn/repos1
    </Location>

    這個配置告訴Apache首先需要啟用 dav_module,然后加載 dav_svn_module 。版本庫對外的URL是:http://服務(wù)器IP/repository ,所有的Subversion版本庫在物理上位于e:/svn/repos1 。

    配置完畢后重新啟動 Apache,打開瀏覽器,輸入 http://服務(wù)器IP/ repository 將會看到如下畫面:

    這表示 Apache 的 dav_svn 模塊已經(jīng)可以正常工作了。用戶可以使用任何一種 Subversion 的客戶端通過 Http 協(xié)議訪問你的版本庫。

    如果想要指定多個版本庫,可以用多個 Location 標(biāo)簽,也可以使用 SVNParentPath 代替 SVNPath,例如在 e:\svn 下有多個版本庫 repos1,repos2 等等,用如下方式指定:

    <Location /repository>
    DAV svn
    SVNParentPath e:/svn
    </Location>

    “SVNParentPath e:/svn ” 表示 e:\svn 下的每個子目錄都是一個版本庫。可以通過 http://服務(wù)器IP/repository/repos1,http://服務(wù)器IP/repository/repos2 來訪問。

    現(xiàn)在你的版本庫任何人都可以訪問,并且有完全的寫操作權(quán)限。也就是說任何人都可以匿名讀取, 修改,提交,以及刪除版本庫中的內(nèi)容(注:這時不需要配置E:\svn\repos\conf\svnserve.conf 文件,并且也不需要啟動E:\subversion\bin\svnserve.exe。因為提交是通過Apache的dav模塊處理的,而不是由 svnservice處理。)。我們用 TortoiseSVN 客戶端驗證即知。

    顯然大部分場合這是不符合需求的。那么如何進(jìn)行權(quán)限設(shè)置呢,Apache 提供了基本的權(quán)限設(shè)置:

     

    四、認(rèn)證選項

    1、基本 HTTP 認(rèn)證

    最簡單的客戶端認(rèn)證方式是通過 HTTP 基本認(rèn)證機(jī)制,簡單的使用用戶名和密碼來驗證一個用戶的身份。Apache提供了一個 htpasswd 工具來管理一個用戶文件,這個文件包含用戶名和加密后的密碼,這些就是你希望賦予 Subversion 特別權(quán)限的用戶。htpasswd 可以在 Apache 的 bin 安裝目錄下找到。具體使用方法如下:

    創(chuàng)建用戶文件:
    htpasswd -c E:\usr\Apache2.2\bin\passwd.conf username

    添加新用戶(-m 表示以 MD5 加密密碼,可選項):
    htpasswd [-m] E:\usr\Apache2.2\bin\passwd.conf Newusername

    更改用戶密碼:
    htpasswd [-m] E:\usr\Apache2.2\bin\passwd.conf username

    刪除用戶(要用大寫的 D ):
    htpasswd –D E:\usr\Apache2.2\bin\passwd.conf username

    接下來修改 httpd.conf,在 Location 標(biāo)簽中加入如下內(nèi)容:

    AuthType Basic
    AuthName "svn repos"
    AuthUserFile E:/usr/Apache2.2/bin/passwd.conf
    Require valid-user

    說明:

    AuthType Basic:啟用基本的驗證,比如用戶名/密碼對。

    AuthName "svn repos":當(dāng)一個認(rèn)證對話框彈出時,出現(xiàn)在認(rèn)證對話框中的信息。(最好用英文,TortoiseSVN 不支持中文,安裝語言包除外。)

    AuthUserFile E:/usr/Apache2.2/bin/passwd:指定E:\usr\Apache2.2\bin\passwd為用戶文件,用來驗證用戶的用戶名及密碼。

    Require valid-user:限定用戶只有輸入正確的用戶名及密碼后才能訪問這個路徑

     

    重新啟動 Apache ,打開瀏覽器訪問版本庫。Apache 會提示你輸入用戶名和密碼來認(rèn)證登陸了,現(xiàn)在只有 passwd 文件中設(shè)定的用戶才可以訪問版本庫。也可以配置只有特定用戶可以訪問,替換上述 "Require valid-user" 為 "Require user tony robert" 將只有用戶文件中的 tony 和 robert 可以訪問該版本庫。

    有的時候也許不需要這樣嚴(yán)格的訪問控制,例如大多數(shù)開源項目允許匿名的讀取操作,而只有認(rèn)證用戶才允許寫操作。為了實現(xiàn)更為細(xì)致的權(quán)限認(rèn)證,可以使用 Limit 和 LimitExcept 標(biāo)簽。例如:

    <LimitExcept GET PROPFIND OPTIONS REPORT>
    require valid-user
    </LimitExcept>

    以上配置將使匿名用戶有讀取權(quán)限,而限制只有 passwd 中配置的用戶可以使用寫操作。

    如果這還不能滿足你的要求,你希望精確的控制版本庫目錄訪問,可以使用 Apache 的 mod_authz_svn 模塊對每個目錄進(jìn)行認(rèn)證操作。

     

     

    2、用 mod_authz_svn 進(jìn)行目錄訪問控制

    首先需要讓 Apache 將 mod_authz_svn 模塊加載進(jìn)來。在 Subversion 的安裝目錄中找到 mod_auth_svn 模塊,將其拷貝到 Apache 安裝目錄的 modules 子目錄下。修改 httpd.conf 文件,添加:

    LoadModule authz_svn_module modules/mod_authz_svn.so

    現(xiàn)在可以在 Location 標(biāo)簽中使用 authz 的功能了。一個基本的 authz 配置如下:

    <Location /repository>
    DAV svn
    SVNParentPath e:/svn

    # our access control policy
    AuthzSVNAccessFile E:/usr/Apache2.2/bin/accesspolicy.conf

    # try anonymous access first, resort to real
    # authentication if necessary.
    Satisfy Any
    Require valid-user

    # how to authenticate a user
    AuthType Basic
    AuthName "Subversion repository"
    AuthUserFile E:/usr/Apache2.2/bin/passwd.conf
    </Location>

    AuthzSVNAccessFile 指向的是 authz 的策略文件,詳細(xì)的權(quán)限控制可以在這個策略文件中指定。訪問文件 accesspolicy.conf 的語法與svnserve.conf和 Apache 的配置文件非常相似,以(#)開頭的行會被忽略;在它的簡單形式里,每一小節(jié)命名一個版本庫和一個里面的路徑;認(rèn)證用戶名是在每個小節(jié)中的選項名;每個選 項的值描述了用戶訪問版本庫的級別:r(只讀)或者rw(讀寫),如果用戶沒有提到或者值留空,訪問是不允許的; * 表示所有用戶,用它控制匿名用戶的訪問權(quán)限;@符號區(qū)分組和用戶。如:

    [groups]
    committers = paulex, richard
    developers = jimmy, michel, spark, sean

    [/]
    * = r
    @committers = rw

    [/branches/dev]
    @developers = rw

    [/tags]
    tony = rw
    [/private]
    * =
    @committers= r

    使用 SVNParentPath 代替 SVNPath 來指定多個版本庫的父目錄時,其中所有的版本庫都將按照這個策略文件配置。例如上例中 tony 將對所有版本庫里的 /tags 目錄具有讀寫權(quán)限。如果要對具體每個版本庫配置,用如下的語法:

    [groups]
    project1_committers = paulex, richard
    project2_committers = jimmy, michel, spark, tony, Robert

    [repos1:/]
    * = r
    @ project1_committer = rw

    [repos2:/]
    * = r
    @ project2_committer = rw

    這樣項目1的 project1_committer 組只能對 repos1 版本庫下的文件具有寫權(quán)限而不能修改版本庫 repos2 ,同樣項目2的 project2_commiter 組也不能修改 repos1 版本庫的文件。

     

     

    4、FAQ

    1、路徑或權(quán)限不足時將出現(xiàn)錯誤信息提示:

    http://localhost (路徑不對)
    Error * PROPFIND request failed on '/' PROPFIND of '/': 200 OK (http://localhost)

    http://localhost/svn (權(quán)限不足)
    Error * PROPFIND request failed on '/svn' PROPFIND of '/svn': 403 Forbidden (http://localhost)

    http://localhost/svn/repos (正常顯示)

    http://localhost/repos (權(quán)限不允許)
    Error * PROPFIND request failed on '/repos' PROPFIND of '/repos': 405 Method Not Allowed (http://localhost)

     

     

    2、不啟動E:\subversion\bin\svnserve.exe ,但啟動了ApacheSVN ,訪問(tortoiseSVN –> Repo – browser)或提交(SVN Commit)情形如下:

    現(xiàn)象:svn://localhost/svn/repos 不能訪問或提交,提示:Error * Can't connect to host 'localhost': 由于目標(biāo)機(jī)器積極拒絕,無法連接。 但 file:///e:/svn/repos 和 http://localhost/svn/repos 可以訪問或提交。

    原因:svn:// 是獨立服務(wù)器 svnserver 自己的協(xié)議。file:/// 是本地訪問,即服務(wù)器端和客戶端在一個機(jī)器上。

     

     

     

     

    參考資料:
    Subversion 官方網(wǎng)站:Subversion 的官方網(wǎng)站,提供最權(quán)威的介紹和最新的下載。
    Subversion 中文手冊:Subversion 簡體中文官方網(wǎng)站翻譯的中文手冊。
    TortoiseSVN 中文文檔:Subversion 簡體中文官方網(wǎng)站翻譯的 TortoiseSVN 中文文檔。
    我用SVN中文論壇:國內(nèi)人氣非常旺的 SVN 中文交流論壇。
    用Apache和Subversion搭建安全的版本控制環(huán)境》:IBM 工程師寫的基于 Linux 的教程。
    百度百科:由全體網(wǎng)民共同撰寫的百科全書

     

     

    ~ 全文完~

    posted on 2008-01-14 09:38 junky 閱讀(1092) 評論(1)  編輯  收藏 所屬分類: security

    評論

    # re: Windows下架設(shè)Subversion服務(wù)器(轉(zhuǎn)) 2008-11-07 09:10 讀者

    很清晰, 很詳細(xì), 謝謝!  回復(fù)  更多評論   

    主站蜘蛛池模板: 亚洲精品无码高潮喷水A片软| 亚洲国产夜色在线观看| 亚洲AV成人无码久久精品老人 | 成人奭片免费观看| 色吊丝最新永久免费观看网站| 免费一区二区视频| 亚洲精品狼友在线播放| 亚洲理论片中文字幕电影| 亚洲高清一区二区三区电影| 一级看片免费视频| 在线日本高清免费不卡| 好男人视频在线观看免费看片| 免费在线不卡视频| 久久久久亚洲AV成人无码| 99亚偷拍自图区亚洲| 特a级免费高清黄色片| 久久免费的精品国产V∧| 成人免费在线观看网站| 亚洲精品综合久久| 亚洲理论在线观看| 日本高清不卡中文字幕免费| 四虎影视成人永久免费观看视频 | caoporn成人免费公开| 最近免费最新高清中文字幕韩国| 在线a毛片免费视频观看| 亚洲色成人网站WWW永久| 亚洲jizzjizz在线播放久| 成年大片免费视频播放一级| 67pao强力打造高清免费| 亚洲欧洲精品成人久久曰影片| 亚洲最大成人网色| 免费精品国产自产拍在线观看| 久久国产免费观看精品3| 国产一区在线观看免费| 久久精品国产亚洲AV无码娇色| 女bbbbxxxx另类亚洲| 2019中文字幕免费电影在线播放| 一区二区三区亚洲视频| 亚洲婷婷综合色高清在线| 一区二区在线视频免费观看| 一个人在线观看视频免费|