導航:首頁 > IDC知識 > svn同步到伺服器

svn同步到伺服器

發布時間:2020-12-29 21:01:01

1、svn伺服器的代碼可以同步到伺服器嗎

開發過程中,需要經常將SVN伺服器上的代碼同步到測試伺服器上,一般做法,需要人工手工更新,這樣很浪費工夫。下面的腳本為svn server的鉤子程序,放在svn伺服器上,只要代碼更新,就會自動提交的測試伺服器上。

使用條件:

1、SVN主機是WIN系統,如果要在LINUX的SVN主機上用,需要修改下面的代碼為sh腳本,道理類似,代碼不同。有需要的自行更改吧。

2、SVN主機上需要安裝完整版的PUTTY安裝包,而不是一個EXE.

3、測試伺服器可以用putty登錄

@echo off

setlocal enableDelayedExpansion

rem 本腳本實現將SVN伺服器A(win環境)上提交的代碼,自動上傳(通過pscp)到測試環境的伺服器B(linux)上,如果SVN在LINUX環境下,根據本代碼自行調整。


rem svn伺服器上版本庫地址

set reposLoc=%1

set REV=%2


rem ---------------------------------------------------------------------- 配置開始

rem svn伺服器上putty的路徑

set puttyPath="D:Program Files (x86)PuTTY"


rem 測試環境putty登錄的用戶名

set username=root


rem 測試環境putty登錄的密碼

set password=password


rem 測試環境IP

set host=10.1.1.1


rem 測試環境代碼根地址

set remoteRootPath=/var/www/htdocs/test


rem ---------------------------------------------------------------------- 配置結束


cd /d %puttyPath%


rem 遍歷提交了的代碼

for /f "tokens=2 delims= " %%i in ('svnlook changed %reposLoc%') do (


set "var=%%i"


svnlook cat !reposLoc! !var! > temp.txt


rem 替掉路徑中的trunk

set newPath=!var:trunk=!


rem 通過pscp提交到測試伺服器

echo y | pscp -l  !username! -pw !password! temp.txt !host!:!remoteRootPath!!newPath!

)

使用方法:

將上面的代碼中配置區的變數修改,並將內容保存成bat文件,命名為post-commit.bat,放在SVN伺服器上版本庫的hooks目錄下。提交代碼試試看吧。經測試可行。

當然,這個腳本可以再做的牛比點兒,可以針對某個用戶的提交做更新,也可以分析SVN提交時的日誌,只有當日誌中有特定的字元時更新。

另外,由於上面的腳本,只更新當前的提交,所以假設只針對某個用戶的提交做更新時,不能只更新當前提交,這樣其它用戶的提交就落掉了,需要更新整個工程。


2、svn怎麼把數據同步到多台伺服器上

如果是想實時同步,也就是說每次commit就自動同步到各伺服器,就編輯SVN伺服器上的post-commit鉤子,回通過這個鉤子實現;
如果是非答實時同步,比如定時在某個時間點將最新版傳過去,或者在需要時將最新版傳過去,那就隨便弄了,操作系統的定時任務都可以。

3、SVN 文件同步到伺服器問題

你需要更加詳細的描述這幾個伺服器之間的關系,那才好判斷問題出在內哪裡。

從你現在描述容的信息來看,似乎是相互矛盾的,你描述的這個系統是沒法正常工作的。

一般來說,架構和流程會是這樣的,SVN伺服器會通過post-commit鉤子,自動將更新後的文件部署到測試伺服器,在測試伺服器上測試通過沒有問題後,將當前版本再部署到主伺服器上對外發布(這一步一般不會是SVN自動執行的,應該是由另一個工具來發起的)。

詳細描述以下問題吧:
1、測試伺服器、主伺服器分別是做什麼用的?
2、你測試伺服器和主伺服器之間SVN是用什麼機制同步的?
3、主伺服器除了從測試伺服器同步數據過來之外,還有沒有其他方式會修改上面的文件?

4、每次要用SVN更新項目 都需要手動跟伺服器的同步一下 能不能設置成自動同步的啊?

你的SVN更新項目、手動跟伺服器同步分別指的是什麼?
你所說的更新項目是指update嗎?如版果是這個的話,那肯權定是要手動操作的,雖然理論上你可以做個定時任務,沒隔幾分鍾命令行方式執行update一次,但由於update時可能會報告沖突,這種自動執行update很可能讓你遺漏了沖突,得不償失。

5、如何把測試伺服器上的代碼通過svn同步到正式伺服器上?

您好,最簡單的辦法,將SVN伺服器和測試伺服器架設在同一台主機上,然後編輯版SVN的post-commit鉤子腳本,權這個鉤子是在每次成功commit後由SVN伺服器自動調用執行的,存放在SVN伺服器上該版本庫的hooks文件夾下,編輯這個腳本,調用svn的checkout或者update,在SVN伺服器主機上得到一個最新版的SVN客戶端文件夾,接著通過這個腳本調用編譯、部署指令,部署到測試伺服器指定的文件夾,這就ok了。這樣每次commit後就會自動發布一個新的測試版到測試伺服器上。
當然了,也可以用操作系統的定時任務來做這個,來定時發布新測試版。

6、兩個SVN伺服器同步怎麼操作

svn自帶了svnsync同步機來制,但不確定能否滿足源你們的使用要求。因為svnsync的同步,只能實現源伺服器向目標伺服器的單向同步,也就是說對目標伺服器上的內容,只能進行update操作,而不能進行commit操作。

如果你們只是想把總部伺服器上的數據取過來,而不用修改後傳回總部伺服器,那麼用svnsync就可以 了;若還想傳回去,那就要另想辦法了。

關於svnsync的同步設置,網上搜索一下吧,不是一兩句話能說清的。

7、如何使用SVN同步文件到測試伺服器

您好,最簡單的辦法,將SVN伺服器和測試伺服器架設在同一台主機上,然後編輯回SVN的post-commit鉤子腳本,這答個鉤子是在每次成功commit後由SVN伺服器自動調用執行的,存放在SVN伺服器上該版本庫的hooks文件夾下,編輯這個腳本,調用svn的checkout或者update,在SVN伺服器主機上得到一個最新版的SVN客戶端文件夾,接著通過這個腳本調用編譯、部署指令,部署到測試伺服器指定的文件夾,這就ok了。這樣每次commit後就會自動發布一個新的測試版到測試伺服器上。

8、怎麼把本地文件通過svn上傳到伺服器

1、首先,從SVN上檢出伺服器的文件目錄,打開要放置新文件的目錄,然後將本地新建的文件復制過去。

2、SVN目錄中新增的文件會顯示特殊標識,表示這個文件還沒有進行登記。

3、使用加入功能將新增的文件進行登記。

4、新增的文件登記後還未上傳至SVN伺服器,所以包含這個新文件的各層文件夾都會被標識紅色感嘆號以作提醒。

5、提交新增的文件才能將本地修改上傳至SVN伺服器,選擇任意層的文件夾都可以進行提交。

6、提交時可以對本次修改內容進行描述。

9、怎樣通過SVN自動更新代碼到伺服器

把下面代碼添加了svn/hooks/post-commit里(替換部分路徑)。當有svn提交,系統發現提交的代碼涉及相關目錄,就會通過rsync把代碼同步到web伺服器。不過這里還需要做一個rsync免輸密碼的設置。

#!/bin/sh
lines="$(cd /projects && svn up | wc -l)"
if [ $lines -gt 1 ]
then
cd /projects && rsync -rv * [email protected]:/var/www/
fi

與svn同步到伺服器相關的知識