服务器维护,服务器代维,安全设置,漏洞扫描,入侵检测服务

运维之家

 找回密码
 注册
搜索
查看: 10213|回复: 2

linux svn客户端使用

[复制链接]
dirtysea 发表于 2012-3-6 10:46:50 | 显示全部楼层 |阅读模式
     1、将文件checkout到本地目录
svn checkout path(path是服务器上的目录)
例如:svn checkout svn://192.168.1.1/pro/domain
简写:svn co
       2、往版本库中添加新的文件
svn add file
例如:svn addtest.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 是上一版本,也可以写具体版本号,这样输出结果是可以提交的)
 楼主| dirtysea 发表于 2012-12-15 12:21:55 | 显示全部楼层
SVN无法读取cruuent修复方法 Can't read file : End of file found 文件:txn_current、current
原因:
在commit文件时,svn服务器被强行关闭了,导致版本信息文件写入不成功,重启后读取信息就不正确了!


解决办法:
重新将正确的版本信息写入到current、txn-current文件。

1.明确版本号(建议回滚一个版本,例如300,取299,以防最新的commit内容也不正常)
并删除最新版本(\Repositories\ProjectName\db\revprops\X)
2.更新txn-current
3.更新current
4.从svn服务器上刷新文件夹,能够阅览版本库证明问题已解决。



附录:
了解文件作用
repository/db/current  -- 记录当前最新版本号
repository/db/txn-current  -- 记录版本库中版本信息存放文件夹,例如E:\Repositories\AnyWellSourceCode\db\revprops\0,当前值就是0,编辑时,必须在0后面加回车!

svnadmin recover 库路径
% svn --version -q
    1.5.0-final
    % svnlook youngest repos1
    1
    % rm -f repos1/db/txn-current
    % svnadmin create repos2
    % svnadmin -q dump repos1 | svnadmin -q load repos2
    % svnlook youngest repos2
    1
    % cat repos2/db/txn-current
    1
    # swap the repositories, relocate the wc, and commit.  Works.


 楼主| dirtysea 发表于 2012-12-15 13:29:08 | 显示全部楼层
SVN管家、SVN备份恢复&同步存储等日常管理、svn存储结构

SVN管家(linux版本)项目
由 admin 于 星期二, 02/14/2012 - 17:36 发表 项目讨论区

      SVN管家是SVN俱乐部的基于apache+svn研发的产品,该产品只要安装apache就可运行。 SVN管家 有用户注册,用户中心(包含用户修改密码,用户查看自己权限等),管理中心(创建、删除版本库,创建用户、修改用户密码,设置用户权限,基于版本库级和基 于目录级的权限设置,版本库备份与恢复,计划备份等等功能)。
程序下载:
svn管家(linux版本)2.1
安装方法:
1. 首先你得在你的机器上配置好apache和svn,注意要配置成多库的方式, 建议使用YUM安装, 你的linux要支持中文. 可以参考文档进行配置:svn_apache_yum_安装配置;
2. 解压安装包:svngj2.x.tar.gz;
        tar xzvf svngj2.x.tar.gz
        chown -R apache:apache svngj2.1
3. 把目录svngj_cgi拷贝到apache的cgi-bin目录里,并把目录svngj_cgi重命名为svngj;
        cp -pr svngj_cgi /var/www/cgi-bin/
        mv /var/www/cgi-bin/svngj_cgi /var/www/cgi-bin/svngj
4. 把目录svngj_html拷贝到apache的html(htdocs)目录,并把目录svngj_html重命名为svngj;
        cp -pr svngj_html /var/www/html
        mv /var/www/html/svngj_html /var/www/html/svngj
5. 配置svn管家的配置文件/var/www/cgi-bin/svngj/svngj.conf里的httpdconf(apache的配置文件),svnadmin(svn的管理命令);
        httpdconf=/etc/httpd/conf/httpd.conf
        svnadmin=/usr/bin/svnadmin
