在Linux上使用Subversion(SVN)CLI

时间:2020-03-21 11:47:30  来源:igfitidea点击:

使用Linux SVN客户端的简单方法。

在Debian上安装

如果尚未安装,则安装subversion:

# apt-get update && apt-get install subversion

我们将使用gnome密钥环来存储SVN密码(另一个选项为kwallet):

# apt-get install gnome-keyring

密钥环将存储在'~/.gnome2/keyrings /'下。

打开“~/.subversion/config”文件,并将密码存储设置为gnome-keyring:

password-stores = gnome-keyring

打开“~/.subversion/servers”文件,并根据需要设置以下参数:

[groups]
store-plaintext-passwords = no
username = sandy
[global]
store-passwords = yes
store-plaintext-passwords = no

让我们为svn项目创建一个myproject目录:

$mkdir -p ~/svn/myproject

转到svn目录:

$cd ~/svn/myproject

从这一点开始,我们将在'~/svn/myproject'内部工作。

SVN用法

SVN co-从存储库中签出工作副本

让我们从SVN服务器中签出最新版本的副本:

$svn co https://svn.example.com/repository/myproject/./
Checked out revision 26.

如下所示,从存储库中仅签出了一个Python脚本:

$ls
code.py

修订号是26.

SVN mkdir-在版本控制下创建新目录

为脚本创建一个新目录:

$svn mkdir ./scripts

如果需要,URL也可以用于创建远程目录。

SVN状态-打印工作副本文件和目录的状态

检查状态:

$svn status .
A scripts

我们看到脚本被添加到版本控制中(“ A”),这就是我们刚刚做的,为脚本创建了一个新目录。

SVN ci-将更改从工作副本发送到存储库

提交对服务器的更改:

$svn ci -m "#no_task adding script folder" ./scripts
Adding scripts
Committed revision 27.

修订版已更改为27.
如果我们现在检查svn状态,则不会返回任何内容,因为未进行任何更改:

$svn status .

SVN信息-显示有关本地或者远程项目的信息

检查本地工作目录:

$svn info .
Path: .
URL: https://svn.example.com/repository/myproject/
Repository Root: https://svn.example.com/repository/myproject/
Repository UUID: b0ab59e6-bf21-43f5-ac60-c2f9a0b9eb90
Revision: 26
Node Kind: directory
Schedule: normal
Last Changed Author: sandy
Last Changed Rev: 26
Last Changed Date: 2014-03-13 17:29:52 +0000 (Thu, 13 Mar 2014)

我们在这里看到旧的修订版本号26.

我们还可以通过指定其他文件和文件夹来分别检查它们:

$svn info scripts
Path: scripts
URL: https://svn.example.com/repository/myproject/
Repository Root: https://svn.example.com/repository/myproject/
Repository UUID: b0ab59e6-bf21-43f5-ac60-c2f9a0b9eb90
Revision: 27
Node Kind: directory
Schedule: normal
Last Changed Author: sandy
Last Changed Rev: 27
Last Changed Date: 2014-03-13 18:31:14 +0000 (Thu, 13 Mar 2014)

SVN升级-将存储库中的更改引入工作副本

我们可以使用svn update命令将存储库中的更改引入工作副本中:

$svn up
At revision 27.

再次显示工作目录信息:

$svn info .
Path: .
URL: https://svn.example.com/repository/myproject/
Repository Root: https://svn.example.com/repository/myproject/
Repository UUID: b0ab59e6-bf21-43f5-ac60-c2f9a0b9eb90
Revision: 27
Node Kind: directory
Schedule: normal
Last Changed Author: sandy
Last Changed Rev: 27
Last Changed Date: 2014-03-13 18:31:14 +0000 (Thu, 13 Mar 2014)

修订版从26更改为27,很好。

SVN co-从存储库中签出特定的修订副本

让我们看看我们的本地副本是什么样的:

$ls
code.py scripts

因此,我们有了修订版26随附的python脚本,以及后来创建的修订版27的scrips文件夹。

可能会发生许多不好的事情,文件被感染或者损坏,有时需要最后了解未感染或者未损坏的副本。

通过添加修订号,我们可以从服务器签出特定的修订副本,在这种情况下为26.

$svn co https://svn.example.com/repository/Hyman@theitroad ./
D /home/sandy/svn/myproject/scripts
Checked out revision 26.

如果我们再次在本地工作目录下列出项目,则会注意到以下内容:

$ls
code.py

脚本文件夹不见了,因为它在修订版26中不存在。

要返回最新版本,我们无需再次结帐,只需更新即可:

$svn up
A scripts
Updated to revision 27.

我们看到脚本文件夹又回来了。

SVN rm-从版本控制中删除文件和目录

要从版本控制中删除脚本文件夹,请执行以下操作:

$svn rm scripts
D scripts

字母“ D”表示已删除。

提交对服务器的更改:

$svn ci -m "#no_task deleting scripts" .
Deleting scripts
Committed revision 28.

SVN diff-显示两个修订版或者路径之间的差异

为了了解svn diff的想法,我们将创建一个包含一些文本的测试文件:

$echo "some random text here" > ./test.txt

将其添加到版本控制中:

$svn add ./test.txt
A test.txt

并将更改提交到服务器:

$svn ci -m "#no_task test.txt" ./test.txt
Adding test.txt
Transmitting file data .
Committed revision 29.

注意修订号29.
让我们通过添加另一行文本来修改测试文件:

$echo "this is a second line" >> ./test.txt

并将更改再次提交到服务器:

$svn ci -m "#no_task test.txt updated" ./test.txt
Sending test.txt
Transmitting file data .
Committed revision 30.

注意修订版30。
现在我们可以检查两个修订版之间的差异:

$svn diff -r 29:30 ./test.txt
Index: test.txt
===================================================================
--- test.txt (revision 29)
+++ test.txt (revision 30)
@@ -1 +1,2 @@
some random text here
+this is a second line

我们看到最新版本有一个另外的文本行。

SVN mv-在工作副本或者存储库中移动和/或者重命名

如果需要重命名文件或者文件夹,请使用svn mv命令:

$svn mv test.txt newname.txt
A newname.txt
D test.txt

从上面可以看到,将newname.txt文件添加到版本控制中,同时从其中删除test.txt。

SVN ls-列出存储库中的目录条目

列出存储库的内容:

$svn ls https://svn.example.com/repository/myproject/
code.txt
test.txt

SVN cat-输出指定文件或者URL的内容

要从存储库中读取文件:

$svn cat https://svn.example.com/repository/myproject/test.txt
some random text here
this is a second line

SVN help-描述此程序或者其子命令的用法

执行 svn help 以获取更多可用的子命令。