Subversion 教程:10 个最常用的 SVN 命令及示例

举报
Tiamo_T 发表于 2022/04/11 10:11:30 2022/04/11
【摘要】 Subversion 是一个免费/开源的版本控制系统。Subversion 随着时间的推移管理文件和目录。一棵文件树被放置在一个中央存储库中。存储库很像普通的文件服务器,除了它会记住对文件和目录所做的每一次更改。这使您可以恢复旧版本的代码,或检查代码更改的历史记录。

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 表示该文件已“添加”到工作副本中。

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。