6. 把svn管家的文件的所属用户改成apache运行的用户,让apache用户可读写该目录;
        chown -R apache.apache /var/www/cgi-bin/svngj
        chown -R apache.apache /var/www/html/svngj
7. 把svn的用户文件和权限文件的所属用户改成apache运行的用户;
        chown apache.apache /svn/userfile
        chown apache.apache /svn/accessfile
8. 配置完毕,现在您可以通过http://ip/svngj来访问svn管家了. 另外,文件/var/www/html/svngj/index.html件只是起引导作用,否则,比如你访问注册页面时,需输入:http://ip/cgi-bin/svngj/register.html.
附:
        所用到的apache配置文件里(比如:/etc/httpd/conf/httpd.conf)的对应项解读:
        1) apache的cgi-bin目录
                ScriptAlias /cgi-bin/ "/var/www/cgi-bin/"
        2) apache的html目录
                DocumentRoot "/var/www/html"
        3) apache运行的用户和用户组
                User apache
                Group apache
        4) svn的管理命令svnadmin
                如果是yum安装的话,通常是:/usr/bin/svnadmin, 源码安装的在svn安装目录的bin目录下面.
系统支持:
   Apache2.2+,Subversion1.6+,centos5.x, other linux。
初始管理员帐号:
admin/admin
测试入口:
http://svngj.svnclub.com/svngj







SVN管家(Windows版本)项目
由 admin 于 星期五, 06/03/2011 - 13:42 发表 项目讨论区

SVN管家是SVN俱乐部的基于apache+svn研发的产品,该产品只要安装apache就可运行。SVN管家 有用户注册,用户中心(包含用户修改密码,用户查看自己权限等),管理中心(创建、删除版本库,创建用户、修改用户密码,设置用户权限,基于版本库级和基于目录级的权限设置,版本库备份与恢复,计划备份等等功能),还可以自动在线升级。
安装方法(安装过程中遇到任何问题请联系:QQ:1474770592;email:svnclub@qq.com):
注意:如果您是安装VisualSVN Server的(svn管家需V2.3以上版本),请先参考文档“SVN管家与VisualSVN Server完美结合”
1. 首先你得在你的机器上配置好apache和svn,注意要配置成多库的方式。可以参考安装包里的文档进行配置:svn和apache的安装与配置.txt;
2. 将当前目录下的压缩包:svn管家_Win_V1.0.rar 解压到apache2.2的安装目录,我这里apache的安装路径是:C:\Program Files\Apache Software Foundation\Apache2.2;
3. 解压缩时会提示是否覆盖已存在的index.html,选择“是”。这个主要是为了方便访问(URL不用输很长),没有其它作用;
4. 确保SVN的安装路径的bin路径在环境变量里头,否则SVN管家的一些功能会不起作用。我这里SVN的bin路径是:C:\Program Files\Subversion\bin;
环境变量查看(设置):右键“我的电脑”-属性-高级-环境变量-系统变量-Path
5. 在浏览器里输入:http://ip就**到 svn管家了,现在就可以正式用了!!
程序下载:
svn管家版本下载地址升级内容
2.3下载
1、与VisualSVN Server完美结合
2、修改若干读取权限文件的BUG。

2.2下载
1、完全支持中文目录权限设置。在管理后台点击“权限管理”系统会自动将权限控制文件转为UTF-8无bom格式,不再需要借助EditPlus、UltraEdit等编辑器转换。

2.1下载
1、增加用户备注功能,提高帐号的辨识度,利于管理员进行管理;
2、增加注册用户自定制设置;
3.支持中文目录权限设置;
4.修改登陆首页,增加网页直接登陆svn服务器功能。

2.0下载
1、增加注册用户功能;
2、支持Windows7系统;
3、修复若干BUG。  
系统支持:
Apache2.2+,Subversion1.6+,Windows2000/2003/XP。

初始管理员帐号:
admin/admin
页面浏览:
svn管家首页:
用户注册页面:
用户登陆页面:
用户中心:
管理员登陆页面:
管理中心:





