DuiYing版本控制介绍
更新
dy_tls_server更新至 1.3.1。
DuiYing是一款集中式的版本控制软件,从文本到图片,你可以使用它对任意类型的文件进行版本控制。
集中式,意味着所有文件的历史版本都存放在服务器上。
如果你想修改一个文件,需要先从服务器上获取文件到你自己的电脑上,然后修改文件,再上传到服务器上。
通过DuiYing,你可以:
- 添加、编辑和删除文件
- 查找文件
- 查看文件的历史版本
- 查看项目的任一阶段
- 管理文件的访问权限
- 支持dy命令行
- 支持Python
- 加密传输
软件特点
-
简单易学
我们提供友好的文档、视频和技术支持,让您的团队可以轻松地掌握软件的使用。 -
集中式的版本控制
所有的文件历史版本都会被保存到服务器上,方便运维管理。 -
区分大小写
即使服务器运行在windows系统上,DuiYing的文件路径都是区分大小写的。 -
支持非英文路径
采用utf8编码,文件路径支持非英文字符。 -
精确到文件的权限管理
你可以对任意的文件或者文件夹设置访问权限。 -
节省服务器空间
在服务器上,内容相同的文件只保存一份,减少空间占用。
本教程将全面介绍DuiYing版本控制软件的功能,内容清晰易懂,适合学习参考。
功能预览
在图片上右击,选择"在新窗口打开",可以查看更清晰的动图。
或按住 Ctrl, 滚动鼠标滚轮调整网页缩放。
登录
添加文件
编辑文件
删除文件
获取历史文件
视频教程
介绍
服务器设置
客户端下载和安装
登录
界面更新
添加文件
编辑文件
删除文件
锁与解锁
还原
同步文件
用户、组和权限设置
下载说明
DuiYing版本控制程序组件
程序 | 说明 |
---|---|
dys | 服务器程序 |
dy | 客户端命令行程序 |
dyui | 客户端界面程序 |
dym | 客户端Python库(支持python3.12.7 64-bit) |
dy_tls_client | tls加密客户端 |
dy_tls_server | tls加密服务端 |
下载链接
下载之前,你需要阅读并接受 DuiYing软件许可协议
升级请参考 安装
v1.3.1
Windows
dy_tls_server-v1.3.1-x86_64-pc-windows-msvc.tar.xz
sha256: c3cc0d8d4fe1c66c0cdd83d35265621c3bb75104ff350e0e4167afec2a813d51
Linux
dy_tls_server-v1.3.1-x86_64-unknown-linux-gnu.tar.xz
sha256: be60a6898d201abe7ed14a66d046c9e782277e74ca0bcee91882c49319de8dfe
更新日志:
- 修复:dy_tls_client有时无法连接dy_tls_server。
- 更新:增强dy_tls_server的稳定性。
v1.3.0
Windows
dy-v1.3.0-x86_64-pc-windows-msvc.tar.xz
sha256: 70f8b1ae6c50dea6a7b3344ce06b39bfd8d99b58c9c7252741a146cd814ffd9b
dym-v1.3.0-x86_64-pc-windows-msvc.tar.xz
sha256: 7ae27733bf355aa4ad951ed789d36d608eed04ce6e9c4504a7f5e538acd4e3b7
dys-v1.3.0-x86_64-pc-windows-msvc.tar.xz
sha256: e8d4a20c23a2c2c340e0b2725687fd767b9a28b16e54cc6266ec7981dfa8cbe2
dyui-v1.3.0-x86_64-pc-windows-msvc.tar.xz
sha256: 75ebae3b469c9e1466ac879b5d469ebaf6b99766598a9335258d2fea6b2daa6c
dy_tls_client-v1.3.0-x86_64-pc-windows-msvc.tar.xz
sha256: 05774e3abe7ab96ad60912501a441056ebf906ff1f303be3f9c5c225680f0bf1
dy_tls_server-v1.3.0-x86_64-pc-windows-msvc.tar.xz
sha256: a36f598afcfbd1d8e4e848c0cfb9d87b43d953d6fc3392e99bf957ae2e8ea738
Linux
dy-v1.3.0-x86_64-unknown-linux-gnu.tar.xz
sha256: ca86e681fc0131b8eb71c36d9c09944fbfcc68f697adacc6ebd2074d69e66006
dys-v1.3.0-x86_64-unknown-linux-gnu.tar.xz
sha256: 35f124b84255243a5d390956e5a139c494549fd0be4c47b2f561df3bdbbaa43d
dy_tls_client-v1.3.0-x86_64-unknown-linux-gnu.tar.xz
sha256: edf122bc8e2aa8db9ee50919bba4c70749b6a194eee024e384b08d65a52be73b
dy_tls_server-v1.3.0-x86_64-unknown-linux-gnu.tar.xz
sha256: a7eb2695f216238f4e2e74ee499516e70b9c736bc096acfbb344bf3da15c2cff
更新日志:
- 修复:在一次提交中,相同的文件被多次传输的问题。
- 新增:日志按大小进行切分。
- 新增:锁定登录失败次数过多的用户。
- 新增:解除锁定用户的命令unlock_login 示例。
- 新增:加密传输的方法 远程加密。
- 新增:dys针对安全的配置项 配置文件。
- 更新:dy参数中的"pending"统一使用'-p'简写。
安装
本章节将介绍如何安装 dyui, dy, dym, dys。
若是 升级 安装,建议操作如下:
dyui, dym 先删除旧版本,再重新安装。
dy, dys 可以直接替换完成升级。
客户端 和 服务器 需要升级至 相同版本。
客户端
目前客户端仅支持Windows10及以上运行。
dyui 安装
- 解压 dyui-*-x86_64-pc-windows-msvc.7z 到安装目录, 建议安装在 %localappdata% 目录下。
- 双击
dyui/bin/dyui.exe
运行程序。 - (可选)创建
dyui/bin/dyui.exe
的快捷方式到桌面。
注意
- 如果程序被安装在需要管理员权限的目录(例如“C:\Program Files”),则需要 以管理员身份运行
dyui.exe
- 如果运行dyui遇到
VCRUNTIME140_1.DLL was not found
报错, 需要安装vc++库,官方安装连接
The Visual C++ Redistributable for Visual Studio 2015-2022
dym 安装
- 安装 python3.11.4。
- 下载
dym-*-cp311-none-win_amd64.7z
并解压,在命令行运行pip install dym-***-win_amd64.whl
。
dy 安装
- 将
dy-*-x86_64-pc-windows-msvc.7z
解压到任意目录即可。
服务器
本章节包括dys在Linux和Windows上的配置教程以及配置文件的介绍。
Linux
支持系统
- Debian 12 amd64
- Fedora 38 x86_64
- Rocky 9.2 x86_64
- CentOS 7 x86_64
- Linux glibc 版本 >= 2.17
硬件要求
- 内存 4G
服务器搭建
我们提供两种安装方法,脚本安装和手动安装,选择其一即可。
dys默认监听端口为 7000。
脚本安装
需要root权限,在终端运行以下命令,根据提示进行安装。
bash <(curl http://duiying.io/tutorial/file/script/install_on_linux_glibc_2_17.sh)
如果失败,尝试运行以下命令。
bash <(curl http://duiying.io/tutorial/file/script/install_on_linux_glibc_2_17_ignore_ssl_check.sh)
手动安装
以Debian 12 amd64为例。
下面的步骤将会把dys安装在 /opt/dys/ 目录下。
-
下载
dys-v1.3.0-x86_64-unknown-linux-gnu.tar.xz
。 -
切换到root。
su -
- 创建 /opt/ 文件夹。
mkdir -p /opt/
- 将
dys-v1.3.0-x86_64-unknown-linux-gnu.tar.xz
解压至 /opt/ 目录下。
tar -xf dys-v1.3.0-x86_64-unknown-linux-gnu.tar.xz -C /opt/
- 进入/opt/dys, 添加可执行权限。
cd /opt/dys
chmod u+x dys
- dys初始化,添加管理员名称和密码。
为了安全, 管理员的密码建议15位以上, 需要有一定的复杂度(比如,密码同时包含字母大小写,数字和特殊符号等), 密码尽量保持随机性, 不夹带有意义的单词或数字
./dys init
- 添加systemd service。
vi /lib/systemd/system/dys.service
[Unit]
Description=dys service
After=network.target
[Service]
Type=simple
Restart=always
ExecStart=/opt/dys/dys
WorkingDirectory=/opt/dys
[Install]
WantedBy=multi-user.target
- 重新加载systemd。
systemctl daemon-reload
- 添加开机启动。
systemctl enable dys
- 启动dys服务, dys默认监听端口为
7000
。
systemctl start dys
- (可选)配置dys, 参数请参考 配置文件。
vi /opt/dys/dys.cfg
- 确认dys运行状态。
systemctl status dys
- 如果安装了防火墙,需要开放dys的监听端口。
ufw allow 7000
致谢
感谢微信号为 雪飘人间 的用户提供dys在Ubuntu Linux 22.04上的配置教程供我们参考。
Windows
系统要求
- Windows 10 包含(适用于Linux的Windows子系统)
硬件要求
- 内存 4G
服务器搭建
下载 dys-*-x86_64-pc-windows-msvc.7z
, 将dys程序解压到任意安装目录, 在本例中, 安装目录为 D:\dys
。
双击dys.exe, 此时程序将会生成一些文件夹, 如下图
文件夹 | 作用 |
---|---|
data | 存放保存到服务器上的文件数据 |
license | 存放license文件 |
log | 存放dy服务器日志文件 |
root | 存放文件路径, 此文件夹需要区分大小写 |
由于windows存在路径长度限制, data和root文件夹都会生成很长的路径,
所以简短的安装路径有助于避开路径过长的问题.
设置root文件夹,使其可以区分大小写
Windows系统默认情况下,文件或文件夹是大小写不敏感的,需要手动开启
按下快捷键 Win + r
, 输入 appwiz.cpl
, 然后按回车键
单击左上角的启动或关闭 Windows 功能
, 在弹出的对话框中, 找到并
勾选 适用于Linux的Windows子系统
, 单击 确定 并重启系统。
使用快捷键
Win + r
, 输入 cmd
, 按 Ctrl + Shift + 回车键
, 将会以管理员身份打开命令窗口, 因为本例中,安装目录为 D:\dys
, root文件夹的位置就是D:\dys\root
, 所以此处需要启用 D:\dys\root
的大小写敏感属性。
在命令行窗口中,输入
fsutil.exe file SetCaseSensitiveInfo "D:\dys\root" enable
如果你的root文件夹不是 D:\dys\root
, 需要将上述命令中的 "D:\dys\root" 换成你自己电脑上的 root 目录。
命令执行成功, 则如下图, 显示已启用目录的区分大小写属性
dys初始化
按住Shift, 在dys文件夹空白处右击, 选择 "在此处打开Powershell窗口"
输入 .\dys.exe init
进行初始化, 并设置dy管理员账户的用户名和密码
此处, 我们设置用户名为 admin, 密码为 p
此处的用户名和密码只是简单设置
在实际项目应用中, 管理员用户名可以是任意名称(由字母、数字或下划线组成, 以字母或下划线开始), 为了安全, 管理员的密码建议15位以上, 需要有一定的复杂度(比如,密码同时包含字母大小写,数字和特殊符号等, 密码尽量保持随机性, 不夹带有意义的单词或数字)。
设置完毕后, 需要再按一次回车键完成
启动dys服务
双击dys.exe, 即可启动服务
dys默认监听端口为 7000
配置dys, 参数请参考 配置文件。
配置文件
在 dys 程序所在目录新建 dys.cfg, 示例如下
ip_port = "0.0.0.0:7000" # 此处可添加注释
arc_root = "D:/dys/root"
hash_data_root = "D:/dys/data"
login_expired_time = 1440
password_min_length = 5
# "#"后,可添加注释
名称 | 默认值 | 说明 |
---|---|---|
ip_port | 0.0.0.0:7000 | 监听端口 |
arc_root | root | root文件夹,用于存放文件指针,此文件夹中需要区分大小写 |
hash_data_root | data | 用于存放文件 |
log_segment_size | 1G | 日志文件大小,超过的部分会被切分 |
login_expired_time | 60 * 12 | 登录有效期,单位是分钟,过期将需要重新登录 |
login_failed_tolerance | 10 | 用户登录失败的次数超过该值会被锁定一段时间 |
login_failed_sleep | 30 | 用户被锁定的时间, 单位为分钟 |
password_min_length | 5 | 密码最低长度,值若为0,则没有长度限制 |
登录
运行 dyui\bin\dyui.exe
, 输入 Server 和 User, 如下图
Server 为dys服务器的地址
user 为上一节中, 初始化dys时所创建的管理员
-- 如何查看服务器地址
到运行dys服务的电脑上,按Win + r
, 输入cmd
, 然后按回车键
在命令行窗口输入> ipconfig
即可查看服务器ip地址
由于是第一次登录,所以我们需要创建 工作空间(Workspace)
-- 什么是工作空间(Workspace)
工作空间(Workspace)就是定义了 dy路径 和 本地路径 转化的规则
例如, 文件A,
在dy上的路径为 //arc/files/文件A
在本地的路径为 C:\files\文件A
当我们从服务器上获取 //arc/files/文件A 到本地时,就需要将服务器路径 //arc/files/文件A 转化为本地路径 C:\files\文件A
这两个路径的转化规则,就是由工作空间(Workspace)决定的
- 单击 Workspace 参数框右侧的图标
此时需要输入登录密码, 输入上一节中设置的密码, 然后按回车即可
- 在 Select Workspace 对话框空白处右击,选择New, 创建工作空间
- 在弹出的对话框中,设置 Workspace Name 为 admin_workspace,设置 Workspace Root 为需要进行文件管理的目录, 设置完成后,单击 Apply And Close 就可以新建完成。
Workspace新建完成后,在Select Workspace对话框中就可以看到刚刚新建的workspace,如下图
选择 admin_workspace, 然后单击 OK
经以上步骤,工作空间就会被添加到登录界面的 Workspace 选项中
勾选 Set as default(设置为默认),这样下次启动dyui
, 将默认显示此次的登录信息
单击 Login 登录
界面语言
dyui目前支持中文和英文界面。
"en" 为英文
"zh" 为中文
可以通过 "编辑(Edit)" -> "偏好(Preferences)", 对字体进行设置。
经测试,以下字体对中文支持比较友好:
Serif Normal
Yu Gothic UI Normal
文件操作
在左侧目录树中,包含 Arc 和 Workspace 两块面板
Arc 显示的是服务器上的文件
Workspace 显示的是本地电脑上的文件
DuiYing目前包含以下文件操作
- Add(添加文件)
- Edit(编辑文件)
- Delete(删除文件)
这些操作只是通知dy服务器,你正在对文件进行修改,服务器会对你操作的文件打上相应的标记。
在你Submit(提交)之前, 服务器上的文件版本不会更改。
现在,请先把需要进行版本控制的文件,拷贝到我们在上一节设置的 Workspace Root 目录下,接下来,我们将对文件进行 添加、编辑 和 删除 操作
添加文件(Add)
右击需要添加的文件或文件夹,选择添加(Add...)
在弹出的对话框中,单击右下角的 OK .
若添加成功,则显示如下
不过这仅仅是标记添加,如果想提交到dys服务器,还需要按下面的步骤进行操作
右击刚刚被标记的文件或文件夹,选择提交(Submit...)
在弹出的对话框中,添加针对此次提交的描述,然后单击Submit(提交)按钮,等待提交完成
提交成功后,图标变化如下
当前图标表示 本地已有版本为最新版.
上图中右侧的 1|1 , 左侧的1表示本地拥有的版本,右侧的1表示该文件在服务器上的版本数量。
编辑文件(Edit)
编辑只能操作服务器上已有的文件
右击文件或文件夹,选择编辑(Edit...)
在弹出的对话框中,单击右下角的 OK .
若编辑成功, 则显示如下图, 此时你就可以修改文件了
修改文件完成后, 到dyui界面, 按 F5 刷新界面, 如果dyui检测到文件被修改, 则会把文件标记为深色, 如下图
右击文件或文件夹,选择 提交(Submit...)
在弹出的对话框中,添加针对此次提交的描述,然后单击 Submit(提交) 按钮,等待提交完成
提交成功后,图标变化如下
此时,我们注意到文件后面的版本信息变成了 2|2, 即该文件在服务器上有两个版本,本地版本为第2版
有时, 你可能会在文件图标的右侧看到修改的标记, 像下图这样
这说明这些文件正在被别人修改。
按住 Ctrl 键, 然后将鼠标放到文件上面, 停留2秒左右, dyui就会显示正在编辑该文件的用户
dy是允许两个或两个以上的人同时编辑文件的, 但提交的时候只能保留一个人的修改。
例如, 你和 用户A 在同时编辑一个文件, 如果 用户A 先提交, 然后你再提交, 此时该文件的最新状态仅会保留你提交的修改, 而 用户A 提交的修改将会变成历史版本。
如何避免这种编辑冲突, 请参考 锁(Lock)
删除文件(Delete)
删除只能操作服务器上已有的文件
右击文件或文件夹,选择删除(Delete...)
在弹出的对话框中,单击右下角的 OK .
此时,如果本地文件与服务器一致, 则本地文件会被删除, 显示如下
如果本地文件与服务器不一致, 则本地文件会被保留。
右击文件,选择提交(Submit...)
在弹出的对话框中,添加针对此次提交的描述,然后单击Submit(提交)按钮,等待提交完成
提交成功后,如果需要查看已删除的文件需要激活 显示已删除文件(show deleted files)。
此时,我们注意到文件后面的版本信息变成了 0|3, 即该文件本地没有版本信息, 在服务器上有3个版本。
删除操作并不会真正删除文件,只是新增了一个处于删除状态的版本。
重命名
目前DuiYing没有直接的命令来重命名。
可以通过 删除(Delete)和添加(Add)来完成重命名操作。
书架(Bookshelf)
有时候,你需要把文件共享给别人,但又不想影响服务器上的文件版本,此时,你可以用书架功能。它会把文件放在一个临时的位置,方便共享。
你可以通过“上架(Shelve)”将文件放到书架上,也可以通过“下架(Unshelve)”将文件从书架上删除。
别人可以通过“获取(Get)”来下载书架上的文件。
接下来,让我们一块看一下如何进行上述操作。
上架(Shelve)
在“待定”面板中,每个待定号都会包含一个书架,如下图。
你可以将“档案”或“工作空间”里的文件拖拽至“书架”进行上架。
也可以将待定号中的文件拖拽至“书架”进行上架。
如果想上架整个待定号中的文件,需要右击待定号,选择“上架”。
在上架的对话框中,可以通过“正则表达式”来过滤上架的文件。
“上架”仅会将本地的文件上架,如果本地文件不存在或读取失败,则会出现如下警告信息,不会上架。
用户需要拥有Edit权限,才可以上架文件。
获取(Get)
你可以通过找到书架所在的待定号,选择单个文件进行获取,或者选择“书架”来获取书架上的所有文件。(右击图像在新窗口打开会更清晰)
如果想查看书架上的文件在档案中的路径,则需右击文件,选择“在档案中显示”。
如果想快速找到待定号,可以使用菜单 “编辑” -> “跳转到书架”。
如果本地文件已存在,则需要勾选对话框中的“覆盖”选项才可以获取成功。
用户需要对路径拥有Read权限,才可以获取。
下架(Unshelve)
如果你想停止共享书架中的文件,可以通过“下架”来删除书架中的文件。
在书架中,可以选择文件进行下架,
也可以右击“书架”,下架当前书架中的所有文件。
锁(Lock)
当你标记添加,编辑或删除文件后,如果不想文件被别人提交,则需要锁上文件
文件被锁后,只有锁上文件的人用户可以提交这些文件
一个文件, 在标记添加、编辑或删除之后, 提交之前, 才可以上锁。在提交到服务器后, 文件会自动解锁。
右击文件或文件夹,选择上锁(Lock)
完成后,文件左下方会添加一个锁的图标
解锁(UnLock)
右击文件或文件夹,选择解锁(Unlock)
完成后,文件左下方锁的图标将会去除
还原(Revert)
还原(Revert)操作将取消文件的添加、编辑和删除标记以及锁。
选择文件或文件夹,右击,选择 还原(Revert)
完成后,标记被取消
在pending上右击可以选择 Revert if unchanged, 相应的pending列表中,没有被修改的文件会被 还原(Revert) 。
与左侧的文件树相比,Revert of unchanged 检测文件是否更改会更加可靠。
移除本地文件(Remove Local Files)
移除本地文件(Remove Local Files)将会删除本地文件,服务器上的文件不受影响
选择文件或文件夹,右击,选择 移除本地文件(Remove Local Files)
移除完成后,本地的文件将会被移除
同步文件(Sync Files)
同步文件(Sync Files) 可以把dy服务器上的文件获取到本地
选择需要获取的文件或文件夹,右击,选择同步最新文件(Sync Latest),即可把文件的最新版获取到本地。
右击文件或文件夹, 选择 Open Path, 会打开并选择路径
如果你需要获取特定的版本,可以在右击后,选择 Sync...,在弹出的对话框,#
后面的输入框内填上需要获取的版本号,然后单击Sync同步文件
在Sync Files...对话框中
#
表示引用版本的序号
@
表示引用更改(change)号
有关更改号的内容,请查看 pending and change
如果dyui检测到本地文件被修改, 或者本地文件被手动删除(不是使用 移除本地文件(Remove Local Files) 删除的),同步文件将不会获取文件,此时你可以通过 Sync Files... 操作,在弹出的对话框中勾选 Force ,这样当你单击Sync按钮后,dyui会强制同步本地文件到你指定的版本, 同时本地文件会被 覆盖
待处理(pending) 和 更改(change)
dy将会用一个数字来记录你每一次对文件的修改
pending 用来组织你正在修改的文件
change 用来记录你每一次提交到dy服务器的修改
接下来我们将通过一个例子来说明pending和change的使用
比如你今天收到一个任务需要上传5张图片和一份文件, 结构如下图
接下来开始添加,先选择 图片pic_01.png ~ pic_05.png,右击,选择添加(Add...)
在弹出的对话框中单击OK后,在待处理(pending)面板会自动创建一个待处理号(pending number),单击左侧的展开按钮,你会发现刚刚添加的文件都会组织在这个号码里
接着继续添加文件,右击 "文件.txt",选择添加(Add...),在弹出的对话框中,pending选择刚刚新建的待处理号,也就是包含我们刚刚添加的5张图片的待处理号,单击OK
此时你会发现"文件.txt"和刚刚的5张图片在同一个待处理号中
接下来就是提交(Submit...)
右击待处理号 11 ,选择提交(Submit...),在弹出的对话框中,填写针对这些文件的描述,"5张图片和一份文件",单击OK,等待提交完成
这样,dy将会用一个唯一的更改号来记录此次修改。如果想要查看更改号,单击 view,选择 Submit,就可以找到你刚刚提交的内容。
此时,你就可以发邮件通知,"任务完成了,更改号是 11 ".
此时, 其他人可通过以下步骤查看你的提交
单击菜单 View -> Submit ,打开 Submit面板。
将 Filter 后的选项改为 User, 单击右侧的 刷新 按钮
此步骤是用来过滤Submit结果的。
由于此处 User 为空,所以会查看所有人的提交。
如果 User 为"admin",则仅会查看"admin"的提交。
右击更改号,选择 View Change... , 就可以查看更改号的相关信息
在 Submit 面板中,如上图,红色三角表示当前登录用户的提交,蓝色三角表示其他用户的提交。
待处理号和更改号不一定总是相同的。
查看已提交的更改号,需要到通过菜单 View --> Submit ,在 Submit 面板下查看。
如果更改号顺序错乱,可单击 Filter User 下方的 change 对更改号进行排序。
如果想同步到本地,单击 Sync,就可以获取此次更改的文件, 勾选 Force 则会覆盖本地文件
查找(Find)
单击菜单View -> Find,打开查找面板
输入需要查找的范围和关键字,按回车键(Enter)或单击右侧查找图标,就可以开始查找了
Find Path 查找路径,路径越精确,查找速度越快
Find Name 需要查找的关键字
历史(History)
单击菜单View -> History, 打开历史面板
单击需要查看历史的文件,就可以显示文件的历史版本了
回滚(Rollback)
目前duiying并没有直接的命令来回滚历史,但可以通过以下步骤来回滚历史。
回滚文件历史
假设文件file.log有5个版本,我们需要将其第3版变为最新版本。
如果文件的最新版不是删除状态:
- 获取file.log文件的第3版。
- 将本地file.log文件更名为file_3.log(任意文件名都可以,只要不和当前文件夹下的其他文件名冲突)。
- 获取file.log文件至最新版。
- 编辑(Edit)文件。
- 删除本地的file.log文件,将file_3.log改名为file.log。
- 提交(Submit)file.log文件,并在提交对话框的描述中添加类似"回滚至版本3"的说明。
如果文件的最新版是删除状态:
- 获取file.log文件的第3版。
- 将file.log文件更名为file_3.log。
- 获取file.log文件至最新版。
- 将file_3.log改名为file.log。
- 添加(Add)文件。
- 提交(Submit)file.log文件,并在提交对话框的描述中添加类似"回滚至版本3"的说明。
回滚项目历史
假设 //project/ 最新提交号为1000,对应本地project文件夹,需要回滚到提交号为900的状态。
- 删除(Delete)//project/, 然后提交(Submit),并删除本地的project文件夹。
- 强制获取//project/至900。
- 将本地project文件夹改名为project_900。
- 获取//project/至最新状态。
- 将project_900改名为project。
- 添加(Add) //project/目录并提交,在提交对话框的描述中添加"回滚至提交号900"的说明。
工作空间
工作空间是用来将服务器的路径对应到本地的路径, 一个工作空间可以被多人在不同的电脑上使用。
通过工作空间,你可以:
- 制定服务器路径到本地路径的转化规则
- 忽略不需要的路径
新建工作空间
- 单击菜单 View -> Workspace, 打开工作空间的面板。
- 在工作空间的空白处右击,选择 New, 在弹出的对话框填写相应的内容。
Workspace Name 设置工作空间的名称。
Workspace Root 设置工作空间的根目录,设置完成后,所有从服务器上获取的文件都会在这个文件夹内。
Mapping 设置服务器路径与本地路径的对应关系。
Description 设置工作空间的描述。 - 单击 Apply 或 Apply And Close 新建完成。
Mapping 规则
- 以‘/’结束的路径被DuiYing视作 文件夹,否则路径将被视作 文件。
#例如
//dy-v0.9.42/dyui --> ./dyui # 表示“文件” //dy-v0.9.42/dyui 对应的本地“文件”路径为 根目录/dyui
//dy-v0.9.42/dyui/ --> ./dyui/ # 表示“文件夹” //dy-v0.9.42/dyui/ 对应的本地“文件夹”路径为 根目录/dyui/
-
当路径符合Mapping中的多条规则,DuiYing只会生效最后一条规则。
例如,在刚刚创建的Workspace中,//dy-v0.9.42/dyui/lib/asprintf.lib
既符合规则// --> ./
, 也符合规则//dy-v0.9.42/dyui/ --> ./dyui/
, 这种情况下,只有后一条规则会生效。 -
在路径前加 '-' 表示忽略此路径, 忽略后此条路径将不会被显示。
例如,- //dy-v0.9.42/icons/
表示忽略此条路径。
注意: - 是英文输入法状态下的减号。 -
'#' 之后的内容将被视作注释
删除工作空间
在Workspace面板中,选择需要删除的工作空间,单击鼠标右键, 选择"Delete"。
更改用户
单击"用户(User)" -> "更改用户(Change User)"。
如下图,其中绿线标出了用户可以自行修改的部分,包括密码、邮件和描述。
如果用户修改了密码,则需要重新登录。
管理员
DY可以进行用户、组和权限的管理。
接下来,我们将会创建一个用户 "user1", 并且让其可以对路径 "//pictures/" 进行读(获取文件到本地)和写(修改服务器文件)。
创建步骤:
-
创建组 pic (组的名称可以根据需要修改)
由于dy是通过组进行权限设置的,所以需要先新建一个组。 -
设置 pic 组的权限
-
创建 user1,并加入到 pic 组
在dyui界面, 通过菜单 User -> Admin 打开管理界面
日志
dy, dyui, dym, dys在运行过程中会产生日志。
程序 | 日志文件名 | 路径 |
---|---|---|
dy | dy.log | install_dir/log/ |
dyui | dyui.log | install_dir/log/ |
dym | dym.log | %appdata%/dy/ |
dys | dys.log | install_dir/log/ |
说明:
- install_dir 为程序所在的路径。
- 日志文件如果超过一定的大小,会被切分、压缩并保存。服务器端程序日志默认超过1G将被切分,客户端则为100M。例如,dys的log文件夹的日志存储样式
dys.log
dys_1.log.tar.gz
dys_2.log.tar.gz
随着时间的推移, 日志文件会越来越大, 建议定期备份或删除。
dys中记录了一些关键信息,便于数据恢复,例如, dys.log日志记录了文件路径和data目录中文件的对应关系,格式如下
INFO file-hash: //NoAccess/projects/dev.proj -- 63d9ec225712be80c7ea8e9238ac25d27c308335b0d189224751e981d0ecb13c7bcba1c14c47252ef3309a05db2228b27f309ccceabc95c844a4add80029c340bf
注意:
如果不小心删除了.log文件,需要 重新启动程序 来生成日志文件,并且在重新启动之前,日志不会被记录。
擦除(Erase)
注意: 擦除(Erase)将会完全删除路径及路径下所有文件的历史,并且无法恢复。
在档案(Arc)面板中选择需要擦除的路径,可以选择多个路径,单击菜单"编辑"(Edit) -> "擦除"(Erase)。
在弹出的对话框中,勾选"确认擦除"(Confirm Erase),单击"擦除"(Erase)。
擦除后,路径以及路径下的所有文件的历史都会被永久删除。
如果遇到"擦除错误",如下图。
这是因为dys在删除root目录下对应的文件时,文件因被其他程序占用而无法删除。
此时需要管理员在dys的root目录下找到对应的文件,并手动删除。
管理员可以通过查询客户端的日志文件找到需要手动删除的路径,关键字如下
the following files are unable to erased, you should delete it manully on server
也可以通过dys服务器上的日志文件查询,关键字
WARN need to delete it manually
例如,假设root路径为 C:/dys/root/, 查询到dys日志信息如下
WARN need to delete it manually -- //Access/erase/prefs/pluginPrefs.mel
所以,我们需要到路径 C:\dys\root\NoAccess\erase\prefs
下, 删除pluginPrefs.mel
。
创建组
-
在Group区域右击,选择 New Group。
-
在弹出的对话框中,填写如下信息,然后单击 OK, 组创建完成。
设置权限
-
新建权限
在最右侧一栏右击, 选择 New Permission。
-
填写如下信息, 单击 OK 完成创建。
Group : 将权限添加到组, 单击右侧列表按钮可以选择组
Permission : 权限
- NoAccess 没有权限
- Access 可以看到路径
- Read 可以获取路径文件
- Edit 可以标记修改文件
- Write 可以提交
- Admin 可以进行用户、组和权限的管理
以上权限, 下一级将会包含上一级的权限
比如,Edit
权限包含Read
、Access
和NoAcess
的权限
也就是说, 如果一个组是Edit
权限, 那么这个组也可以看到文件路径, 获取路径下的文件
Path : 权限所对应的路径
DY对路径的约定:
文件夹以 '/' 作为结尾, 否则为文件
例如
//arc/abc 表示 //arc/abc文件
//arc/abc/ 表示 //arc/abc文件夹
Comment : 权限注释
- 权限创建完成,并且权限被添加到 pic 组。
创建用户
-
在User区域右击,选择 New User。
-
在弹出的对话框中,填写如下信息,然后单击 OK, 创建完成。
单击Group参数右侧的图标,可以从列表中选择组。
添加完成后,如下图。
至此,已完成用户添加。
现在可以使用 "user1" 进行登录了。
设置技巧
-
显示 用户 所在的组以及权限
单击选择需要查看的 用户
单击如下图中绿框标记的图标
-
显示 组 所包含的用户以及权限
单击选择需要查看的 组
单击如下图中绿框标记的图标
-
将 多个用户 同时添加到 多个组里
先选择需要批量添加的用户
再选择相应的组
单击 Add Selected Users To Select Groups
注意:如果选择的用户已经在选择的组里,则会出现报错。
服务器备份
-
确认没有用户进行任何操作
-
将dys目录中的所有文件和文件夹拷贝至目标目录
注意: 如果是windows系统,需要确保目标文件夹的root目录大小写敏感属性已打开。
远程加密
dys本身不支持加密传输,需要借助dy_tls_server完成数据加密传输。
dy_tls_server使用 tls1.3 对数据进行加密传输。
如上图,有四台电脑分别运行dy, dys, dy_tls_client, dy_tls_server, 其ip地址和监听端口如图中所示。
数据传输过程: dy --> dy_tls_client, 加密 --> dy_tls_server, 解密 --> dys,返回数据 --> dy_tls_server, 加密 --> dy_tls_client, 解密 --> dy
设置dy_tls_server
使用Openssl生成证书
# private key pkcs8 format
openssl req -x509 -nodes -days 365 -newkey rsa:2048 -keyout key.pem -out cert.pem -subj "/CN=localhost"
如果需要更安全的加密,将上述 rsa:2048 换成 rsa:4096
查看证书指纹
openssl x509 -fingerprint -sha256 -in cert.pem
运行dy_tls_server
dy_tls_server.exe -l 0.0.0.0:7001 -t 192.168.2.11:7000 -c cert.pem -k key.pem
运行dy_tls_client
dy_tls_client.exe -l 0.0.0.0:7000 -t 192.168.2.10:7001
使用指纹验证连接
如果服务器的证书的指纹与指定的相同,才能建立连接
dy_tls_client.exe -l 0.0.0.0:7000 -t 192.168.2.10:7001 -f BD:97:H3:72:1A:7C:BB:N5:8C:27:87:65:5C:11:54:D1:F4:32:6B:DC:C3:72:AB:D8:9F:7C:EF:8D:AF:28:E3:26
dy连接
使用dy(dyui, dym)连接 192.168.1.11:7000就可以实现数据的加密传输了。
命令参数
dy命令及说明
命令 | 说明 |
---|---|
add | 标记添加文件 |
change | 更改号的创建、编辑、删除和查询 |
changelist | 更改列表的信息 |
edit | 标记编辑文件 |
erase | 擦除路径 |
delete | 标记删除文件 |
find | 查找文件 |
hash | 计算本地文件哈希值 |
history | 查看文件历史 |
info | 查看服务器信息 |
lock | 锁定文件 |
login | 登录 |
logout | 登出 |
ls | 列出路径下的文件 |
pending | 待处理号的创建、编辑、删除和查询 |
pendinglist | 待处理号的信息 |
revert | 还原文件的修改标记 |
shelve | 临时存放文件的书架 |
status | 查看文件状态 |
submit | 提交 |
sync | 同步文件 |
unlock | 解锁文件 |
unlock_login | 解锁由于多次登录失败而被锁定的用户 |
user | 用户的创建、编辑、删除和查询 |
group | 组的创建、编辑、删除和查询 |
workspace | 工作空间的创建、编辑、删除和查询 |
privilege | 权限的创建、编辑、删除和查询 |
示例
首先需要将dy的路径添加到环境变量, 添加教程参考 添加环境变量
路径表示
在DuiYing中,一般情况下,
如果路径以名称结尾,则表示文件,如 //arc/file。
如果路径以'/'结果,则表示文件夹,如 //arc/file/。
登录
输入dy可查看默认登录参数
C:\Users\test>dy
port -> 192.168.174.130:7000
user -> admin
workspace —> admin_workspace
如果没有默认登录选项则显示
no default login, please set DY_PORT and DY_USER variable.
设置登录参数
windows cmd
set dy_port=192.168.174.130:7000
set dy_user=admin
set dy_workspace=admin_workspace
windows powershell
$Env:dy_port="192.168.174.130:7000"
$Env:dy_user="admin"
$Env:dy_workspace="admin_workspace"
密码登录
dy login -p
直接登录
dy login
退出
dy logout
服务器信息
dy info
查看命令参数
dy --help
dy add --help
添加文件
dy add //arc/file
dy add //arc/dir/
编辑文件
编辑dir文件夹下, 所有以.exe为结尾的文件
-r参数后的内容是正则表达式
dy edit //arc/dir/ -r .exe$
删除文件
dy delete //arc/file
将文件添加到书架
将指定的文件添加到待定号2书架上
dy shelve -a --path //Access/edit/prefs/userPrefs.mel //Access/edit/prefs/windowPrefs.mel --pending 2
查询书架上的文件
查新待定号2, 3, 12书架上的文件
dy shelve -q --pending_list 2 3 12
获取书架上的文件
获取待定号2书架上的文件,--override参数表示覆盖本地文件
dy shelve -g --path //Access/edit/prefs/userPrefs.mel //Access/edit/prefs/windowPrefs.mel --pending 2 --override
删除书架上的文件
删除待定号2书架上的指定文件
dy shelve -d --path //Access/edit/prefs/userPrefs.mel //Access/edit/prefs/windowPrefs.mel --pending 2
提交文件
提交arc文件夹下正在标记修改的文件
dy submit //arc/
查找
查找//路径下,所有包含"date"的文件
dy find -n date -p //
计算本地文件哈希值
计算 D:/arc/file 的sha512的值
dy hash D:/arc/file --sha512
计算 D:/arc/file 的hash的值,该值被DuiYing用于文件校验
dy hash D:/arc/file --hash
查看文件历史
dy history -f //arc/file
锁定正在修改的文件
dy lock //arc/file
解锁
dy unlock //arc/file
撤销
撤销文件修改
dy revert //arc/file
撤销没有更改的文件
参数解释: -p 23 pending号为23 -u 如果文件没有修改,则撤销 说明: -u参数只能和-p搭配使用
dy revert -p 23 -u
列出文件
列出//目录下的文件
dy ls //
列出//目录下的文件夹
dy ls // --dir
列出//目录下的所有文件
dy ls // --recur
查看文件状态
dy status //arc/file
同步文件
同步 //arc/ 文件夹
dy sync //arc/
强制同步 //arc/ 文件夹,会覆盖本地已修改的文件
dy sync -f //arc/
同步readme文件到 change 1326的版本
dy sync //arc/readme@1326
同步readme文件到第5个版本
dy sync //arc/readme#5
工作空间
添加
添加一个名称为a_project_workspace, 路径映射规则为 // --> ./ , 根目录为 D:/project/, 描述为 A workspace for a project 的工作空间
dy workspace --add --name a_project_workspace --mapping "// --> ./" --root "D:/project/" --description "A workspace for a project"
修改
修改a_project_workspace的描述为 new description
dy workspace --edit --name a_project_workspace --description "new description"
查看工作空间
dy workspace --query --name a_project_workspace
删除工作空间
dy workspace --delete --name a_project_workspace
列出所有的工作空间
dy workspace --list
管理员
擦除
擦除路径
dy erase //Access/ -y
用户
添加用户
用户名为 user_a, 全名为 user_a, email为 user_a@email.com, 描述为 VFX member, 密码为 password, 添加到grp1组
dy user --add --username user_a --fullname user_a --email user_a@email.com --description "VFX member" --password password --groups grp1
修改用户
修改user_a 的描述为 A new team member
dy user --edit --username user_a --description "A new team member"
将 user_a 添加到 ass 组, support组
dy user --edit --username user_a --groups :+ass,support
将 user_a 从 ass 组中移除
dy user --edit --username user_a --groups :-ass
设置 user_a 只在 ass 组中
dy user --edit --username user_a --groups :!ass
查看用户
dy user --query --username admin
删除用户
dy user --delete --username user_a
解锁用户
dy unlock_login -n username
列出所有用户
dy user --list
组
添加
dy group --add --name grp1 --email grp1@email.com --description "a new group"
编辑
dy group --edit --name grp1 --email grp1_t@email.com
查询
dy group --query --name grp1
删除
dy group --delete --name grp1
列出所有组
dy group --list
权限
添加
为 grp1 组添加对路径 //arc/dir/ 的 写 权限, 注释为 permission for grp1
dy privilege --add --group_name grp1 --permission Write --path //arc/dir/ --comment "permission for grp1"
编辑
将id为11的权限设置为 Read(id可以通过dy privilege --list查看)。
dy privilege --edit --id 11 --permission Read
删除
删除id为11的权限设置项
dy privilege --delete --id 11
查询
dy privilege --query --id 11
列出所有权限
dy privilege --list
dym模块
准备
导入模块
import dym
登录和注销
默认登录
dy = dym.DY.new_with_default()
dy.connect()
登录
dy.login(passwd)
指定登录
ip = '192.168.80.132:7000'
user = 'user_write'
password = 'password'
workspace = 'admin_workspace'
dy = dym.DY(ip, user, workspace, password)
dy.connect()
注销
dy.logout()
工作空间
创建工作空间
dy.workspace_add(name, root, mapping, desc, lock)
dy.workspace_add(
'admin_workspace',
'D:/work/',
"// --> ./",
"workspace description",
False
)
编辑工作空间
dy.workspace_edit(name, new_name, root, mapping, desc, lock)
dy.workspace_edit(
'admin_workspace',
desc='This is workspace for project user.'
)
删除工作空间
dy.workspace_delete(name)
查询工作空间
dy.workspace_query(name)
列出所有工作空间
dy.workspace_list(max_number, offset, descending)
for w in dy.workspace_list():
print(w)
文件
标记添加
dy.add(path_list, rgx, pending)
# 添加 F:/DevTools/ 目录下的所有文件
dy.add(['F:/DevTools/'])
# 添加 F:/DevTools/ 目录下, 所有以 .png 为文件名结尾的文件
dy.add(['F:/DevTools/'], '.png$')
标记编辑
dy.edit(path_list, rgx, pending)
dy.edit(['F:/DevTools/'])
标记删除
dy.delete(path_list, rgx, pending)
dy.delete(['F:/DevTools/'])
添加到书架
dy.shelve_add(pending, path_list, rgx)
dy.shelve_add(21, ['//NoAccess/shelve/'])
查询书架上的文件
dy.shelve_query(pending_list, rgx)
dy.shelve_query([12, 13])
获取书架上的文件
dy.shelve_get(pending, path_list, rgx, shelve_override)
dy.shelve_get(pending=12, ["//Access/shelve/prefs/windowPrefs.mel"], shelve_override=True)
删除书架上的文件
dy.shelve_delete(pending, path_list, rgx)
path_list = [
'//Edit/edit/prefs/mainWindowStates/startupMainWindowState',
'//Edit/edit/prefs/markingMenus/menu_ChangePanelLayout.mel',
]
dy.shelve_delete(pending=12, path_list = path_list)
锁定文件
dy.lock(path_list, pending_list, rgx)
# 锁定文件
dy.lock(['//Char/2020/file'])
# 锁定文件夹
dy.lock(['//Char/'])
解锁文件
dy.unlock(path_list, pending_list, force, rgx)
# 解锁文件
dy.unlock(['//Char/2020/file'])
# 解锁文件夹
dy.unlock(['//Char/'])
文件状态
dy.status(path_list, rgx)
status = dy.status(['//Char/2020/'], '.png$')
for s in status:
print(s)
同步文件
dy.sync(path_list, change_list, force, rgx)
files = dy.sync(['//Char/2020/'], force=True)
提交
dy.submit(path_list, desc, rgx, pending)
submit_files = dy.submit(['F:/DevTools/'], 'desc for submit files',)
撤销
dy.revert(path_list, pending_list, rgx)
revert_files = dy.revert(['F:/DevTools/'])
# 撤销待处理号16下的所有文件
revert_files = dy.revert([], [16])
历史
dy.history(file, max_number, offset, descending)
for h in dy.history('//Char/logo.png'):
print(h)
擦除路径
dy.erase(path_list, rgx)
erase_info = dy.erase(['//Access/'])
erase_info['unable_to_delete_files'] 中包含的路径需要手动到服务器上删除。参考 擦除 章节。
查找
dy.find(name, path, include_deleted, rgx, max_number, descending)
# 查找 // 路径下的所有路径中包含'ToolsIcon'的文件
for f in dy.find('ToolsIcon', '//'):
print(f)
文件列表
dy.ls(path_list, ls_dir, recur, include_deleted, rgx)
# 列出 '//' 文件夹及子文件夹下所有文件,包括已删除文件
for f in dy.ls(['//'], recur=True, include_deleted=True):
print(f)
# 列出 '//' 文件夹及子文件夹下所有以 '.png' 为结尾的文件,包括已删除文件
for f in dy.ls(['//'], recur=True, include_deleted=True, rgx='.png$'):
print(f)
# 列出 '//Char/' 文件夹下的文件
for f in dy.ls(['//Char/']):
print(f)
# 列出 '//Char/' 文件夹下的文件夹
for d in dy.ls(['//Char/'], ls_dir=True):
print(d)
待处理号和更改号
新建待处理号
dy.change_new(desc)
new_pending = dy.change_new()
print(new_pending)
编辑列表描述
dy.change_edit(change_list, desc)
change_desc = dy.change_edit([7, 11], 'new description for 7, 11')
删除待处理号
dy.change_delete(pending_list)
del_pending = dy.change_delete([1,2,3,4,5])
将文件转移到指定的待处理号
dy.pending(path_list, pendinglist, new_pending, rgx)
pending_files = dy.pending(['F:/DevTools/'], [], 18)
获取更改列表
dy.change_list(status, query_user, query_workspace, query_host, max_number, offset, descending)
# 待处理列表
pendinglist = dy.change_list(status=0)
# 更改列表
changelist = dy.change_list(status=1)
查询列表信息
dy.change_list_status(change_list)
change_status = dy.change_list_status([7,11])
print(change_status)
待处理号包含的文件
dy.pendinglist_query(pending_list)
pending = dy.pendinglist_query([10])
print(pending)
更改号中包含的文件
dy.changelist_query(change_list)
change = dy.changelist_query([7])
print(change)
用户
创建用户
dy.user_add(username, fullname, passwd, groups, email, desc)
dy.user_add('user1', 'user1_fullname', 'password', 'grp_write', 'user1@email.com', 'user1 description')
编辑用户
dy.user_edit(username, fullname, passwd, new_passwd, groups, email, desc)
# 更改用户密码
dy.user_edit('user_read', passwd='password', new_passwd='pp12345')
# 将user1添加到 'grp_write'和'grp_access'组
dy.user_edit('user1', groups=':+grp_write, grp_access')
# 将user1从grp_write组中移除
dy.user_edit('user1', groups=':-grp_write')
# user1仅在grp_write组中
dy.user_edit('user1', groups=':!grp_write')
删除用户
dy.user_delete(username)
查询用户
dy.user_query(username)
解锁用户
dy.unlock_user(username)
列出用户
dy.user_list()
for u in dy.user_list():
print(u)
组
添加组
dy.group_add(grp_name, email, desc, groups)
dy.group_add("grp_write", 'write@emil.com', 'description for write permission', '')
编辑组
dy.group_edit(grp_name, email, desc, groups)
dy.group_edit("grp_access", 'grp_access@emil.com', 'description for access', '')
删除组
dy.group_delete(grp_name)
查询组信息
dy.group_query(grp_name)
列出所有组信息
dy.group_list()
权限
添加权限
dy.privilege_add(group_name, permission, path, comment)
dy.privilege_add('grp_read', 'Read', '//', 'read privilege for grp_read')
编辑权限
dy.privilege_edit(id, group_name, permission, path, comment)
dy.privilege_edit(2, 'grp_no_access', 'Write', '//', 'change comments')
删除权限
dy.privilege_delete_by_id(id)
dy.privilege_delete_by_id(3)
查询权限
dy.privilege_query_by_id(id)
dy.privilege_query_by_id(6)
列出所有权限
dy.privilege_list()
for p in dy.privilege_list():
print(p)
服务器
查看服务器信息
dy.info()
附录
接下来的章节将添加一些相关的教程
添加环境变量
按下快捷键 win
+ r
, 输入 sysdm.cpl
, 按回车键(Enter)
单击 高级 选项卡, 单击 环境变量
用户变量: 只有当前用户可以使用
系统变量: 所有登录到当前电脑的用户都可以使用
这里, 以 用户变量 为例进行说明
如果用户变量中, 不存在 变量为 Path 的项, 则需要单击 新建
变量名: Path
变量值: 此处填写dy所在的文件夹
单击 确定 , 再单击 环境变量对话框的 确定 就可以添加成功了
如果用户变量中, 已存在 变量为 Path 的项, 则选择 Path变量, 单击 编辑 , 添加dy所在的文件夹就可以了
DuiYing软件许可协议
请在安装和使用软件前,先阅读以下许可协议。
安装、下载、运行或以其他方式直接或间接使用该软件, 表示您
接受并遵守本许可协议中的条款和条件(包括与软件相关的任何订单中包含的
任何条款、条件和限制)
如果您不接受并同意本许可协议中的条款、条件和限制,则请勿安装、下载、运行或以其他方式直接或间接使用该软件。
软件仅是被许可使用,而非出售。
许可授权
许可证分为免费许可证、评估许可证、学术许可证和商业许可证,默认状态下,软件将被授予免费许可证。
在您同意并接受本许可协议的条款、条件和限制的前提下,DuiYing向您授予有限的、不可再许可的、非独占的、不可转让的、全额支付的、基于时间
或永久的(根据购买时间或在许可证有效的前提下,许可证里保存的生成时间)许可证,
允许您
a. 为自己的直接内部业务,在许可证有效期内,安装和使用软件
b. 根据需要复制DuiYing软件,但仅限于存档目的,且每个副本都必须保留DuiYing软件的原始副本中包含的版权和所有权信息。
许可限制
每个授权都需要单独的许可证。
您不得直接或间接导致、指示、指导或允许任何第三方对软件进行以下行为
a. 共享使用任一类许可证
b. 逆向工程、反编译、出售、出租、租赁、制造、改编、创建衍生品或以其他方式修改或分发
c. 删除DuiYing软件本身或任何副本上的版权或所有权信息
d. 违反或规避DuiYing软件或本协议中规定的任何技术限制
定义
软件: 指DuiYing计算机软件的机器可读目标代码程序(包括但不限于dy, dys, dyui,dym)以及当时的印刷品,数字用户手册、说明,在线帮助文档和DuiYing提供的技术手册。
免责声明
DuiYing对按“原样”提供的软件产品不提供任何保证,没有任何形式的明示的或暗示的保证,包括但不限于任何适销性、非侵权或特定用途适用性的保证
责任限制
DuiYing在任何情况下均不对因使用软件造成的任何损害负责,包括但不限于利润损失,业务中断或信息丢失。
在任何情况下,DuiYing均不对数据丢失或间接、特殊、偶然、后果性或其他损害负责
DuiYing对软件的内容或其任何一部分不承担任何责任,包括但不限于其中包含的错误或缺陷、遗漏、诽谤、商标权、业务中断、隐私损失或机密信息的泄露。
软件保证
DuiYing Project保证软件按照DuiYing所提供的文档运行。如果遇到软件缺陷,并且经我们确认是软件导致的,我们会尽力修复。
对修复结果,我们不进行任何保证。
其他
DuiYing Project 特此保留软件和本协议未明确授予的所有权利,以及对本协议的解释和修改权。
隐私政策
DuiYing 致力于最大程度地保护用户的隐私。为了向您提供更优质的产品和服务,我们可能会收集必要的用户信息。所有信息的收集和使用将严格遵守相关法律法规,确保您的个人信息安全。
信息的使用和保密
搜集的信息仅仅被用来验证许可证和提供服务。
我们不会将搜集的信息透露给第三方。
价格
基础版 | 专业版 | 企业版 | |
---|---|---|---|
用户数量 | <= 2 | <= 50 | > 50 |
价格 | 0 | 20元/用户/月 -------------------- 200元/用户/年 | 联系我们 |
管理员数量 | 不限 | 不限 | 不限 |
dy命令行 | |||
Python | |||
离线文档 | |||
技术支持 | 基础支持 | 标准支持 | 优先支持 |
支持方式 | 邮件 | 邮件、即时通讯 | 邮件、即时通讯 |
响应时间 | 不保证 | < 24小时(节假日除外) | < 24小时(节假日除外) |
问答
-
DuiYing版本控制软件是免费软件吗?
DuiYing版本控制软件分为 基础版 、 专业版 和 企业版。 详见 价格, 或联系 contact@duiying.io 进行咨询。 -
DuiYing版本控制是否提供永久使用许可?
我们只提供月订阅或年度订阅的许可。 具体请参考页面 价格 -
DuiYing版本控制软件是否可以对外网开放?
可以。具体请参考远程加密。 -
软件许可到期后,服务器还可以启动吗?
软件许可到期后,服务器可以正常启动。服务器会变成只读状态,即从服务器获取文件不受影响。
联系我们
如您在使用中,遇到任何问题,欢迎与我们联系。
联系方式
邮箱
contact@duiying.io