開發團隊常需追蹤特定時間段內某用戶的代碼變更記錄。本文提供一個 PHP 腳本,可直接在瀏覽器中調用 SVN 命令,快速獲取指定用戶的文件提交詳情。
<?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 "沒有文件";
}
?>
/branch/ 和 /tg/ 目錄提取路徑,可根據項目結構調整此腳本可作為內部發布系統的輔助工具,幫助團隊快速核對代碼變更範圍。