整合營銷服務(wù)商

          電腦端+手機(jī)端+微信端=數(shù)據(jù)同步管理

          免費(fèi)咨詢熱線:

          Coding的SVN服務(wù)踩坑記

          Coding的SVN服務(wù)踩坑記

          Q:咳咳,為啥會(huì)用到Coding的SVN?

          A:博主電腦上已經(jīng)配好一個(gè)coding的賬號(hào),且是全局的。網(wǎng)上搜索一臺(tái)電腦上配置兩個(gè)git賬號(hào)都是采用非全區(qū)的賬號(hào)的方法。這個(gè)coding是博主的第二個(gè)coding賬號(hào),全局的賬號(hào)不想動(dòng)他。于是嘗試下Coding的SVN服務(wù)。

          食用方式

          在項(xiàng)目的倉庫設(shè)置>開啟SVN服務(wù),藍(lán)后去下載小烏龜TortoiseSVN。不要點(diǎn)擊下面這個(gè),這個(gè)是服務(wù)器端的。一開始不清楚,踩一個(gè)坑

          不要下載這個(gè)??!

          去下載小烏龜tortoisesvn.net/downloads.html

          安裝

          打開這個(gè),SVN輸入地址(Coding上有)

          輸入Coding賬號(hào)

          登錄后就可以看到倉庫內(nèi)容了。

          藍(lán)后直接把需要部署的代碼移進(jìn)去

          后續(xù)

          想覆蓋文件,報(bào)錯(cuò)。

          想刪除文件,報(bào)錯(cuò)。

          由于SVN不是很會(huì)用,這兩個(gè)坑踩的我一臉懵逼。讓后腦子終于開竅,想到了更好的解決小號(hào)coding代碼推送的方法。于是棄用SVN了233333~

          關(guān)注關(guān)注求關(guān)注

          ortoiseSVN 是 Subversion 版本控制系統(tǒng)的一個(gè)免費(fèi)開源客戶端,可以超越時(shí)間的管理文件和目錄。文件保存在中央版本庫,除了能記住文件和目錄的每次修改以外,版本庫非常像普通的文件服務(wù)器。你可以將文件恢復(fù)到過去的版本,并且可以通過檢查歷史知道數(shù)據(jù)做了哪些修改,誰做的修改。

          一、安裝SVN客戶端

          首先安裝SVN客戶端,windows一般選擇烏龜客戶端:https://tortoisesvn.net/downloads.html。 根據(jù)系統(tǒng)位數(shù)選擇相應(yīng)客戶端進(jìn)行安裝。

          二、獲取倉庫代碼

          假如項(xiàng)目已經(jīng)在服務(wù)器的倉庫里,那么現(xiàn)在你要做的就是把它檢出到本地。 首先創(chuàng)建一個(gè)空文件夾,用來存放項(xiàng)目源代碼。在空文件夾內(nèi)右鍵,選擇SVN檢出(SVN Checkout ...)菜單項(xiàng)。

          在Checkout界面,填入項(xiàng)目的版本庫地址,選擇確定。

          此時(shí)會(huì)彈出一個(gè)對話框讓你輸入賬號(hào)密碼,輸入你的賬號(hào)密碼即可。記得勾選保存認(rèn)證,不然每次操作都會(huì)讓你輸入。

          此時(shí)在指定的目錄下就能看到checkout下來的項(xiàng)目代碼了。

          SVN的修訂號(hào)是怎么回事?

          svn commit 操作可以作為一個(gè)原子事務(wù)操作發(fā)布任意數(shù)量文件和目錄的修改。在你的工作副本中,你可以改變文件內(nèi)容,創(chuàng)建、刪除、改名和復(fù)制文件和目錄,然后作為一個(gè)整體提交。

          在版本庫中,每次提交被當(dāng)作一次原子事務(wù)操作:要么所有的改變發(fā)生,要么都不發(fā)生,Subversion 努力保持原子性以應(yīng)對程序錯(cuò)誤、系統(tǒng)錯(cuò)誤、網(wǎng)絡(luò)問題和其他用戶行為。每當(dāng)版本庫接受了一個(gè)提交,文件系統(tǒng)進(jìn)入了一個(gè)新的狀態(tài),叫做版本,每個(gè)版本被賦予一個(gè)獨(dú)一無二的自然數(shù),一個(gè)比一個(gè)大,初始修訂號(hào)是 0,只創(chuàng)建了一個(gè)空目錄,沒有任何內(nèi)容。

          可以形象的把版本庫(Repository)看作一系列樹,想象有一組版本號(hào),從 0 開始,從左到右,每一個(gè)修訂號(hào)有一個(gè)目錄樹掛在它下面,每一個(gè)樹好像是一次提交后的版本庫“快照”。

          不像其它版本控制系統(tǒng),Subversion 的版本號(hào)是針對整個(gè)目錄樹的,而不是單個(gè)文件。每一個(gè)版本號(hào)代表了一次提交后版本庫整個(gè)目錄樹的特定狀態(tài),另一種理解是版本 N 代表版本庫已經(jīng)經(jīng)過了 N 次提交。

          如何查看SVN上當(dāng)前代碼庫的最新版本號(hào)是多少?

          打開右鍵菜單中的show log,然后看到一系列版本更新歷史,最上面的那一行,即是最新版本號(hào),所謂的head revision。

          如何查看本地SVN管理的代碼庫的當(dāng)前版本號(hào)是多少?

          打開右鍵菜單中的show log,然后看到一系列版本更新歷史,顯示為粗體的那一行即你本地當(dāng)前的版本。

          如何將本地代碼庫的版本回退到某一個(gè)舊版本?

          打開右鍵菜單中的update to revision 在彈出的對話框中進(jìn)行版本號(hào)指定即可,如果選擇head revision則更新為最新版本。

          三、提交代碼到倉庫

          如果你更新了目錄中的文件,提交代碼需要用到commit功能,commit的功能不僅僅是上傳,他會(huì)和服務(wù)器上面的文件進(jìn)行對比,假如你更新了某個(gè)文件而服務(wù)器上面也有人更新了這個(gè)文件,并且是在你checkout之后做的更新,那么它會(huì)嘗試將你的更新和他人的更新進(jìn)行融合(merge),假如自動(dòng)merge不成功,那么報(bào)告conflict,你必須自己來手動(dòng)merge,也就是把你的更新和別人的更新無沖突的寫在一起。

          commit的時(shí)候,最好填寫Log信息,這樣保證別人可以看到你的更新究竟做了寫什么。這就相當(dāng)于上傳文件并且說明自己做了那些修改,多人合作的時(shí)候log非常重要。

          TortoiseSVN的commit只會(huì)上傳原先checkout然后又被修改了的文件,假如你新加入了某些文件,需要右鍵點(diǎn)擊文件選擇Add,然后文件上面會(huì)出現(xiàn)一個(gè)加號(hào),在下次commit的時(shí)候它就會(huì)被upload并且被標(biāo)記為綠色對勾。沒有綠色對勾的文件不會(huì)被commit。

          TortoiseSVN圖標(biāo)不能顯示的解決方案?

          右鍵->TortoiseSVN->setting->Icon Overlays->Status cache->default/Shell,然后重啟電腦。

          TortoiseSVN的Settings窗口:

          我們在日常使用中,最常用的是更新(SVN Update)和提交(SVN Commit)操作。這兩個(gè)步驟務(wù)必要非常熟練。

          . 現(xiàn)象

          • SVN結(jié)構(gòu)
          • SVN主目錄: /svn/repos
          • SVN配置文件: /svn/etc

          2. 原因分析

          SVN數(shù)據(jù)與用戶備份

          hotcopy 與 dump

          • Hotcopy直接復(fù)制存儲(chǔ)庫。 它速度很快,但它保留了底層文件系統(tǒng)等信息。 導(dǎo)入副本的服務(wù)器需要是相同的版本,具有相同的配置等
          • Dump是版本獨(dú)立的。 這意味著導(dǎo)出的副本可以被任何版本的svn使用

          Gzip壓縮與xz壓縮

          • Gzip壓縮速度快,但是壓縮比例沒有xz高
          • xz壓縮速度慢,但是壓縮比例高

          在考慮磁盤空間緊張,內(nèi)存和CPU資源使用充足,可以使用xz壓縮,壓縮速度慢

          在內(nèi)存和CPU資源使用緊張,不考慮磁盤容量大小,建議使用gzip壓縮,壓縮速度快

          3. 解決方法

          3.1 備份策略

          每一個(gè)月進(jìn)行全量備份,每隔8個(gè)小時(shí)進(jìn)行增量備份

          3.2 備份準(zhǔn)備

          本地備份目錄:/data/Backup/SVN

          • 賦予權(quán)限
          • 將目錄/data以及子目錄對其他用戶添加可讀、可執(zhí)行的權(quán)限
          • 目錄/data/Backup以及子目錄添加對組backup可讀、可寫、可執(zhí)行的權(quán)限
          # 添加組backup
          groupadd backup
          # 添加用戶cory到組backup
          usermod -a -G backup cory
          # 更改/data權(quán)限
          chmod -R 775 /data
          # 更改/data/Backup的用戶組backup
          chown -R root:backup /data/Backup

          3.3 備份內(nèi)容

          • 數(shù)據(jù)備份

          將dump出來的文件進(jìn)行備份

          • 配置文件備份
          • 認(rèn)證文件、權(quán)限文件備份
          • SVNAdmin備份

          iF.SVNAdmin管理界面?zhèn)浞?/p>

          3.4 備份腳本

          此版本只是基礎(chǔ)版本,增量與全量備份未寫在其中,請知悉

          #!/usr/bin/env bash
          # TODO: Bup備份
          # TODO: 其他備份目錄
          # TODO: 軟編碼 IP 等
          # TODO: 定期刪除
          # TODO: 模塊編碼
          # TODO: 增量備份與全量備份
          set -e
          password=$1
          repo_dir="/svn/repos"
          backup_dir="/data/Backup/SVN"
          svnadmin="/usr/bin/svnadmin"
          svnlook="/usr/bin/svnlook"
          name=$(basename "$repo_dir")
          revision=$($svnlook youngest "$repo_dir")
          target="$backup_dir/$name-$revision.xz"
          echo "$name-$revision.xz" > $backup_dir/currentBackup.info
          
          if [ ! -e "$target" ]; then
              rm -f "$backup_dir/$name"-*.xz
              # nice $svnadmin dump -r $((revision_full + 1)):${latest_revision} --incremental --deltas --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target"
              # nice $svnadmin dump --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target"
              nice $svnadmin dump --deltas --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target"
          fi
          
          # sync data
          sshpass -p "${password}" rsync -arvP -e "ssh -p 22222" $backup_dir/currentBackup.info sailingadmin@192.168.10.11:/data/SVN/
          # sync data
          sshpass -p "${password}" rsync -arvP -e "ssh -p 22222" "$target" sailingadmin@192.168.10.11:/data/SVN/
          # sync etc
          sshpass -p "${password}" rsync -arvP -e "ssh -p 22222" /svn/etc sailingadmin@192.168.10.11:/data/SVN/
          # sync svnadmin
          sshpass -p "${password}" rsync -arvP -e "ssh -p 22222" /var/www/html/svnadmin sailingadmin@192.168.10.11:/data/SVN/
          # delete
          rm -rf $backup_dir/currentBackup.info
          rm -rf "$target"

          3.5 定期刪除備份文件

          將備份在192.168.10.11目錄的過期文件定期刪除

          通過Linux Crontab或者Jenkins都可以,如Crontab

          #!/usr/bin/env bash
          # TODO: Bup備份
          # TODO: 其他備份目錄
          # TODO: 軟編碼 IP 等
          # TODO: 定期刪除
          set -e
          password=$1
          repo_dir="/svn/repos"
          backup_dir="/data/Backup/SVN"
          svnadmin="/usr/bin/svnadmin"
          svnlook="/usr/bin/svnlook"
          name=$(basename "$repo_dir")
          revision=$($svnlook youngest "$repo_dir")
          target="$backup_dir/$name-$revision.xz"
          echo "$name-$revision.xz" > $backup_dir/currentBackup.info
          
          if [ ! -e "$target" ]; then
              rm -f "$backup_dir/$name"-*.xz
              # nice $svnadmin dump -r $((revision_full + 1)):${latest_revision} --incremental --deltas --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target"
              # nice $svnadmin dump --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target"
              nice $svnadmin dump --deltas --quiet "$repo_dir" | xz -T 0 --compress --stdout -9 --extreme > "$target"
          fi
          
          # sync data
          sshpass -p "${password}" rsync -arvP -e "ssh -p 22222" $backup_dir/currentBackup.info sailingadmin@192.168.10.11:/data/SVN/
          # sync data
          sshpass -p "${password}" rsync -arvP -e "ssh -p 22222" "$target" sailingadmin@192.168.10.11:/data/SVN/
          # sync etc
          sshpass -p "${password}" rsync -arvP -e "ssh -p 22222" /svn/etc sailingadmin@192.168.10.11:/data/SVN/
          # sync svnadmin
          sshpass -p "${password}" rsync -arvP -e "ssh -p 22222" /var/www/html/svnadmin sailingadmin@192.168.10.11:/data/SVN/
          # delete
          rm -rf $backup_dir/currentBackup.info
          rm -rf "$target"

          3.6 還原

          準(zhǔn)備文件

          • 全量備份文件:repos-5083-Full.xz
          • 增量備份文件:repos-5098-Inc.xz
          • 其他其他備份文件:etc配置權(quán)限文件、svnadmin界面文件

          1) SVN安裝

          Centos 7 安裝 SVN

          • Apache安裝
          crontab -e
          # 每隔兩天刪除備份文件
          # 刪除除當(dāng)前備份文件(從currentBackup.info讀取)以外的其他壓縮文件
          # * * */2 * * cd /data/SVN && ls *.xz | grep -v $(cat currentBackup.info) | xargs rm -rf
          • 去除apache默認(rèn)歡迎界面
          sudo sed -i 's/^/#&/g' /etc/httpd/conf.d/welcome.conf
          • 阻止顯示/var/www/html目錄
          sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.conf
          • 安裝SVN和mod_dav_svn模塊
          sudo yum install -y subversion mod_dav_svn

          2) SVN配置

          • 更改配置文件
          sudo vi /etc/httpd/conf.modules.d/10-subversion.conf

          最終內(nèi)容如下:

          LoadModule dav_svn_module modules/mod_dav_svn.so
          LoadModule authz_svn_module modules/mod_authz_svn.so
          LoadModule dontdothat_module modules/mod_dontdothat.so
          <Location /svn>
          DAV svn
          SVNParentPath /data/SVN
          AuthName "SVN Repos"
          AuthType Basic
          AuthUserFile /etc/svn/svn-auth
          AuthzSVNAccessFile /etc/svn/authz
          Require valid-user
          </Location>
          創(chuàng)建SVN Repo
          sudo mkdir /data/SVN
          cd /data/SVN
          sudo svnadmin create repos
          sudo chown -R apache:apache repos

          3) 還原Restore

          解壓全量備份包和增量備份包

          sudo xz -d -T 0 repos-5083-Full.xz
          sudo xz -d -k -T 0 repos-5098-Inc.xz

          依次導(dǎo)入解壓出來的備份文件

          sudo svnadmin load /data/SVN/repos < repos-5083-Full
          sudo svnadmin load /data/SVN/repos < repos-5098-Inc

          4)還原權(quán)限文件

          拷貝備份文件到SVN安裝時(shí)的配置文件路徑地址:

          # AuthUserFile /etc/svn/svn-auth
          # AuthzSVNAccessFile /etc/svn/authz
          
          sudo /etc/svn
          sudo cp /data/etc/svn/authz /etc/svn/
          sudo cp /data/etc/svn/svn-auth /etc/svn/
          sudo chown -R root:apache /etc/svn/
          sudo chmod -R 670 /etc/svn/

          5) 開啟apache并修改防火墻

          sudo systemctl start httpd.service
          sudo systemctl enable httpd.service
          sudo firewall-cmd --zone=public --permanent --add-service=http
          sudo firewall-cmd --reload

          確認(rèn)已恢復(fù)到到對應(yīng)Revision:5098

          6) iF.SVNAdmin管理界面還原

          拷貝svnadmin備份文件到/var/www/html中

          sudo cp -rf /data/svnadmin /var/www/html/
          sudo chmod -R 777 /var/www/html/svnadmin/data/
          sudo chown -R apache:apache /var/www/html/svnadmin/

          因?yàn)槲窗惭bphp相關(guān)軟件包,安裝完成,重啟即可

          sudo yum install php
          sudo systemctl restart httpd

          3.7 驗(yàn)證

          1)訪問驗(yàn)證

          SVN訪問以及IF.Svnadmin管理界面訪問

          2)權(quán)限驗(yàn)證

          3)節(jié)點(diǎn)Revision還原驗(yàn)證


          主站蜘蛛池模板: 久久精品国产一区二区三区肥胖| 亚洲丰满熟女一区二区v| 在线观看视频一区二区| 亚洲sm另类一区二区三区| 韩国福利影视一区二区三区| 人妻久久久一区二区三区| 深田咏美AV一区二区三区| 国产精品伦子一区二区三区| 99偷拍视频精品一区二区| 国产情侣一区二区三区| 日韩一区二区超清视频| 成人国产精品一区二区网站| 久久国产精品一区二区| 国产精品亚洲专区一区| 一区二区在线电影| 国产精品乱码一区二区三区 | 国产日韩精品一区二区在线观看播放 | 在线视频一区二区三区| 欧洲精品免费一区二区三区| 天堂资源中文最新版在线一区| 国产成人一区二区三区免费视频| 国产午夜三级一区二区三| 国产中的精品一区的| 亚洲高清毛片一区二区| 无码一区二区三区视频| 久久一区二区三区99| 亚洲av午夜精品一区二区三区| 无码精品尤物一区二区三区| 亚洲成AV人片一区二区密柚| 无人码一区二区三区视频| 国产精品一区二区三区99| 四虎永久在线精品免费一区二区| 国内精品视频一区二区三区 | 精品国产免费一区二区| 无码人妻精品一区二区蜜桃| 亚洲日本一区二区三区在线不卡 | 国产精品亚洲高清一区二区| 国产在线视频一区二区三区| 亚洲AV无码一区二区三区国产 | 亚洲午夜在线一区| 亚洲一区二区三区国产精华液|