SVN备份恢复 同步存储等日常管理

svn存储结构
#ls /svn/Repository/
conf dav db format hooks locks
注解:
conf 包含库配置文件的目录;
dav 提供给Apachemod_dav_svn使用
db 版本数据存储目录
format 存储一个整数的文件,此整数代表库层次结构版本
hooks 版本库勾子版本
locks 存储库锁目录,用来跟踪库的访问者
db目录下fs-type目录不能删除,记录库的存储系统;而revprops目录记录版本属性;revs才是版本存储的实际目录;uuid为库的唯一标识号;txn-current记录当前事务;
所有这些目录中,dbformatlocksfs-typerevsuuidrevprops目录及文件必须完整才能正常显示版本,如果revs中的版本意外删除,可以从hot-copy备份库中直接拷贝过来而不会损坏数据;也可以从镜像库拷贝恢复(实际操作中还是有数据损坏,镜像库和源库中还是有些许差异);
其中revs下面是以目录组织的版本结构,如../0,../0/1 ../0/2  ../0/3 ,每1000个版本组成一个目录,每个版本自成一个文件,文件名即为commit后生成的版本号;即使删除掉部分版本也不会影响版本库的读取和显示;但是基础版本丢失会使版本库无法访问;



备份svn存储库

  • #压缩备份   
  • svnadmin dump /home/workhome/svn/repository | gzip > ~/repository-backup.gz   
  • #不压缩备份   
  • svnadmin dump /home/workhome/svn/repository > ~/repository-backup.svn  


恢复svn存储库

  • #建立新的svn存储库   
  • svnadmin create /home/workhome/svn/newrepository   
  • #**成功与否   
  • ls -l /home/workhome/svn/newrepository   
  • #导入存储库数据   
  • svnadmin load /home/workhome/svn/newrepository < ~/repository-backup.svn  


其他
svnadmin recover — 将版本库数据库恢复到稳定状态

  • svnadmin recover /home/workhome/svn/newrepository  


删除存储库中无用的日志文件

  • svnadmin list-unused-dblogs /home/workhome/svn/newrepository/ | xargs rm -vf  


删除存储库中所有剩余的共享内存文件

  • rm -f /home/workhome/svn/newrepository/db/_db.0*  


实现svnsync

实现svnsync的唯一的前提条件是创建一个希望镜像的版本库,一旦创建,你就可以按照下面步骤继续。


Step 1: 创建镜像Repository(要与主Repository名字相同)
svnadmin create MIRROR_REPO_PATH
Step 2: 设置镜像版本库只对同步用户可写
svnsync synchronize -h  

synchronize (sync): usage: svnsync synchronize DEST_URL

Transfer all pending revisions to the destination from the source  with which it was initialized.  
Valid options:   
  •   --non-interactive        : do no interactive prompting   
  •   --no-auth-cache          : do not cache authentication tokens   
  •   --username ARG           : specify a username ARG (deprecated;   see --source-username and --sync-username)   
  •   --password ARG           : specify a password ARG (deprecated;   see --source-password and --sync-password)   
  •   --source-username ARG    : connect to source repository with username ARG   
  •   --source-password ARG    : connect to source repository with password ARG   
  •   --sync-username ARG      : connect to sync repository with username ARG   
  •   --sync-password ARG      : connect to sync repository with password ARG   
  •   --config-dir ARG         : read user configuration files from directory ARG   
  •   -q [--quiet]             : print as little as possible  


这句意思是不是同步用户可以主Repository和镜像Repository都设成一样。待实践
为了让镜像版本库只被同步用户写,我们的例子里用户名是”svnsync”,我们有一些选项,一个就是使用Subversion的授权功能设置缺省的访问规则:

  • [/]   
  • * = r   
  • svnsync = rw  



另一个选项就是使用start-commit(MIRROR_REPO_PATH/hooks下) 检查svnsync用户,下面是一个例子,是shell脚本:

