SVN使用log,list,cat,diff查看所有及特定文件版本信息
svn log 展示给你主要信息:每个版本附加在版本上的作者与日期信息和所有路径修改。
svn diff 显示特定修改的行级详细信息。
svn cat 取得在特定版本的某一个文件显示在当前屏幕。
svn list 显示一个目录在某一版本存在的文件。
找出一个文件或目录的历史信息,使用svn log命令,svn log将会提供你一条记录,包括:谁对文件或目录作了修改、哪个修订版本作了修改、修订版本的日期和时间、还有如果你当时提供了日志信息,也会显示。
$ svn log
------------------------------------------------------------------------
r3 | sally | Mon, 15 Jul 2002 18:03:46 -0500 | 1 line
Added include lines and corrected # of cheese slices.
------------------------------------------------------------------------
r2 | harry | Mon, 15 Jul 2002 17:47:57 -0500 | 1 line
Added main() methods.
------------------------------------------------------------------------
r1 | sally | Mon, 15 Jul 2002 17:40:08 -0500 | 1 line
Initial import
------------------------------------------------------------------------
[/pre]注意日志信息缺省根据时间逆序排列,如果希望察看特定顺序的一段修订版本或者单一版本,使用--revision(-r) 选项:
$ svn log -r 5:19 # shows logs 5 through 19 in chronological order
$ svn log -r 19:5 # shows logs 5 through 19 in reverse order
$ svn log -r 8 # shows log for revision 8
也可以检查单个文件或目录的日志历史,举个例子:
$ svn log foo.c
…
$ svn log http://foo.com/svn/trunk/code/foo.c
…
[/pre]这样只会显示这个工作文件(或者URL)做过修订的版本的日志信息。
如果你希望得到目录和文件更多的信息,你可以对svn log命令使用--verbose (-v)开关,因为Subversion允许移动和复制文件和目录,所以跟踪路径修改非常重要,在详细模式下,svn log输出中会包括一个路径修改的历史:
$ svn log -r 8 -v
------------------------------------------------------------------------
r8 | sally | 2002-07-14 08:15:29 -0500 | 1 line
Changed paths:
M /trunk/code/foo.c
M /trunk/code/bar.h
A /trunk/code/doc/README
Frozzled the sub-space winch.
------------------------------------------------------------------------
[/pre]svn log也有一个--quiet (-q)选项,会禁止日志信息的主要部分,当与--verbose结合使用,仅会显示修改的文件名。
为什么svn log给我一个空的回应?
当使用Subversion一些时间后,许多用户会遇到这种情况:
$ svn log -r 2
------------------------------------------------------------------------
$
[/pre]乍一看,好像是一个错误,但是想一下修订版本号是作用在版本库整体之上的,如果你没有提供路径,svn log会使用当前目录作为默认的目标,所以,作为结果,如果你对一个本身和子目录在指定版本到现在没有做过修改的目录运行这个命令,你会得到空的日志。如果你希望察看某个版本做的修改的日志,只需要直接告诉svn log使用版本库顶级的目录作为参数,例如svn log -r 2 http://svn.collab.net/repos/svn。
检查历史修改的详情
我们已经看过svn diff—使用标准区别文件格式显示区别,它在提交前用来显示本地工作拷贝与版本库的区别。
事实上,svn diff有三种不同的用法:
检查本地修改
比较工作拷贝与版本库
比较版本库与版本库
比较本地修改
像我们看到的,不使用任何参数调用时,svn diff将会比较你的工作文件与缓存在.svn的“原始”拷贝:
$ svn diff
Index: rules.txt
===================================================================
--- rules.txt (revision 3)
+++ rules.txt (working copy)
@@ -1,4 +1,5 @@
Be kind to others
Freedom = Responsibility
Everything in moderation
-Chew with your mouth open
+Chew with your mouth closed
+Listen when others are speaking
$
[/pre]比较工作拷贝和版本库
如果传递一个--revision(-r)参数,你的工作拷贝会与指定的版本比较。
$ svn diff -r 3 rules.txt
Index: rules.txt
===================================================================
--- rules.txt (revision 3)
+++ rules.txt (working copy)
@@ -1,4 +1,5 @@
Be kind to others
Freedom = Responsibility
Everything in moderation
-Chew with your mouth open
+Chew with your mouth closed
+Listen when others are speaking
$
[/pre]比较版本库与版本库
如果通过--revision (-r)传递两个通过冒号分开的版本号,这两个版本会进行比较。
$ svn diff -r 2:3 rules.txt
Index: rules.txt
===================================================================
--- rules.txt (revision 2)
+++ rules.txt (revision 3)
@@ -1,4 +1,4 @@
Be kind to others
-Freedom = Chocolate Ice Cream
+Freedom = Responsibility
Everything in moderation
Chew with your mouth open
$
[/pre]与前一个修订版本比较更方便的办法是使用--change (-c):
$ svn diff -c 3 rules.txt
Index: rules.txt
===================================================================
--- rules.txt (revision 2)
+++ rules.txt (revision 3)
@@ -1,4 +1,4 @@
Be kind to others
-Freedom = Chocolate Ice Cream
+Freedom = Responsibility
Everything in moderation
Chew with your mouth open
$
[/pre]最后,即使你在本机没有工作拷贝,还是可以比较版本库的修订版本,只需要在命令行中输入合适的URL:
$ svn diff -c 5 http://svn.example.com/repos/example/trunk/text/rules.txt
…
$
[/pre]浏览版本库
通过svn cat和svn list,你可以在未修改工作修订版本的情况下查看文件和目录的内容,实际上,你甚至也不需要有一个工作拷贝。
svn cat
如果你只是希望检查一个过去的版本而不希望察看它们的区别,使用svn cat:
$ svn cat -r 2 rules.txt
Be kind to others
Freedom = Chocolate Ice Cream
Everything in moderation
Chew with your mouth open
$
[/pre]你可以重定向输出到一个文件:
$ svn cat -r 2 rules.txt > rules.txt.v2
$
[/pre] svn list
svn list可以在不下载文件到本地目录的情况下来察看目录中的文件:
$ svn list http://svn.collab.net/repos/svn
README
branches/
clients/
tags/
trunk/
[/pre]如果你希望察看详细信息,你可以使用--verbose(-v) 参数:
$ svn list -v http://svn.collab.net/repos/svn
20620 harry 1084 Jul 13 2006 README
23339 harry Feb 04 01:40 branches/
21282 sally Aug 27 09:41 developer-resources/
23198 harry Jan 23 17:17 tags/
23351 sally Feb 05 13:26 trunk/
[/pre]这些列告诉你文件和目录最后修改的修订版本、做出修改的用户、如果是文件还会有文件的大小,最后是修改日期和项目的名字。
警告
没有任何参数的svn list命令缺省使用当前工作拷贝的版本库URL,而不是本地工作拷贝的目录。毕竟,如果你希望列出本地目录,你只需要使用ls(或任何合理的非UNIX等价物)。
获得旧的版本库快照
除了以上的命令,你可以使用带参数--revision的svn update和svn checkout来使整个工作拷贝“回到过去”[8]:
$ svn checkout -r 1729 # Checks out a new working copy at r1729
…
$ svn update -r 1729 # Updates an existing working copy to r1729
…
[/pre]提示
许多Subversion新手使用前面的svn update实例来“回退”修改,但是你不能提交修改,你获得有新修订版本的过时工作拷贝也是没有用的。关于如何“回退”,我们可以看“找回删除的项目”一节。
最后,如果你构建了一个版本,并且希望从Subversion打包文件,但是你不希望有讨厌的.svn目录,这时你可以导出版本库的一部分文件而没有.svn目录。就像svn update和svn checkout,你也可以传递--revision选项给svn export:
$ svn export http://svn.example.com/svn/repos1 # Exports latest revision
…
$ svn export http://svn.example.com/svn/repos1 -r 1729
# Exports revision r1729
…
[/pre]
分享到:
相关推荐
我尝试察看我的文件的一个老版本,但是svn告诉我“path not found”。 C. WebDAV和自动版本化 WebDAV基本概念 仅是平常的WebDAV DeltaV扩展 Subversion和DeltaV 影射Subversion到DeltaV 自动版本化支持 选择mod_dav...
svn log 5:19:查看版本 5 到 19 的历史信息 svn log:查看当前目录的历史修改信息 svn log filename:查看单个文件的历史修改信息 svn log $URL:查看 $URL 的历史信息 二、从版本库到本地 svn co $URL $DIR:将 ...
我尝试察看我的文件的一个老版本,但是svn告诉我“path not found”。 C. WebDAV和自动版本化 WebDAV基本概念 仅是平常的WebDAV DeltaV扩展 Subversion和DeltaV 影射Subversion到DeltaV 自动版本化支持 选择mod_dav...
- `svn list` 命令用于列出指定 URL 下的所有文件和目录。 #### 十四、Mkdir (创建目录) **命令格式**: - 在本地创建目录:`svn mkdir [目录路径]` - 在远程创建目录:`svn mkdir [URL]` **示例**: - 在本地...
`svn list path` 命令用于列出指定目录下的所有文件和子目录。 ### 14. 创建目录 (Mkdir) `svnmkdir path` 命令用于在SVN仓库中创建新的目录。 ### 15. 重置到原始状态 (Revert) `svn revert path` 命令用于撤销...
获取特定SVN命令的帮助信息。 **示例:** ```shell svn help ci ``` 显示`svn ci`(commit)命令的帮助信息。 #### 十三、SVN List **命令格式:** ```shell svn list [URL/路径] ``` **功能介绍:** 列出远程版本...
SVN提供了多种命令来查看版本库的历史记录,这对于追踪变更原因非常有用: - `svn log`: 显示版本库的更改日志,包括每次提交的时间戳、作者和提交消息。 - `svn diff`: 展示文件的具体更改细节。 - `svn cat`: ...
- **`svn cat`**: 查看SVN仓库中文件的内容。 - **`svn list`**: 列出目录的内容。 #### 四、小技巧 - 在所有SVN命令后面加上 `> logfilename`,可以将命令执行结果重定向到指定的文件中,方便后续查看和分析。 ...
- **示例:** `svn status`,显示当前目录及子目录中所有文件的状态。 #### 七、SVN Delete (删除) **命令格式:** `svn delete [路径] -m "删除消息"` - **功能:** 删除版本库中的文件或目录。 - **示例:** `...
- 也可以使用 `svn cat` 命令来查看特定版本的文件内容。 - **清理工作副本** - 当不再需要某个工作副本时,可以使用 `svn cleanup` 或删除整个目录来清理资源。 - 如果操作过程中出现中断,可以使用 `svn ...
SVN(Subversion)是一种广泛使用的版本控制系统,用于管理和跟踪文件和目录的变更。通过SVN,用户可以在多个开发人员之间协同工作,确保代码的一致性和可追踪性。以下是SVN的一些常用命令及其详细解释: 1. **...
- **说明**: 显示当前目录及子目录下所有文件的状态。 - **详细状态**: - **命令**: `svn status -v <路径>` - **示例**: `svn status -v .` - **简写**: `svn st` - **说明**: 显示文件或目录的详细状态,包括...
**说明**:列出版本库中指定路径下的所有文件和目录。 --- ##### 14. 创建纳入版本控制下的新目录 **命令格式**: ``` svn mkdir <URL> [消息] ``` **示例**: ``` svn mkdir ...
此命令用于查看某个特定 SVN 命令的帮助文档。 #### 十四、列出版本库中的目录 (List) **命令格式:** ``` svn list [URL/目录] ``` **示例:** ``` svn list ``` **说明:** 此命令用于列出指定 URL 或目录下的...
- `svn status -v` (查看版本详细信息) **应用场景**: 在进行提交之前,检查工作副本的状态,确认是否有未提交的更改或新增的文件。 #### 7. 删除 (Delete) - **命令**: `svn delete <file-or-directory> -m ...
包括查看历史记录(`svn log`, `svn diff`, `svn cat`, `svn list`),清理工作区(`svn cleanup`),导入新项目(`svn import`)等。 **分支与合并** 1. **分支**:用于并行开发,`svn branch` 创建分支,`svn ...
- **历史记录(Log)、差异(Diff)**:查看版本历史和文件变化。 - **导出(Cat)、列表(List)**:查看文件内容和版本库结构。 - **清理(Cleanup)**:解决工作拷贝的异常状态。 - **导入(Import)**:将文件或...
它通过服务器存储所有文件的完整历史版本,允许用户在任何时间点回溯查看或恢复文件的历史版本。 #### 二、Subversion命令行选项详解 在使用SVN进行文件和目录的版本控制时,掌握其命令行选项至关重要: 1. **--N...