Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537 Warning: error_log(/data/www/wwwroot/hmttv.cn/caches/error_log.php): failed to open stream: Permission denied in /data/www/wwwroot/hmttv.cn/phpcms/libs/functions/global.func.php on line 537
言
Q:咳咳,為啥會用到Coding的SVN?
A:博主電腦上已經配好一個coding的賬號,且是全局的。網上搜索一臺電腦上配置兩個git賬號都是采用非全區的賬號的方法。這個coding是博主的第二個coding賬號,全局的賬號不想動他。于是嘗試下Coding的SVN服務。
食用方式
在項目的倉庫設置>開啟SVN服務,藍后去下載小烏龜TortoiseSVN。不要點擊下面這個,這個是服務器端的。一開始不清楚,踩一個坑
不要下載這個!!
去下載小烏龜tortoisesvn.net/downloads.html
安裝
打開這個,SVN輸入地址(Coding上有)
輸入Coding賬號
登錄后就可以看到倉庫內容了。
藍后直接把需要部署的代碼移進去
后續
想覆蓋文件,報錯。
想刪除文件,報錯。
由于SVN不是很會用,這兩個坑踩的我一臉懵逼。讓后腦子終于開竅,想到了更好的解決小號coding代碼推送的方法。于是棄用SVN了233333~
關注關注求關注
ortoiseSVN 是 Subversion 版本控制系統的一個免費開源客戶端,可以超越時間的管理文件和目錄。文件保存在中央版本庫,除了能記住文件和目錄的每次修改以外,版本庫非常像普通的文件服務器。你可以將文件恢復到過去的版本,并且可以通過檢查歷史知道數據做了哪些修改,誰做的修改。
首先安裝SVN客戶端,windows一般選擇烏龜客戶端:https://tortoisesvn.net/downloads.html。 根據系統位數選擇相應客戶端進行安裝。
假如項目已經在服務器的倉庫里,那么現在你要做的就是把它檢出到本地。 首先創建一個空文件夾,用來存放項目源代碼。在空文件夾內右鍵,選擇SVN檢出(SVN Checkout ...)菜單項。
在Checkout界面,填入項目的版本庫地址,選擇確定。
此時會彈出一個對話框讓你輸入賬號密碼,輸入你的賬號密碼即可。記得勾選保存認證,不然每次操作都會讓你輸入。
此時在指定的目錄下就能看到checkout下來的項目代碼了。
SVN的修訂號是怎么回事?
svn commit 操作可以作為一個原子事務操作發布任意數量文件和目錄的修改。在你的工作副本中,你可以改變文件內容,創建、刪除、改名和復制文件和目錄,然后作為一個整體提交。
在版本庫中,每次提交被當作一次原子事務操作:要么所有的改變發生,要么都不發生,Subversion 努力保持原子性以應對程序錯誤、系統錯誤、網絡問題和其他用戶行為。每當版本庫接受了一個提交,文件系統進入了一個新的狀態,叫做版本,每個版本被賦予一個獨一無二的自然數,一個比一個大,初始修訂號是 0,只創建了一個空目錄,沒有任何內容。
可以形象的把版本庫(Repository)看作一系列樹,想象有一組版本號,從 0 開始,從左到右,每一個修訂號有一個目錄樹掛在它下面,每一個樹好像是一次提交后的版本庫“快照”。
不像其它版本控制系統,Subversion 的版本號是針對整個目錄樹的,而不是單個文件。每一個版本號代表了一次提交后版本庫整個目錄樹的特定狀態,另一種理解是版本 N 代表版本庫已經經過了 N 次提交。
如何查看SVN上當前代碼庫的最新版本號是多少?
打開右鍵菜單中的show log,然后看到一系列版本更新歷史,最上面的那一行,即是最新版本號,所謂的head revision。
如何查看本地SVN管理的代碼庫的當前版本號是多少?
打開右鍵菜單中的show log,然后看到一系列版本更新歷史,顯示為粗體的那一行即你本地當前的版本。
如何將本地代碼庫的版本回退到某一個舊版本?
打開右鍵菜單中的update to revision 在彈出的對話框中進行版本號指定即可,如果選擇head revision則更新為最新版本。
如果你更新了目錄中的文件,提交代碼需要用到commit功能,commit的功能不僅僅是上傳,他會和服務器上面的文件進行對比,假如你更新了某個文件而服務器上面也有人更新了這個文件,并且是在你checkout之后做的更新,那么它會嘗試將你的更新和他人的更新進行融合(merge),假如自動merge不成功,那么報告conflict,你必須自己來手動merge,也就是把你的更新和別人的更新無沖突的寫在一起。
commit的時候,最好填寫Log信息,這樣保證別人可以看到你的更新究竟做了寫什么。這就相當于上傳文件并且說明自己做了那些修改,多人合作的時候log非常重要。
TortoiseSVN的commit只會上傳原先checkout然后又被修改了的文件,假如你新加入了某些文件,需要右鍵點擊文件選擇Add,然后文件上面會出現一個加號,在下次commit的時候它就會被upload并且被標記為綠色對勾。沒有綠色對勾的文件不會被commit。
TortoiseSVN圖標不能顯示的解決方案?
右鍵->TortoiseSVN->setting->Icon Overlays->Status cache->default/Shell,然后重啟電腦。
TortoiseSVN的Settings窗口:
我們在日常使用中,最常用的是更新(SVN Update)和提交(SVN Commit)操作。這兩個步驟務必要非常熟練。
SVN數據與用戶備份
hotcopy 與 dump
Gzip壓縮與xz壓縮
在考慮磁盤空間緊張,內存和CPU資源使用充足,可以使用xz壓縮,壓縮速度慢
在內存和CPU資源使用緊張,不考慮磁盤容量大小,建議使用gzip壓縮,壓縮速度快
每一個月進行全量備份,每隔8個小時進行增量備份
本地備份目錄:/data/Backup/SVN
# 添加組backup
groupadd backup
# 添加用戶cory到組backup
usermod -a -G backup cory
# 更改/data權限
chmod -R 775 /data
# 更改/data/Backup的用戶組backup
chown -R root:backup /data/Backup
將dump出來的文件進行備份
iF.SVNAdmin管理界面備份
此版本只是基礎版本,增量與全量備份未寫在其中,請知悉
#!/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"
將備份在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"
準備文件
Centos 7 安裝 SVN
crontab -e
# 每隔兩天刪除備份文件
# 刪除除當前備份文件(從currentBackup.info讀取)以外的其他壓縮文件
# * * */2 * * cd /data/SVN && ls *.xz | grep -v $(cat currentBackup.info) | xargs rm -rf
sudo sed -i 's/^/#&/g' /etc/httpd/conf.d/welcome.conf
sudo sed -i "s/Options Indexes FollowSymLinks/Options FollowSymLinks/" /etc/httpd/conf/httpd.conf
sudo yum install -y subversion mod_dav_svn
sudo vi /etc/httpd/conf.modules.d/10-subversion.conf
最終內容如下:
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>
創建SVN Repo
sudo mkdir /data/SVN
cd /data/SVN
sudo svnadmin create repos
sudo chown -R apache:apache repos
解壓全量備份包和增量備份包
sudo xz -d -T 0 repos-5083-Full.xz
sudo xz -d -k -T 0 repos-5098-Inc.xz
依次導入解壓出來的備份文件
sudo svnadmin load /data/SVN/repos < repos-5083-Full
sudo svnadmin load /data/SVN/repos < repos-5098-Inc
拷貝備份文件到SVN安裝時的配置文件路徑地址:
# 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/
sudo systemctl start httpd.service
sudo systemctl enable httpd.service
sudo firewall-cmd --zone=public --permanent --add-service=http
sudo firewall-cmd --reload
確認已恢復到到對應Revision:5098
拷貝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/
因為未安裝php相關軟件包,安裝完成,重啟即可
sudo yum install php
sudo systemctl restart httpd
SVN訪問以及IF.Svnadmin管理界面訪問
*請認真填寫需求信息,我們會在24小時內與您取得聯系。