#!/bin/sh  
USER=”$2″   
if [ “$USER” = “svnsync” ];   
then exit 0
fi   
echo “Only the syncuser user may commit new revisions as this is a read-only, mirror repository.” >&2
exit 1  

Step 3: 让镜像版本库使用同步用户修改修订版本属性

为此,我们需要创建一个pre-revprop-change(MIRROR_REPO_PATH/hooks下)钩子,类似于下面的例子,也是shell脚本:

#!/bin/sh   

USER=”$3″   
if [ “$USER” = “svnsync” ];  
then exit 0;  
fi   
echo “Only the syncuser user may change revision properties as this is a read-only, mirror repository.”  >&2
exit 1  

Step 4: 注册同步的镜像版本库

在任何平台使用下面的svnsync命令:

  • svnsync initialize URL_TO_MIRROR_REPO URL_TO_MASTER_REPO --username=svnsync --password=svnsyncpassword

如果所有的配置正确,你一定会看到下面的输出:
Copied properties for revision 0.

现在你已经注册了镜像版本库与主版本库的同步,我们必须继续执行初始的同步,这样镜像版本库才和主版本库是一样的了。

Step 5: 执行初始同步

为了确定所有事情已经准备好了,并且执行初始同步,在任何系统只需要执行:

  • svnsync synchronize URL_TO_MIRROR_REPO --username=svnsync --password=svnsyncpassword  


如果所有的同步正确,你会看到类似的输出:
Committed revision 1.
Copied properties for revision 1.
Committed revision 2.
Copied properties for revision 2.
Committed revision 3.
Copied properties for revision 3.…

Step 6: 使用post-commit(MASTER_REPO_PATH/hooks下)钩子自动同步

根据初始同步的输出,我们现在要做的就是写一个定时执行或post-commit钩子来同步镜像版本库,我建议post-commit,因为它让你的镜像版本库尽可能的最新,下面是可以用在主版本库上同步镜像版本库的post-commit钩子,一个shell脚本:

# Example for synchronizing one repository from the post-commit hook  
#!/bin/sh
svnsync synchronize URL_TO_MIRROR_REPO -username=svnsync -password=svnsyncpassword &

exit 0  
注:上述钩子脚本需用 chmod 755 使之可运行。




TortoiseSVN使用

svn版本还原
1.推荐的一种方法是,直接export一个你需要的版本,然后用你export的版本覆盖你的最新的版本,这样你就可以不丢失你新建的文件,同时获得最新的SVN版本控制。操作步骤:TortoiseSVN→Show log→选中需要回滚的版本→右键→Export。之后将修改的文件覆盖到你的最新版本,commit即可。 2. 若是你编辑了工程,在没有提交的前提下,你想放弃这些修改,你可以直接选择TortoiseSVN→revert就可以更新到工程的最新的版本。 3. 若是你想退回到某一个版本,你就可以直接选择TortoiseSVN→update to reversion,这样我们就可以把我们的版本回退到你选中的版本去,这种情况下SVN并没有显示出有什么冲突,并且新建立的文件也还在,但是在这种情况下你并不能直接在你回退后的版本上进行编辑,因为SVN的版本控制还是在最新的主干上。我们需要update并解决冲突。 4.你可以直接选择revert changes from this revision,这样的话你可以直接解决冲突并提交。不过这种方法的不足是,你新建的文件都没有了,整个工程都回退到之前的版本了。 5.可以从日志中回滚到你需要的版本,从日志中选中你需要的版本,然后Update item to reversion就好了,这种情况下SVN并没有显示出有什么冲突,并且新建立的文件也还在,但是在这种情况下你并不能直接在你回退后的版本上进行编辑,因为SVN的版本控制还是在最新的主干上。我们需要update并解决冲突。

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|小黑屋|手机版|Archiver|运维之家

GMT+8, 2022-12-3 13:38 , Processed in 0.138712 second(s), 18 queries .

Powered by Dirtysea

© 2008-2020 Dirtysea.com.

快速回复 返回顶部 返回列表