❶ 如何用命令行实现TortoiseSVN命令
TortoiseSVN是一个GUI客户端,这个自动化指导为你展示了让TortoiseSVN对话框显示并收集客户输入,如果你希望编写不需要输入的脚本,你应该使用官方的Subversion命令行客户端。
TortoiseSVN的GUI程序叫做TortoiseProc.exe。所有的命令通过参数/command:asdf指定,其中asdf是必须的命令名(命令名详见”表 1. 有效命令及选项列表“)。大多数此类命令至少需要一个路径参数,使用/path:"some\path"指定。在下面的命令表格中,命令引用的是/command:asdf参数,余下的代表了/path:"some\path"参数。
因为一些命令需要一个目标路径的列表(例如提交一些特定的文件),/path参数可以接收多个路径,使用*分割。
TortoiseSVN 使用临时文件在 shell 扩展和主程序之间传递多个参数。从 TortoiseSVN 1.5.0 开始,废弃/notempfile参数,不再需要增加此参数。
The progress dialog which is used for commits, updates and many more commands usually stays open after the command has finished until the user presses theOK button. This can be changed by checking the corresponding option in the settings dialog. But using that setting will close the progress dialog, no matter if you start the command from your batch file or from the TortoiseSVN context menu.
To specify a different location of the configuration file, use the parameter /configdir:"path\to\config\directory". This will override the default path, including any registry setting.
如果想在进度对话框执行完毕后自动关闭,而又不必设置永久性的参数,可以传递/closeonend参数。
/closeonend:0 不自动关闭对话框
/closeonend:1 如果没发生错误则自动关闭对话框
/closeonend:2 如果没发生错误和冲突则自动关闭对话框
/closeonend:3如果没有错误、冲突和合并,会自动关闭
下面的列表列出了所有可以使用TortoiseProc.exe访问的命令,就像上面的描述,必须使用/command:asdf的形式,在列表中,因为节省空间的关系省略了/command的前缀。
表 1. 有效命令及选项列表
命令
描述
:about 显示关于对话框。如果没有给命令也会显示。
:log 打开日志对话框,/path 指定了显示日志的文件或目录,另外还有三个选项可以设置: /startrev:xxx、/endrev:xxx和/strict
:checkout 打开检出对话框,/path指定了目标路径,而/url制定了检出的URL。
:import 打开导入对话框,/path 指定了数据导入路径。
:update 将工作副本的/path更新到HEAD,如果给定参数/rev,就会弹出一个对话框询问用户需要更新到哪个修订版本。为了防止指定修订版本号/rev:1234的对话框,需要选项/nonrecursive和/ignoreexternals。
:commit 打开提交对话框,/path 指定了目标路径或需要提交的文件列表,你也可以使用参数 /logmsg 给提交窗口传递预定义的日志信息,或者你不希望将日志传递给命令行,你也可以使用/logmsgfile:path,path 指向了保存日志信息的文件。为了预先填入bug的ID(如果你设置了集成bug追踪属性),你可以使用/bugid:"the bug id here"完成这个任务。
:add 将/path的文件添加到版本控制 。
:revert 恢复工作副本的本地修改,/path说明恢复哪些条目。
:cleanup 清理中断和终止的操作,将工作副本的/path解锁。
:resolve 将/path指定文件的冲突标示为解决,如果给定/noquestion,解决不会向用户确认操作。
:repocreate 在/path创建一个版本库。
:switch 打开选项对话框。/path 指定目标目录。
:export 将/path的工作副本导出到另一个目录,如果/path指向另一个未版本控制目录,对话框会询问要导出到/path的URL。
:merge Opens the merge dialog. The /path specifies the target directory. For merging a revision range, the following options are available: /fromurl:URL, /revrange:string. For merging two repository trees, the following options are available: /fromurl:URL, /tourl:URL, /fromrev:xxx and /torev:xxx. These pre-fill the relevant fields in the merge dialog.
:mergeall Opens the merge all dialog. The /path specifies the target directory.
: Brings up the branch/tag dialog. The /path is the working to branch/tag from. And the /url is the target URL. You can also specify the /logmsg switch to pass a predefined log message to the branch/tag dialog. Or, if you don't want to pass the log message on the command line, use /logmsgfile:path, where path points to a file containing the log message.
:settings 打开设置对话框。
:remove 从版本控制里移除/path中的文件。
:rename 重命名/path的文件,会在对话框中询问新文件,为了防止一个步骤中询问相似文件,传递/noquestion。
:diff Starts the external diff program specified in the TortoiseSVN settings. The /path specifies the first file. If the option /path2 is set, then the diff program is started with those two files. If /path2 is omitted, then the diff is done between the file in /path and its BASE. To explicitly set the revision numbers use /startrev:xxx and /endrev:xxx. If/blame is set and /path2 is not set, then the diff is done by first blaming the files with the given revisions.
:showcompare
Depending on the URLs and revisions to compare, this either shows a unified diff (if the option unified is set), a dialog with a list of files that have changed or if the URLs point to files starts the diff viewer for those two files.
The options url1, url2, revision1 and revision2 must be specified. The options pegrevision, ignoreancestry, blame and unified are optional.
:conflicteditor Starts the conflict editor specified in the TortoiseSVN settings with the correct files for the conflicted file in /path.
:relocate 打开重定位对话框,/path指定了重定位的工作副本路径。
:help 打开帮助文件
:repostatus 打开为修改检出对话框,/path 指定了工作副本目录。
:repobrowser Starts the repository browser dialog, pointing to the URL of the working given in /path or /path points directly to an URL. An additional option /rev:xxx can be used to specify the revision which the repository browser should show. If the /rev:xxx is omitted, it defaults to HEAD. If /path points to an URL, the /projectpropertiespath:path/to/wcspecifies the path from where to read and use the project properties.
:ignore 将/path中的对象加入到忽略列表,也就是将这些文件添加到 svn:ignore 属性。
:blame
为 /path 选项指定的文件打开追溯对话框。
如果设置了 /startrev 和 /endrev 选项,不会显示询问追溯范围对话框,直接使用这些选项中的版本号。
如果设置了 /line:nnn 选项,TortoiseBlame 会显示指定行数。
也支持 /ignoreeol,/ignorespaces 和 /ignoreallspaces 选项。
:cat 将/path指定的工作副本或URL的文件保存到/savepath:path,修订版本号在/revision:xxx,这样可以得到特定修订版本的文件。
:createpatch 创建/path下的补丁文件。
:revisiongraph 显示/path目录下的版本变化图。
:lock Locks a file or all files in a directory given in /path. The 'lock' dialog is shown so the user can enter a comment for the lock.
:unlock Unlocks a file or all files in a directory given in /path.
:rebuildiconcache Rebuilds the windows icon cache. Only use this in case the windows icons are corrupted. A side effect of this (which can't be avoided) is that the icons on the desktop get rearranged. To suppress the message box, pass /noquestion.
:properties 显示 /path 给出的路径之属性对话框。
Examples (which should be entered on one line):
TortoiseProc.exe /command:commit
/path:"c:\svn_wc\file1.txt*c:\svn_wc\file2.txt"
/logmsg:"test log message" /closeonend:0
TortoiseProc.exe /command:update /path:"c:\svn_wc\" /closeonend:0
TortoiseProc.exe /command:log /path:"c:\svn_wc\file1.txt"
/startrev:50 /endrev:60 /closeonend:0
❷ linux svn 版本差异
1 svn diff的用法
1.1 对比当前本地的工作拷贝文件(working )和缓存在.svn下的版本库文件的区别
[plain]view plain
svndiff
1.2 对比当前本地的工作拷贝文件(working )和任意版本A的差异
[plain]view plain
svndiff-rA
比如,以下将对比本地的工作拷贝文件(working )和版本94239的差异
[cpp]view plain
svndiff-r94239
1.3 对比任意历史版本A和任意历史版本B的差异
[plain]view plain
svndiff-rA:B
比如,以下命令将显示版本94127相对于版本94239的差异,
[plain]view plain
[@user]$svndiff-r94239:94127
显示差异后的结果如下,
[html]view plain
===================================================================
---RealServer/LogicWorker.cpp(revision94239)
+++RealServer/LogicWorker.cpp(revision94127)
@@-964,22+964,8@@
.......
其中r后面的参数的含义是版本号,具体可以在svn log中查询到。
2 svn log的用法
1.1在任意位置使用
[plain]view plain
svnlogur1
1.2 进入代码在本地的目录后使用
[plain]view plain
svnlog
3 svn merge的用法
[plain]view plain
svnmerge-rA:B
比如,下面这个命令的含义是,把94127版本相对于94239版本的差异merge到当前版本,注意冒号前后的版本的顺序是会带来区别的。
[html]view plain
svnmerge-r94239:94127
merge完成之后,记得提交本地的修改到版本库,
[plain]view plain
svnci-m"restoretoversion94127"
❸ svn 命令行怎么解决冲突
解决版本冲突的命令。在冲突解决之后,需要使用svn resolved来告诉subversion冲突解决,这样才能提交更新。冲突发生时,subversion会在Work Copy中保存所有的目标文件版本(上次更新版本、当前获取的版本,即别人提交的版本、自己更新的版本、目标文件。假设文件名是sandwich.txt,对应的文件名分别是:sandwich.txt.r1、
sandwich.txt.r2、sandwich.txt.mine、sandwich.txt)。同时在目标文件中标记来自不同用户的更改。
解决冲突的办法:
- 手动解决:冲突发生时,通过和其他用户沟通之后,手动更新目标文件。然后执行svn resolved filename来解除冲突,最后提交。
- 放弃自己的更新,使用别人的更新。使用最新获取的版本覆盖目标文件,执行svn resolved filename并提交。
- 放弃自己的更新,使用svn revert,然后提交。在这种方式下不需要使用svn resolved。
对于svn resolved命令需要非常小心,必须是非常确定冲突已经解决才能使用。否则,会导致Subversion以为冲突解决,而使代码库不正确。 解决冲突详细文档:
http://svnbook.subversion.org.cn/1.2/svn.tour.cycle.html#svn.tour.cycle.resolve 解决冲突(合并别人的修改)
我们可以使用svn status -u来预测冲突,当你运行svn update一些有趣的事情发生了:
$ svn update U INSTALL G README C bar.c
Updated to revision 46.
U和G没必要关心,文件干净的接受了版本库的变化,文件标示为U表明本地没有修改,文件已经根据版本库更新。G标示合并,标示本地已经修改过,与版本库没有重迭的地方,已经合并。
但是C表示冲突,说明服务器上的改动同你的改动冲突了,你需要自己手工去解决。 当冲突发生了,有三件事可以帮助你注意到这种情况和解决问题: ● Subversion打印C标记,并且标记这个文件已冲突。
● 如果Subversion认为这个文件是可合并的,它会置入冲突标记—特殊的横线分开冲突的“两面”—在文件里可视化的描述重叠的部分(Subversion使用svn:mime-type属性来决定一个文件是否可以使用上下文的,以行为基础合并,更多信息可以看“svn:mime-type”一节)。
● 对于每一个冲突的文件,Subversion放置三个额外的未版本化文件到你的工作拷贝:
● filename.mine
● 你更新前的文件,没有冲突标志,只是你最新更改的内容。(如果Subversion认为这个文件不可以合并,.mine文件不会创建,因为它和工作文件相同。) ● filename.rOLDREV
❹ linux下的patch命令
patch命令用于为特定软件包打补丁,该命令使用diff命令对源文件进行操作。
格式:patch [选项] [原始文件 [补丁文件]]
常用参数:
-r 是一个递归选项,设置了这个选项,diff会将两个不同版本源代码目录中的所有对应文件全部都进行一次比较,包括子目录文件。
-N 选项确保补丁文件将正确地处理已经创建或删除文件的情况。
-u 选项以统一格式创建补丁文件,这种格式比缺省格式更紧凑些。
-p0 选项从当前目录查找目的文件(夹)(直接使用补丁文件里面指定的路径)
-p1 选项忽略掉第一层目录,从当前目录查找(去掉补丁文件指定路径最左的第1个'/'及前面所有内容)。
-E 选项说明如果发现了空文件,那么就删除它
-R 选项说明在补丁文件中的“新”文件和“旧”文件现在要调换过来了(实际上就是给新版本打补丁,让它变成老版本)
示例:
1、单个文件
首先将两个文件的内容显示如下:
$ cat test0
00000000
00000000
00000000
$ cat test1
00000000
11111111
00000000
*生成补丁:
$ diff -uN test0 test1 >test1.patch
这样将通过比较,生成test1的补丁文件。这里选项u表示使用同一格式输出这样产生的输出便于阅读易于修改,N表示把不存在的文件看做empty的.就算文件test0不存在,也会生成补丁。
*把test0通过打补丁变成test1文件:
$ patch -p0 <test1.patch
或$patch <test1.patch
这样,test0的内容将和test1的内容一样,但是文件名称还是test0。关于patch的选项见后面多文件有说明。当前目录下可以有test1.如果比较的时候test0是不存在的,那么这时候会生成一个test0文件。
*把打过补丁的test0还原:
$ patch -RE -p0<test1.patch
或$patch -R <test1.patch
这样,test0的内容将还原为原来没有打过补丁的状态。当前目录下可以有test1.这里的-E选项是要求patch在文件为空的时候删除文件,这个选项是不必要的因为patch是根据时间戳来判断一个文件是否存在。如果比较的时候test0是不存在的,这将会删除test0文件。
**
2、多个文件的:
首先查看文件结构如下:
1)外层目录列表:
$ ls -p
prj0/ prj1/
2)子目录prj0列表:
$ ls -p prj0
prj0name test0
3)子目录prj1列表:
$ ls -p prj1
prj1name test1
4)文件prj0/prj0name:
$ cat prj0/prj0name
--------
prj0/prj0name
--------
5)文件prj1/prj1name:
$ cat prj1/prj1name
---------
prj1/prj1name
---------
6)文件prj0/test0:
$ cat prj0/test0
0000000
0000000
0000000
0000000
0000000
0000000
0000000
7)文件prj1/test1:
$ cat prj1/test1
1111111
1111111
1111111
1111111
1111111
1111111
1111111
*创建补丁:
$ diff -uNr prj0 prj1 > prj1.patch
这里项u表示使用同一格式输出这样产生的输出便于阅读易于修改,N表示把不存在的文件看做empty的,r表示递归地比较子目录,比较的结果被标准重定向到文件prj1.patch中了。
运行之后,输出的就是一个补丁,描述了两个文件的不同,这个补丁就是把diff参数的第一个文件打补丁变成第二个文件的补丁文件。
实际过程依次比较两个目录下的同名文件,如果这里不加-N就会指明prj0name和test0只在prj0中存在,prj1name和test1只在prj1中存在,这就无法比较了,所以这里为了能够比较,加上了-N选项。
为了便于理解,这里给出prj1.patch文件的内容:
$ cat prj1.patch
diff -uNr prj0/prj0name prj1/prj0name
--- prj0/prj0name 2009-08-24 10:44:19.000000000 +0800
+++ prj1/prj0name 1970-01-01 08:00:00.000000000 +0800
@@ -1,5 +0,0 @@
---------
-
-prj0/prj0name
-
---------
diff -uNr prj0/prj1name prj1/prj1name
--- prj0/prj1name 1970-01-01 08:00:00.000000000 +0800
+++ prj1/prj1name 2009-08-24 10:45:05.000000000 +0800
@@ -0,0 +1,5 @@
+---------
+
+prj1/prj1name
+
+---------
diff -uNr prj0/test0 prj1/test0
--- prj0/test0 2009-08-24 11:21:12.000000000 +0800
+++ prj1/test0 1970-01-01 08:00:00.000000000 +0800
@@ -1,7 +0,0 @@
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
-0000000
diff -uNr prj0/test1 prj1/test1
--- prj0/test1 1970-01-01 08:00:00.000000000 +0800
+++ prj1/test1 2009-08-24 11:21:33.000000000 +0800
@@ -0,0 +1,7 @@
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
+1111111
*将prj0中的所有文件打补丁成为prj1中的所有文件:
步骤如下:
1)$ cp prj1.patch ./prj0
2)$ cd prj0
3)$ patch -p1 < prj1.patch
这里,把补丁文件复制到了prj0下面,然后将该文件夹下面的文件"变成"prj1下的文件了.
$ ls -p
prj1name prj1.patch test1
关于patch命令的-p选项接数字n,意思是去掉补丁文件里指定路径的前n个'/'前缀.
例如补丁文件中指定路径是/u/howard/src/blurfl/blurfl.c,那么p0选项处理之后的路径还是原来路径不变,而p1选项处理之后的路径是u/howard/src/blurfl/blurfl.c,同理p4处理之后的路径是:blurfl/blurfl.c.
注意:如果在外层目录运行这个命令,那么会在外层目录创建两个prj1name和test1文件。
*将打好补丁的prj0中的所有文件还原成为原来打补丁之前的文件:
$ patch -R -p1 < prj1.patch
运行之后文件变成原来的文件了,如下:
$ ls -p
prj0name prj1.patch test0
*将prj1中的所有文件反向打补丁成为prj0中的所有文件:
$ patch -R -p1 < prj1.patch
运行之后prj1中的文件变成prj0的文件了,如下:
$ ls -p
prj0name prj1.patch test0
*将prj1中反打补丁后的文件还原成原来的prj1中的文件:
$ patch -p1 < prj1.patch
运行之后,prj1中的文件被还原了,如下:
$ ls -p
prj1name prj1.patch test1
*在外层目录把prj0的内容打补丁成prj1的内容:
$ls -p
prj0/ prj1.patch
$patch -p0 <prj1.patch
这样prj0中的内容变成了prj1中的内容,但是prj0的目录名仍旧是prj0,如下:
$ls -p prj0
prj1name test1
注意:当前文件夹下面不能prj1目录,否则会出现一些警告提示。
*在外层目录把prj0的内容反打补丁还原成原来prj0的内容:
$ patch -R -p0 <prj1.patch
这样原来的文件如下:
$ ls -p prj0
prj0name test0
**
❺ svn info对应git什么命令
svn命令列举:
svn checkout :从服务器上下载一份新的代码到本地
svn up:在本地代码目录下执行,与服务器上最新代码保持同步
svn status:在本地代码目录下执行,查看当前目录下的本地改动情况,可简写为svn st
svn revert <file-name>:在本地代码目录下执行,撤销对<file-name>文件的改动,恢复到未改动前状态。
svn diff <file_name>:在本地代码目录执行,查看对文件<file-name>的修改。
svn log -l4:查看当前目录下的最新的4条修改历史,可改为-l5,-l6,-l10 (注意是小写的"L")
svn info:查看当前代码版本信息
svn commit:提交修改的代码到服务器;