本文目錄一覽:
- 1、如何在mac使用終端更新svn
- 2、用PHP執行SVN update命令為什麼執行不成功
- 3、PHP執行linux系統命令的常用函數使用說明
- 4、SVN常用命令及例句
- 5、PHP運行SVN命令顯示某用戶的文件更新記錄代碼
如何在mac使用終端更新svn
mac 終端 svn 命令
1、將文件checkout到本地目錄
svn checkout path(path是服務器上的目錄)
例如:svn checkout svn://192.168.1.1/pro/domain
簡寫:svn co
2、往版本庫中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加當前目錄下所有的php文件)
3、將改動的文件提交到版本庫
svn commit -m “LogMessage” [-N] [–no-unlock] PATH(如果選擇了保持鎖,就使用–no-unlock開關)
例如:svn commit -m “add test file for my test” test.php
簡寫:svn ci
4、加鎖/解鎖
svn lock -m “LockMessage” [–force] PATH
例如:svn lock -m “lock test file” test.php
svn unlock PATH
5、更新到某個版本
svn update -r m path
例如:
svn update如果後面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本。
svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
svn update test.php(更新,於版本庫同步。如果在提交的時候提示過期的話,是因為衝突,需要先update,修改文件,然後清除svn resolved,最後再提交commit)
簡寫:svn up
6、查看文件或者目錄狀態
1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示)
【?:不在svn的控制中;M:內容被修改;C:發生衝突;A:預定加入到版本庫;K:被鎖定】
2)svn status -v path(顯示文件和子目錄狀態)
第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最後一次修改的版本號和修改人。
註:svn status、svn diff和 svn revert這三條命令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
簡寫:svn st
7、刪除文件
svn delete path -m “delete test fle”
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 然後再svn ci -m ‘delete test file‘,推薦使用這種
簡寫:svn (del, remove, rm)
8、查看日誌
svn log path
例如:svn log test.php 顯示這個文件的所有修改記錄,及其版本號的變化
9、查看文件詳細信息
svn info path
例如:svn info test.php
10、比較差異
svn diff path(將修改的文件與基礎版本比較)
例如:svn diff test.php
svn diff -r m:n path(對版本m和版本n比較差異)
例如:svn diff -r 200:201 test.php
簡寫:svn di
11、將兩個版本之間的差異合併到當前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合併到當前文件,但是一般都會產生衝突,需要處理一下)
12、SVN 幫助
svn help
svn help ci
——————————————————————————
以上是常用命令,下面寫幾個不經常用的
——————————————————————————
13、版本庫下的文件和目錄列表
svn list path
顯示path目錄下的所有屬於版本庫的文件和目錄
簡寫:svn ls
14、創建納入版本控制下的新目錄
svn mkdir: 創建納入版本控制下的新目錄。
用法: 1、mkdir PATH…
2、mkdir URL…
創建版本控制的目錄。
1、每一個以工作副本 PATH 指定的目錄,都會創建在本地端,並且加入新增
調度,以待下一次的提交。
2、每個以URL指定的目錄,都會透過立即提交於倉庫中創建。
在這兩個情況下,所有的中間目錄都必須事先存在。
15、恢複本地修改
svn revert: 恢復原始未改變的工作副本文件 (恢復大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不會存取網絡,並且會解除衝突的狀況。但是它不會恢復
被刪除的目錄
16、代碼庫URL變更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH…]
1、更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會將
服務器上文件與本地文件合併。這是將工作副本對應到同一倉庫中某個分支或者標記的
方法。
2、改寫工作副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變動
(比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用
這個命令更新工作副本與倉庫的對應關係。
17、解決衝突
svn resolved: 移除工作副本的目錄或文件的“衝突”狀態。
用法: resolved PATH…
注意: 本子命令不會依語法來解決衝突或是移除衝突標記;它只是移除衝突的
相關文件,然後讓 PATH 可以再次提交。
18、輸出指定文件或URL的內容。
svn cat 目標[@版本]…如果指定了版本,將從指定的版本開始查找。
svn cat -r PREV filename filename (PREV 是上一版本,也可以寫具體版本號,這樣輸出結果是可以提交的)
用PHP執行SVN update命令為什麼執行不成功
猜測是兩個原因
第一:PHP執行權限不夠
測試方法:先在命令行執行 /*****/php.exe ****************************
如果不能執行,說明是php的問題
如果能執行
說明是www用戶的權限問題
第二:svn環境變量問題
PHP執行linux系統命令的常用函數使用說明
system函數
說明:執行外部程序並顯示輸出資料。
語法:string
system(string
command,
int
[return_var]);
返回值:
字符串
詳細介紹:
本函數就像是
C
語中的函數
system(),用來執行指令,並輸出結果。若是
return_var
參數存在,則執行
command
之後的狀態會填入
return_var
中。同樣值得注意的是若需要處理用戶輸入的資料,而又要防止用戶耍花招破解系統,則可以使用
EscapeShellCmd()。若
PHP
以模塊式的執行,本函數會在每一行輸出後自動更新
Web
服務器的輸出緩衝暫存區。若需要完整的返回字符串,且不想經過不必要的其它中間的輸出界面,可以使用
PassThru()。
實例代碼:
複製代碼
代碼如下:
?php
$last_line
=
system(‘ls’,
$retval);
echo
‘Last
line
of
the
output:
‘
.
$last_line;
echo
‘hr
/Return
value:
‘
.
$retval;
?
exec函數
說明:執行外部程序。
語法:string
exec(string
command,
string
[array],
int
[return_var]);
返回值:
字符串
詳細介紹:
本函數執行輸入
command
的外部程序或外部指令。它的返回字符串只是外部程序執行後返回的最後一行;若需要完整的返回字符串,可以使用
PassThru()
這個函數。
要是參數
array
存在,command
會將
array
加到參數中執行,若不欲
array
被處理,可以在執行
exec()
之前呼叫
unset()。若是
return_var
跟
array
二個參數都存在,則執行
command
之後的狀態會填入
return_var
中。
值得注意的是若需要處理使用者輸入的資料,而又要防止使用者耍花招破解系統,則可以使用
EscapeShellCmd()。
實例代碼:
複製代碼
代碼如下:
?php
echo
exec(‘whoami’);
?
popen函數
說明:打開文件。
語法:int
popen(string
command,
string
mode);
返回值:
整數
詳細介紹:
本函數執行指令開檔,而該文件是用管道方式處理的文件。用本函數打開的文件只能是單向的
(只能讀或只能寫),而且一定要用
pclose()
關閉。在文件操作上可使用
fgets()、fgetss()
與
fputs()。若是開檔發生錯誤,返回
false
值。
實例代碼:
複製代碼
代碼如下:
?
$fp
=
popen(“/bin/ls”,”r”
);
?
PHP監控linux服務器負載
在實際項目的應用中,我們由於各種條件的現實,利用PHP來實現服務器負載監控將是一種更為靈活的方式。
由於Web
Server以及PHP的實現方式所限,我們在現實環境中很難利用PHP去調用一些Linux中需要root權限才能執行的程序,對此,我從網上找到另外一種方式來繞開這個限制。首先先寫個c程序中轉調用系統命令,然後用PHP去執行此c程序。
c程序
首先寫個c文件,比如/usr/local/ismole/w.c
複製代碼
代碼如下:
#includestdio.h
#includestdlib.h
#includesystypes.h
#includeunistd.h
int
main()
{
uid_t
uid
,euid;
//note
獲得當前的uid
uid
=
getuid();
//note
獲得當前euid
euid
=
geteuid();
//note
交換這兩個id
if(setreuid(euid,
uid))
perror(“setreuid”);
//note
執行將要執行linux系統命令
system(“/usr/bin/w”);
return0;
}
編譯該文件gcc
-o
w
-Wall
w.c,這時會在當前目錄下生成程序w。改變此程序的屬主chmod
u+s
./w。
PHP執行
文件內容如下,放在web目錄下,訪問就會輸出當前的服務器負載情況。
複製代碼
代碼如下:
?php
/*
More
Original
PHP
Framwork
Copyright
(c)
2007
–
2008
IsMole
Inc.
$Id:
serverMonitor.php
408
2008-12-02
08:07:40Z
kimi
$
*/
//note
key的驗證過程
if($key
!=
$authkey)
{
//
exit(‘key
error);
}
$last_line
=
exec(‘/usr/local/ismole/w’,
$retval);
$returnArray
=
explode(“load
average:
“,
$retval[0]);
$returnString
=
$returnArray[1];
echo
$returnString;
按照上面的實例,我們可以用PHP來做任何我們想執行的Linux系統命令,SVN更新,服務器監控,備份,恢復,日常維護等等。
SVN常用命令及例句
1、Linux命令行下將文件checkout到本地目錄
svn checkout path(path是服務器上的目錄)
例如:svn checkout svn://192.168.1.1/pro/domain
簡寫:svn co
2、Linux命令行下往版本庫中添加新的文件
svn add file
例如:svn add test.php(添加test.php)
svn add *.php(添加當前目錄下所有的php文件)
3、Linux命令行下將改動的文件提交到版本庫
svn commit -m “LogMessage“ [-N] [–no-unlock] PATH(如果選擇了保持鎖,就使用–no-unlock開關)
例如:svn commit -m “add test file for my test“ test.php
簡寫:svn ci
4、Linux命令行下的加鎖/解鎖
svn lock -m “LockMessage“ [–force] PATH
例如:svn lock -m “lock test file“ test.php
svn unlock PATH
5、Linux命令行下更新到某個版本
svn update -r m path
例如:
svn update如果後面沒有目錄,默認將當前目錄以及子目錄下的所有文件都更新到最新版本。
svn update -r 200 test.php(將版本庫中的文件test.php還原到版本200)
svn update test.php(更新,於版本庫同步。如果在提交的時候提示過期的話,是因為衝突,需要先update,修改文件,然後清除svn resolved,最後再提交commit)
簡寫:svn up
6、Linux命令行下查看文件或者目錄狀態
1)svn status path(目錄下的文件和子目錄的狀態,正常狀態不顯示)
【?:不在svn的控制中;M:內容被修改;C:發生衝突;A:預定加入到版本庫;K:被鎖定】
2)svn status -v path(顯示文件和子目錄狀態)
第一列保持相同,第二列顯示工作版本號,第三和第四列顯示最後一次修改的版本號和修改人。
註:svn status、svn diff和 svn revert這三條命令在沒有網絡的情況下也可以執行的,原因是svn在本地的.svn中保留了本地版本的原始拷貝。
簡寫:svn st
7、Linux命令行下刪除文件
svn delete path -m “delete test fle“
例如:svn delete svn://192.168.1.1/pro/domain/test.php -m “delete test file”
或者直接svn delete test.php 然後再svn ci -m ‘delete test file‘,推薦使用這種
簡寫:svn (del, remove, rm)
8、Linux命令行下查看日誌
svn log path
例如:svn log test.php 顯示這個文件的所有修改記錄,及其版本號的變化
9、Linux命令行下查看文件詳細信息
svn info path
例如:svn info test.php
10、Linux命令行下比較差異
svn diff path(將修改的文件與基礎版本比較)
例如:svn diff test.php
svn diff -r m:n path(對版本m和版本n比較差異)
例如:svn diff -r 200:201 test.php
簡寫:svn di
11、Linux命令行下將兩個版本之間的差異合併到當前文件
svn merge -r m:n path
例如:svn merge -r 200:205 test.php(將版本200與205之間的差異合併到當前文件,但是一般都會產生衝突,需要處理一下)
12、Linux命令行下SVN 幫助
svn help
svn help ci
以上是常用命令,下面寫幾個不經常用的
13、Linux命令行下版本庫下的文件和目錄列表
svn list path
顯示path目錄下的所有屬於版本庫的文件和目錄
簡寫:svn ls
14、Linux命令行下創建納入版本控制下的新目錄
svn mkdir: 創建納入版本控制下的新目錄。
用法: 1、mkdir PATH…
2、mkdir URL…
創建版本控制的目錄。
1、每一個以工作副本 PATH 指定的目錄,都會創建在本地端,並且加入新增調度,以待下一次的提交。
2、每個以URL指定的目錄,都會透過立即提交於倉庫中創建.在這兩個情況下,所有的中間目錄都必須事先存在。
15、Linux命令行下恢複本地修改
svn revert: 恢復原始未改變的工作副本文件 (恢復大部份的本地修改)。revert:
用法: revert PATH…
注意: 本子命令不會存取網絡,並且會解除衝突的狀況。但是它不會恢復被刪除的目錄
16、Linux命令行下代碼庫URL變更
svn switch (sw): 更新工作副本至不同的URL。
用法: 1、switch URL [PATH]
2、switch –relocate FROM TO [PATH…]
1、更新你的工作副本,映射到一個新的URL,其行為跟“svn update”很像,也會將服務器上文件與本地文件合併。這是將工作副本對應到同一倉庫中某個分支或者標記的方法。
2、改寫工作副本的URL元數據,以反映單純的URL上的改變。當倉庫的根URL變動(比如方案名或是主機名稱變動),但是工作副本仍舊對映到同一倉庫的同一目錄時使用這個命令更新工作副本與倉庫的對應關係。
17、Linux命令行下解決衝突
svn resolved: 移除工作副本的目錄或文件的“衝突”狀態。
用法: resolved PATH…
注意: 本子命令不會依語法來解決衝突或是移除衝突標記;它只是移除衝突的相關文件,然後讓 PATH 可以再次提交。
18、Linux命令行下輸出指定文件或URL的內容。
svn cat 目標[@版本]…如果指定了版本,將從指定的版本開始查找。
svn cat -r PREV filename filename (PREV 是上一版本,也可以寫具體版本號,這樣輸出結果是可以提交的)
以上是Linux命令行下常用svn命令的使用方法。
PHP運行SVN命令顯示某用戶的文件更新記錄代碼
使用SVN開發者們平時開發或代碼上線過程中需要知道某個時間段內修改或添加過那些文件,所以用PHP寫了個小程序,直接在瀏覽器中調用即可
代碼如下:
?php
$user=trim($_GET[‘user’]);
$d=$_GET[‘date’];
if(!$d){
$d=date(‘Ymd’,time()-86400*14);
}
if(empty($user)){
echo
“例如:svn_log.php?user=wangdate=20130118”;
exit;
}
$cmd=’/usr/bin/svn
log
-v
-r
{‘.$d.’}:”HEAD”
–username
用戶名
–password
密碼
–no-auth-cache
|
sed
-n
“/’.$user.’/,/—–$/
p”
21′;
$p=dirname(__FILE__);
exec(‘cd
‘.$p,$output);
exec($cmd,$output);
$d=date(‘Y年m月d日’,strtotime($d));
echo
$user.’自’.$d.’以來:br’;
echo
‘———————————————br’;
$out=”;
krsort($output);
if(!empty($output)){
foreach($output
as
$v){
$p1=strpos($v,’/branch/’);
$p2=strpos($v,’/tg/’);
if($p1!==false
||
$p2!==false){
if($p1!==false){
$v=substr($v,$p1+9);
}else{
$v=substr($v,$p2+4);
}
if($out==”){
$out=$v;
echo
$v.’br’;
}else{
if(strpos($out,$v)===false){
$out.=’,’.$v;
echo
$v.’br’;
}
}
}
}
}else{
echo
“沒有文件”;
}
?
原創文章,作者:REDI,如若轉載,請註明出處:https://www.506064.com/zh-hant/n/137038.html