① shell脚本中将svn的代码checkout到生产服务器的 "指定目录" 中的命令是什么
[root@localhost ~]# vim dd5
#!/bin/bash
svn_dir=$1
mkdir -p $svn_dir
cd $svn_dir
svn checkout svn://192.168.1.1/pro/domain
② 如何svn脚本命令check out自动输入密码
svn脚本命令check out自动输入密码:
需要把svn checkout/export写入一个脚本中,执行
但是访问失败,需要授权
svn: PROPFIND request failed on “XXXXXXX”
svn: PROPFIND of 'XXXXX': 403 Forbidden
改用python通过urllib访问读取也不行
拿到的html代码是输入用户名和密码页面的html
1.因为面向的使用者不是同一个,有些人可能没有权限
如何拿到用户名和密码,密码只能每次输入么?有没有svn自动保存在某地
2.有什么方法可以搞定?check out附带用户名或密码
thx
|
svn login会将密码保存到相应的文件,以后svn co就不需要再输入密码了
如果要以其他ID去checkout,可以使用(svn co --help查看帮助):
svn co --username XXX http://ip/....
使用这个命令后,上面的svn login信息文件会被修改成新的ID/passwd
|添加选项
-user u -password p
另外,svn貌似也会自动保存密码的
③ 怎么用python更新SVN、获取SVN版本号、获取SVN两个版本号之间的修改日志。
1) 执行shell命令,最好用popen打开,不过中间会有一些交互,除非事先的鉴权信息保存在系统中了。参考buildbot中对这些版本管理软件的用法。
2)好像有个pySVN的库可以用。
④ 如何通过svn,git进行优雅的代码集成
谈到代码集成,大部分人可能会想到各种的CI Server,比如CruiseControl、Hudson、Jenkins种种。这些持续集成的工具基本上都是将源码管理工具、构建工具、测试工具等集成起来通过统一的配置来实现多项目、松耦合、自动化、透明化的构建目标的。而深入到某个项目,人们通常是通过maven或一段shell脚本来管理代码间的复杂依赖关系及构建顺序的。很多场景下maven并不好用,比如构建iOS程序时。
我们公司使用的Jenkins构建ios、Android程序时会调用一大段Shell脚本,项目中如果存在代码依赖(比如其他部门开发的SDK),则通过约定目录层次,通过shell 按顺序执行SVN命令分配签出代码后执行构建命令——这么干很丑!一方面,团队成员在每个人的开发环境上都要进行很多约定的设置才能开始工作。另一方面,外部依赖代码的版本不好管理。因此,通过研究,我决定将这些外部代码通过 svn externals来实现。不但开发环境配置简单了,Jenkins构建的代码也精简了不少。同样,我对我的静态博客中皮肤的依赖也改成了Git submole的方式。——这种动态关联,让人感觉轻松不少。
一、svn externals:
cd /path/to/your/codedir
svn pedit svn:externals .
在打开的窗口中填入要依赖的外部代码路径,形如
localDir -r0000 http://the/outer/svn/url
其中,localDir -> 你的代码签出到当前路径后存放的目录名。-r0000 -> 限定svn版本号,可不填则将签出最新代码。
可以输入多行,部署更多的外部依赖。
:wq 保存后继续:
svn up
svn ci -m 'add externals'
再检查一下依赖是否已经都设置好,是否可以build通过,就可以通知其他人签出了。
参考:svn externals 引入外部分支目录 学会使用svn:externals
二、git submole:
以下是本博客代码如何引入主题的脚本:
cd /path/to/your/blog
mkdir themes
mkdir themes/puresam
git submole add [email protected]:hl85/catsup-theme-puresam.git themes/puresam
git add .
git commit -m "Add submole puresam"
git submole init
git push
参考:Git Submole 的认识与正确使用!
⑤ windows 怎么用svn命令
1、Windows下命令行工具:
发现原来安装的tortoisesvn已经集成到shell中,不能在命令行下使用。
下载Apache Subversion command line tools,这是一个可以在cmd下使用的命令行工具,解压后把里面bin目录这个路径添加到环境变量的path,这样在cmd下就可以使用了,和linux下使用svn的习惯一样了。
目录约定:
/trunck:开发主线
/branches:支线副本
/tags:标签副本(一旦创建,不允许修改)
1)使用trunk作为主要的开发目录
一般的,我们的所有的开发都是基于trunk进行开发,当一个版本(release)开发告一段落(开发、测试、文档、制作安装程序、打包等结束后),代码处于冻结状态(人为规定,可以通过hook来进行管理)。此时应该基于当前冻结的代码库,打tag。
当下一个版本/阶段的开发任务开始时,继续在trunk进行开发。此时,如果发现了上一个已发行版本(Released Version)有一些bug,或者一些很急迫的功能要求,而正在开发的版本(Developing Version)无法满足时间要求,这时候就需要在上一个版本上进行修改了。解决方法是基于发行版对应的tag,做相应的分支(branch)进行开发。
2)下图为struts2的SVN仓库目录:
3、常用命令
svn help
svn --version
svn --version --quiet 只显示版本号
svn checkout 地址
svn add 文件或者文件夹 增加本地数据到服务器
svn commit / svn ci -m “注释” 文件名 提交代码,要先add才commit
svn update / svn up不必跟特定的文件或目录,也可以自己指定需要更新的文件或目录。每次commit或者改动之前最好更新一下。
svn log
svn delete 文件名
svn resolve 路径 --accept working 解决冲突
http://zccst.iteye.com/blog/1765519
svn switch 远程路径 版本切换
svn list路径/svn ls 列出版本库下的文件和目录
svn merge -r m:n 路径 合并文件,从版本号m到版本号n的远程分支都合并到当前分支中
svn info 确认工作目录的svn信息
svn diff -r m:n 路径 对版本m和版本n比较差异
svn cleanup 为失败的失误清场
svn status -v 在本地进行代码修改,检查修改状态
svn import 远程路径 --message “message” 将当前路径下文件导入到版本库中
svn export 远程路径 导出一份干净的项目
svn move/ svn mv 原文件名 新文件名 重命名
svn mkdir 文件名
svn / svn cp 源文件路径 新文件路径
svn revert 文件名 只能恢复未提交之前的操作
若要还原已提交的改动:只能用旧文件覆盖新文件。操作如下:
1)sun up 让本地工作拷贝更新到最新状态
2)svn log your_file_path 查看文件日志,这时候提交时填写的说明信息就派上用场了
3)svn diff -r 旧修订版序号:新修订版序号 your_file_path 查看两个修订版之间的不同。
4)决定用哪个旧的修订版号后,用旧的修订版号文件覆盖新的修订版号文件。svn merge -r 新修订版序号:旧修订版序号 your_file_path
5)svn commit -m "恢复到某修订版(某修订版作废)"
本地的版本叫做working
4、关于merge
branch主要用于新功能的开发
合并发生在本地working ,只要你不提交就不会影响到repository
合并前一定要先update、commit,保证不会out of day,并将本地的修改保存到repository
branch和trunk并行开发的过程中,要经常同步,将trunk的修改合并到branch,合并时选择"Merge a range of revision"
branch最后合并回trunk时,merge type选择"Reintegrate a branch"
不管是从trunk合并到branch还是最终从branch合并回trunk,在每次合并前最好先update,然后将本地的修改先全部commit,保护好现场,万一合并不理想随时都可以reverthttp://blog.csdn.net/eggcalm/article/details/6606520
http://zhengkun.readthedocs.org/zh_CN/latest/2014/02/07/svn-usage/
5、关于解决冲突
发生冲突之后会出现三个临时文件:
XXX.mine XXX.r1 XXX.r2
一旦解决了冲突,需用svn resolved让subversion知道,这样就会删除这三个临时文件,冲突状态解决。
三种解决方式:
手工合并冲突:需要将冲突标志删除
用某一个临时文件覆盖自己的工作文件
用svn revert 放弃本地修改,不需要执行resolved