首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

PHP 執行 SVN 命令查詢用戶文件更新記錄

     編輯:PHP 相關知識

開發團隊常需追蹤特定時間段內某用戶的代碼變更記錄。本文提供一個 PHP 腳本,可直接在瀏覽器中調用 SVN 命令,快速獲取指定用戶的文件提交詳情。

核心功能

  • 通過 GET 參數接收用戶名與日期
  • 自動預設查詢近 14 天記錄
  • 調用 SVN log 命令並過濾特定用戶提交
  • 解析輸出並去重顯示文件路徑

代碼實現

<?php
$user = trim($_GET['user']);
$d = $_GET['date'];

// 預設查詢 14 天前
if (!$d) {
    $d = date('Ymd', time() - 86400 * 14);
}
if (empty($user)) {
    echo "用法:svn_log.php?user=wang&date=20130118";
    exit;
}

// 構建 SVN 命令(需替換實際用戶名/密碼)
$cmd = '/usr/bin/svn log -v -r {' . $d . '}:HEAD --username 用戶名 --password 密碼 --no-auth-cache | sed -n "/' . $user . '/,/-----$/ p" 2>&1';

$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 "沒有文件";
}
?>

關鍵說明

  • 權限配置:執行用戶需具備 SVN 倉庫讀取權限
  • 路徑過濾:代碼中針對 /branch/ 和 /tg/ 目錄提取路徑,可根據項目結構調整
  • 安全提示:生產環境建議使用 SSH 金鑰認證替代明文密碼

此腳本可作為內部發布系統的輔助工具,幫助團隊快速核對代碼變更範圍。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved