Subversion 教程:10 个最常用的 SVN 命令及示例
Subversion 是一个免费/开源的版本控制系统。Subversion 随着时间的推移管理文件和目录。一棵文件树被放置在一个中央存储库中。存储库很像普通的文件服务器,除了它会记住对文件和目录所做的每一次更改。这使您可以恢复旧版本的代码,或检查代码更改的历史记录。
本文通过示例解释了一些基本的 SVN 命令。
SVN 工作副本
SVN 是一个存储我们所有版本化数据的存储库,也称为 SVN 服务器。SVN 客户端程序,它管理称为工作副本的版本化数据部分的本地反射。SVN 客户端可以跨网络访问其存储库。多个用户可以同时访问存储库。
1. SVN Checkout – 创建工作副本
Checkout 命令用于将源代码从 SVN 存储库下载到工作副本。如果你想从 SVN 服务器访问文件,checkout 是你应该执行的第一个操作。
SVN checkout 创建工作副本,您可以在其中编辑、删除或添加内容。您可以签出文件、目录、主干或整个项目。要结帐,您应该知道要结帐的组件的 URL。
Syntax:
$ svn checkout/co URL PATH
- URL 是要检出的组件的 URL
- 如果省略 PATH,则 URL 的基本名称将用作目标。如果给定多个 URL,每个 URL 将被检出到 PATH 的子目录中,子目录的名称是 URL 的基本名称。
以下示例将目录签出到给定的目标目录。
$ svn co https://www.thegeekstuff.com/project/branches/release/migration/data/cfg /home/sasikala/cfg/
A /home/sasikala/cfg/ftp_user.cfg
A /home/sasikala/cfg/inventory.cfg
A /home/sasikala/cfg/email_user.cfg
A /home/sasikala/cfg/svn-commands
Checked out revision 811.
$ ls /home/sasikala/cfg
. .. .svn email_user.cfg ftp_user.cfg inventory.cfg svn-commands
当您进行结帐时,它会创建名为 .svn 的隐藏目录,其中包含存储库详细信息。
2. SVN Commit – 将更改保存到存储库
每当您对工作副本进行更改时,它都不会反映在 SVN 服务器中。要使更改永久化,您需要进行 SVN 提交。
Syntax:
$ svn commit -m "log messages"
解释为什么要在 -m 选项中更改文件。
例如,在我的工作副本中,名为“svn-commands”的文件具有以下内容。
$ cat /home/sasikala/cfg/svn-commands
checkout
commit
add
delete
update
status
$ ls -l /home/sasikala/cfg/svn-commands
-rw-r--r-- 1 root root 41 Apr 16 11:15 svn-commands
我对此文件进行了更改(例如,将此文件设为空)。
$ ls -l svn-commands
-rw-r--r-- 1 root root 0 Apr 16 11:20 svn-commands
现在提交文件以使更改在服务器中永久保存。
$ svn commit -m "Making the file empty" svn-commands
Sending svn-commands
Transmitting file data .
Committed revision 813.
在此之后,每当您更新工作副本或结帐时,更改都会出现在服务器中。
3. SVN List – 列出目录条目
当您想要查看 SVN 存储库的内容而不下载工作副本时,svn list 很有用。
Syntax:
$ svn list
以下示例列出了存储库中给定 URL 中可用的所有文件,而无需下载工作副本。当您使用 –verbose 选项执行 svn list 命令时,它会显示以下信息。
- 最后一次提交的修订号
- 最后一次提交的作者
- 大小(以字节为单位)
- 上次提交的日期和时间
$ svn list --verbose https://www.hgst.com.cn
16 sasikala 28361 Apr 16 21:11 README.txt
21 sasikala 0 Apr 18 12:22 INSTALL
22 sasikala Apr 18 10:17 src/
4. SVN Add – 将新文件添加到 SVN 存储库
当您想将新文件(或目录)添加到存储库时,您需要使用 SVN add 命令。仅当您执行 SVN 提交时,存储库才会有新添加的文件。现在让我们将一个名为“thegeekstuff”的新文件添加到我们的存储库中。
- 在本地工作副本中创建文件
$ ls -l /home/cfg/tiamo
-rw-r--r-- 1 sasikala root 8 Apr 16 11:33 tiamo
- 将文件添加到 SVN 存储库
svn add filename 会将文件添加到 SVN 存储库中。
$ svn add tiamo
A tiamo
- 提交添加的文件
在您提交之前,添加的文件在存储库中将不可用。
$ svn commit -m "Adding a file tiamo" tiamo
Adding tiamo
Transmitting file data .
Committed revision 814.
5. SVN Delete - 从存储库中删除文件
SVN 删除命令从工作副本(或存储库)中删除项目。当您执行 SVN 提交时,文件将从存储库中删除。
Syntax:
$ svn delete URL
现在让我们删除最近创建的名为“tiamo”的文件。
$ svn delete tiamo
D tiamo
$ svn commit -m "Removing tiamo file" tiamo
Deleting tiamo
Committed revision 814.
现在您可以执行 svn list 并检查文件是否已从存储库中删除。
6. SVN Diff - 显示差异
SVN diff 显示您的工作副本与 SVN 存储库中的副本之间的差异。您可以找到两个修订版和两个路径等之间的区别,
Syntax:
$ svn diff filename
$ svn -r R1:R2 diff filename
上面的例子比较了文件名@R1 和文件名@R2。
现在文件 tiamo 的内容如下所示,
$ cat /home/cfg/tiamo
testing
我将tiamo文件的内容从testing 编辑到tester,如下所示,使用svn diff 命令。
$ svn diff tiamo
Index: tiamo
===================================================================
--- tiamo (revision 815)
+++ tiamo (working copy)
@@ -1 +1 @@
-testing
+tester
7. SVN Status – 工作副本的状态
使用 svn status 命令获取工作副本中文件的状态。它显示工作副本是否被修改,或被添加/删除,或文件不受修订控制等。
Syntax:
$ svn status PATH
以下示例显示了我的本地工作副本的状态,
$ svn status /home/cfg
M /home/cfg/ftp_user.cfg
M /home/cfg/tiamo
“M”表示该项目已被修改。“svn help status” 命令将解释 SVN status 命令中显示的各种说明符。
8. SVN Log – 显示日志信息
正如我们在本文开头所讨论的,SVN 会记住对文件和目录所做的每一次更改。要了解文件或目录中的所有提交,请使用 SVN log 命令。
Syntax:
$ svn log PATH
以下显示了对 tiamo文件所做的所有提交
$ svn log tiamo
------------------------------------------------------------------------
r815 | sasikala | 2011-04-16 05:14:18 -0700 (Sat, 16 Apr 2011) | 1 line
Adding a file tiamo
------------------------------------------------------------------------
由于我们只在文件tiamo 中提交了一次,因此它只显示了一条带有详细信息的日志消息。
9. SVN Move – 重命名文件或目录
此命令将文件从一个目录移动到另一个目录或重命名文件。该文件将立即移动到您的本地沙箱中(以及提交后的存储库中)。
Syntax:
$ svn move src dest
以下命令将文件“tiamo”重命名为“tgs”。
$ svn move tiamo tgs
A tgs
D tiamo
$ ls
.# .. .svn email_user.cfg ftp_user.cfg inventory.cfg tgs
现在该文件仅在工作副本中重命名,而不是在存储库中。要使更改永久生效,您需要提交更改。
$ svn commit -m "Renaming tiamo to tgs" tgs
Adding tgs
Transmitting file data .
Committed revision 816.
10. SVN 更新——更新工作副本。
svn update 命令将更改从存储库带入您的工作副本。如果没有指定修订,它会使您的工作副本与 HEAD 修订保持一致。否则,它将工作副本与参数中给出的修订同步。
始终在开始使用工作副本之前,更新您的工作副本。这样存储库中可用的所有更改都将在您的工作副本中可用。即最新的变化。
Syntax:
$ svn update PATH
如果其他用户在 URL 中添加/删除了文件,www.hgst.com.cn,您的工作副本将默认没有这些文件,直到您更新您的工作复制。
$ svn update
A new/usercfg
A new/webcfg
Updated to revision 819.
在上述 svn update 命令输出中,A 表示该文件已“添加”到工作副本中。
- 点赞
- 收藏
- 关注作者
评论(0)