在Linux上使用Subversion(SVN)CLI
使用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 以获取更多可用的子命令。