<?php
/**
*
* This class for execute the external program of svn
*
* @auth Seven Yang <qineer@gmail.com>
*
*/
class SvnPeer
{
/**
* List directory entries in the repository
*
* @param string a specific project repository path
* @return bool true, if validated successfully, otherwise false
*/
static public function ls($repository)
{
$command = "svn ls " . $repository;
$output = SvnPeer::runCmd($command);
$output = implode("<br>", $output);
if (strpos($output, 'non-existent in that revision')) {
return false;
}
return "<br>" . $command . "<br>" . $output;
}
/**
* Duplicate something in working copy or repository, remembering history
*
* @param $src
* @param $dst
* @param $comment string specify log message
* @return bool true, if copy successfully, otherwise return the error message
*
* @todo comment need addslashes for svn commit
*/
static public function copy($src, $dst, $comment)
{
$command = "svn cp $src $dst -m '$comment'";
$output = SvnPeer::runCmd($command);
$output = implode("<br>", $output);
if (strpos($output, 'Committed revision')) {
return true;
}
return "<br>" . $command . "<br>" . $output;
}
/**
* Remove files and directories from version control
*
* @param $url
* @return bool true, if delete successfully, otherwise return the error message
*
* @todo comment need addslashes for svn commit
*/
static public function delete($url, $comment)
{
$command = "svn del $url -m '$comment'";
$output = SvnPeer::runCmd($command);
$output = implode('<br>', $output);
if (strpos($output, 'Committed revision')) {
return true;
}
return "<br>" . $command . "<br>" . $output;
}
/**
* Move and/or rename something in working copy or repository
*
* @param $src string trunk path
* @param $dst string new branch path
* @param $comment string specify log message
* @return bool true, if move successfully, otherwise return the error message
*
* @todo comment need addslashes for svn commit
*/
static public function move($src, $dst, $comment)
{
$command = "svn mv $src $dst -m '$comment'";
$output = SvnPeer::runCmd($command);
$output = implode('<br>', $output);
if (strpos($output, 'Committed revision')) {
return true;
}
return "<br>" . $command . "<br>" . $output;
}
/**
* Create a new directory under version control
*
* @param $url string
* @param $comment string the svn message
* @return bool true, if create successfully, otherwise return the error message
*
* @todo comment need addslashes for svn commit
*/
static public function mkdir($url, $comment)
{
$command = "svn mkdir $url -m '$comment'";
$output = SvnPeer::runCmd($command);
$output = implode('<br>', $output);
if (strpos($output, 'Committed revision')) {
return true;
}
return "<br>" . $command . "<br>" . $output;
}
static public function diff($pathA, $pathB)
{
$output = SvnPeer::runCmd("svn diff $pathA $pathB");
return implode('<br>', $output);
}
static public function checkout($url, $dir)
{
$command = "cd $dir && svn co $url";
$output = SvnPeer::runCmd($command);
$output = implode('<br>', $output);
if (strstr($output, 'Checked out revision')) {
return true;
}
return "<br>" . $command . "<br>" . $output;
}
static public function update($path)
{
$command = "cd $path && svn up";
$output = SvnPeer::runCmd($command);
$output = implode('<br>', $output);
preg_match_all("/[0-9]+/", $output, $ret);
if (!$ret[0][0]){
return "<br>" . $command . "<br>" . $output;
}
return $ret[0][0];
}
static public function merge($revision, $url, $dir)
{
$command = "cd $dir && svn merge -r1:$revision $url";
$output = implode('<br>', SvnPeer::runCmd($command));
if (strstr($output, 'Text conflicts')) {
return 'Command: ' . $command .'<br>'. $output;
}
return true;
}
static public function commit($dir, $comment)
{
$command = "cd $dir && svn commit -m'$comment'";
$output = implode('<br>', SvnPeer::runCmd($command));
if (strpos($output, 'Committed revision') || empty($output)) {
return true;
}
return $output;
}
static public function getStatus($dir)
{
$command = "cd $dir && svn st";
return SvnPeer::runCmd($command);
}
static public function hasConflict($dir)
{
$output = SvnPeer::getStatus($dir);
foreach ($output as $line){
if ('C' == substr(trim($line), 0, 1) || ('!' == substr(trim($line), 0, 1))){
return true;
}
}
return false;
}
/**
* Show the log messages for a set of path with XML
*
* @param path string
* @return log message string
*/
static public function getLog($path)
{
$command = "svn log $path --xml";
$output = SvnPeer::runCmd($command);
return implode('', $output);
}
static public function getPathRevision($path)
{
$command = "svn info $path --xml";
$output = SvnPeer::runCmd($command);
$string = implode('', $output);
$xml = new SimpleXMLElement($string);
foreach ($xml->entry[0]->attributes() as $key=>$value){
if ('revision' == $key) {
return $value;
}
}
}
static public function getHeadRevision($path)
{
$command = "cd $path && svn up";
$output = SvnPeer::runCmd($command);
$output = implode('<br>', $output);
preg_match_all("/[0-9]+/", $output, $ret);
if (!$ret[0][0]){
return "<br>" . $command . "<br>" . $output;
}
return $ret[0][0];
}
/**
* Run a cmd and return result
*
* @param string command line
* @param boolen true need add the svn authentication
* @return array the contents of the output that svn execute
*/
static protected function runCmd($command)
{
$authCommand = ' --username ' . SVN_USERNAME . ' --password ' . SVN_PASSWORD . ' --no-auth-cache --non-interactive --config-dir '.SVN_CONFIG_DIR.'.subversion';
exec($command . $authCommand . " 2>&1", $output);
return $output;
}
}
分享到:
相关推荐
Linux 系统下 SVN 服务器操作命令 本资源总结了 Linux 系统下 SVN 服务器操作命令的详细信息,涵盖了初学者可以使用的 Ubuntu 系统下的基本命令,希望对大家有帮助。 一、基本命令 1. 将文件 checkout 到本地目录...
这个模块使得Apache能够支持SVN,让开发者可以通过Web浏览器进行版本控制操作。安装完毕后,你需要在Apache的配置文件(如httpd.conf或sites-available目录下的站点配置文件)中启用该模块,并配置SVN仓库的路径。 ...
### Windows环境下Apache、MySQL、PHP、Tomcat及SVN的安装与配置 #### 一、概述 本文档旨在提供一个Windows环境下安装与配置Apache、MySQL、PHP、Tomcat及SVN的基本步骤,以便搭建出一个集成开发环境。通过本文档...
`svnmanger`是一个基于Web的SVN服务管理工具,它允许管理员通过浏览器界面执行各种操作,如创建、删除、管理用户账户,控制权限,以及对SVN仓库进行配置。"已汉化版"意味着这个工具已经被翻译成中文,对中国用户来说...
例如:svn add test.php(添加 test.php 文件),svn add *.php(添加当前目录下所有的 php 文件)。 3. 将改动的文件提交到版本库 svn commit 命令用于将改动的文件提交到版本库。该命令的基本语法为:svn commit...
ThinkPHP框架提供了一个内置的 SVN 客户端类,使得开发者可以方便地在PHP环境中实现SVN操作。这个类库允许我们执行如版本库的检查、更新、提交、差异比较等常见SVN命令。 `thinkphp的svn客户端类` 是一个专门为...
7. **后续操作**:删除`.svn`后,如果你还需要继续使用SVN,你需要重新将目录加入到SVN控制之下,这通常通过`svn add`和`svn commit`命令完成。 总之,SVN_Deleter提供了一个便捷的方法来批量删除`.svn`目录,这...
### 在Zend中使用SVN拉取工程的知识点详解 #### SVN简介 版本控制系统(Version Control System,VCS)是软件开发中不可或缺的一部分,它能够帮助开发者管理代码版本、追踪变更历史以及协同工作等。Subversion(SVN...
Linux Fedora下的Subversion(简称svn)是一个版本控制系统,用于跟踪文件和目录的...在实际工作中,根据团队的需求和工作流程,可能会有更复杂的用法,比如解决冲突、分支管理等,但这些基本命令构成了svn操作的基础。
该软件基于 SVN 核心,结合 Apache 和 PHP,提供了一个完整的 SVN 管理解决方案。 在本文档中,我们将介绍 SVNManager 的配置详细说明,包括安装环境、软件需求、安装过程、配置说明等方面的内容。 首先,让我们...
使用`svn delete`、`svn del`或`svn rm`删除文件,并提交删除操作: ``` svn delete test.php svn ci -m "delete test file" ``` 8. **Log(日志查看)**: `svn log`查看文件或目录的修改历史记录: ``` ...
### SVN常用操作命令详解 #### 1、将文件CHECKOUT到本地目录 - **命令**: `svn checkout <路径>` (其中 `<路径>` 是服务器上的目录) - **示例**: `svn checkout svn://192.168.1.1/pro/domain` - **简写**: `svn co...
通过svn命令,用户可以实现对代码库的多种操作,包括检出、添加、提交、更新、查看状态、删除、查看日志、比较差异、合并版本等。以下是对这些常见svn命令的详细解释: 1. **检出(Checkout)**: `svn checkout` 或 `...
- 删除操作必须通过 `svn commit` 提交才能生效。 #### 八、Log (日志) **命令格式**: ``` svn log [文件或目录] ``` **示例**: ``` svn log test.php ``` **功能说明**: - `svn log` 命令用于显示文件或目录...
【svnmanager】是一款用于管理Subversion(SVN)仓库的Web界面工具,它使得SVN的管理和操作变得更加直观和便捷。在本文中,我们将详细探讨如何搭建和配置svnmanager服务器,以及解决在过程中可能遇到的一些常见问题...
在实际操作中,团队通常会创建一个svn仓库,然后为每个开发人员分配读写权限。他们可以使用svn客户端(如TortoiseSVN)来克隆仓库,进行本地开发,然后将更改提交回仓库。当需要部署项目时,可以从svn仓库中拉取最新...