DuiYing版本控制介绍

更新
dy_tls_server更新至 1.3.1

DuiYing是一款集中式的版本控制软件,从文本到图片,你可以使用它对任意类型的文件进行版本控制。

集中式,意味着所有文件的历史版本都存放在服务器上。
如果你想修改一个文件,需要先从服务器上获取文件到你自己的电脑上,然后修改文件,再上传到服务器上。

通过DuiYing,你可以:

  • 添加、编辑和删除文件
  • 查找文件
  • 查看文件的历史版本
  • 查看项目的任一阶段
  • 管理文件的访问权限
  • 支持dy命令行
  • 支持Python
  • 加密传输

软件特点

  • 简单易学
    我们提供友好的文档、视频和技术支持,让您的团队可以轻松地掌握软件的使用。

  • 集中式的版本控制
    所有的文件历史版本都会被保存到服务器上,方便运维管理。

  • 区分大小写
    即使服务器运行在windows系统上,DuiYing的文件路径都是区分大小写的。

  • 支持非英文路径
    采用utf8编码,文件路径支持非英文字符。

  • 精确到文件的权限管理
    你可以对任意的文件或者文件夹设置访问权限。

  • 节省服务器空间
    在服务器上,内容相同的文件只保存一份,减少空间占用。

本教程将全面介绍DuiYing版本控制软件的功能,内容清晰易懂,适合学习参考。

功能预览

在图片上右击,选择"在新窗口打开",可以查看更清晰的动图。
或按住 Ctrl, 滚动鼠标滚轮调整网页缩放。

登录
login

添加文件 add files

编辑文件 edit files

删除文件 delete files

获取历史文件 get history

视频教程

介绍


下载

服务器设置


下载

客户端下载和安装


下载

登录


下载

界面更新


下载

添加文件


下载

编辑文件


下载

删除文件


下载

锁与解锁


下载

还原


下载

同步文件


下载

用户、组和权限设置


下载

下载说明

DuiYing版本控制程序组件

程序说明
dys服务器程序
dy客户端命令行程序
dyui客户端界面程序
dym客户端Python库(支持python3.12.7 64-bit)
dy_tls_clienttls加密客户端
dy_tls_servertls加密服务端

下载链接

下载之前,你需要阅读并接受 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 安装

  1. 解压 dyui-*-x86_64-pc-windows-msvc.7z 到安装目录, 建议安装在 %localappdata% 目录下。
  2. 双击 dyui/bin/dyui.exe 运行程序。
  3. (可选)创建 dyui/bin/dyui.exe 的快捷方式到桌面。

注意

  1. 如果程序被安装在需要管理员权限的目录(例如“C:\Program Files”),则需要 以管理员身份运行 dyui.exe
  2. 如果运行dyui遇到VCRUNTIME140_1.DLL was not found报错, 需要安装vc++库,官方安装连接
    The Visual C++ Redistributable for Visual Studio 2015-2022

dym 安装

  1. 安装 python3.11.4
  2. 下载 dym-*-cp311-none-win_amd64.7z 并解压,在命令行运行 pip install dym-***-win_amd64.whl

dy 安装

  1. 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/ 目录下。

  1. 下载 dys-v1.3.0-x86_64-unknown-linux-gnu.tar.xz

  2. 切换到root。

su -
  1. 创建 /opt/ 文件夹。
mkdir -p /opt/
  1. 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/
  1. 进入/opt/dys, 添加可执行权限。
cd /opt/dys
chmod u+x dys   
  1. dys初始化,添加管理员名称和密码。

为了安全, 管理员的密码建议15位以上, 需要有一定的复杂度(比如,密码同时包含字母大小写,数字和特殊符号等), 密码尽量保持随机性, 不夹带有意义的单词或数字

./dys init
  1. 添加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
  1. 重新加载systemd。
systemctl daemon-reload
  1. 添加开机启动。
systemctl enable dys
  1. 启动dys服务, dys默认监听端口为 7000
systemctl start dys
  1. (可选)配置dys, 参数请参考 配置文件
vi /opt/dys/dys.cfg
  1. 确认dys运行状态。
systemctl status dys
  1. 如果安装了防火墙,需要开放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 files

双击dys.exe, 此时程序将会生成一些文件夹, 如下图
essential dirs

文件夹作用
data存放保存到服务器上的文件数据
license存放license文件
log存放dy服务器日志文件
root存放文件路径, 此文件夹需要区分大小写

由于windows存在路径长度限制, data和root文件夹都会生成很长的路径,
所以简短的安装路径有助于避开路径过长的问题.

设置root文件夹,使其可以区分大小写

Windows系统默认情况下,文件或文件夹是大小写不敏感的,需要手动开启
按下快捷键 Win + r, 输入 appwiz.cpl, 然后按回车键
单击左上角的启动或关闭 Windows 功能, 在弹出的对话框中, 找到并 勾选 适用于Linux的Windows子系统, 单击 确定 并重启系统。
check_sublinux_system 使用快捷键 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 目录。
命令执行成功, 则如下图, 显示已启用目录的区分大小写属性
case sensitive

dys初始化

按住Shift, 在dys文件夹空白处右击, 选择 "在此处打开Powershell窗口"
open powershell
输入 .\dys.exe init 进行初始化, 并设置dy管理员账户的用户名和密码
此处, 我们设置用户名为 admin, 密码为 p

此处的用户名和密码只是简单设置
在实际项目应用中, 管理员用户名可以是任意名称(由字母、数字或下划线组成, 以字母或下划线开始), 为了安全, 管理员的密码建议15位以上, 需要有一定的复杂度(比如,密码同时包含字母大小写,数字和特殊符号等, 密码尽量保持随机性, 不夹带有意义的单词或数字)。

dys init
设置完毕后, 需要再按一次回车键完成

启动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_port0.0.0.0:7000监听端口
arc_rootrootroot文件夹,用于存放文件指针,此文件夹中需要区分大小写
hash_data_rootdata用于存放文件
log_segment_size1G日志文件大小,超过的部分会被切分
login_expired_time60 * 12登录有效期,单位是分钟,过期将需要重新登录
login_failed_tolerance10用户登录失败的次数超过该值会被锁定一段时间
login_failed_sleep30用户被锁定的时间, 单位为分钟
password_min_length5密码最低长度,值若为0,则没有长度限制

登录

运行 dyui\bin\dyui.exe, 输入 ServerUser, 如下图
login interface
Server 为dys服务器的地址
user 为上一节中, 初始化dys时所创建的管理员

-- 如何查看服务器地址
到运行dys服务的电脑上,按 Win + r, 输入 cmd, 然后按回车键
win r cmd
在命令行窗口输入 > ipconfig 即可查看服务器ip地址
login ipconfig

由于是第一次登录,所以我们需要创建 工作空间(Workspace)

-- 什么是工作空间(Workspace)
工作空间(Workspace)就是定义了 dy路径 和 本地路径 转化的规则
例如, 文件A,
在dy上的路径为 //arc/files/文件A
在本地的路径为 C:\files\文件A
当我们从服务器上获取 //arc/files/文件A 到本地时,就需要将服务器路径 //arc/files/文件A 转化为本地路径 C:\files\文件A
这两个路径的转化规则,就是由工作空间(Workspace)决定的

  1. 单击 Workspace 参数框右侧的图标
    login workspace
    此时需要输入登录密码, 输入上一节中设置的密码, 然后按回车即可
    login passwd
  2. 在 Select Workspace 对话框空白处右击,选择New, 创建工作空间
    select workspace
  3. 在弹出的对话框中,设置 Workspace Name 为 admin_workspace,设置 Workspace Root 为需要进行文件管理的目录, 设置完成后,单击 Apply And Close 就可以新建完成。
    new workspace
    Workspace新建完成后,在Select Workspace对话框中就可以看到刚刚新建的workspace,如下图
    select workspace v1
    选择 admin_workspace, 然后单击 OK
    经以上步骤,工作空间就会被添加到登录界面的 Workspace 选项中
    login interface with workspace
    勾选 Set as default(设置为默认),这样下次启动dyui, 将默认显示此次的登录信息
    单击 Login 登录

界面语言

dyui目前支持中文和英文界面。
"en" 为英文
"zh" 为中文
login interface lang

可以通过 "编辑(Edit)" -> "偏好(Preferences)", 对字体进行设置。
经测试,以下字体对中文支持比较友好:
Serif Normal
Yu Gothic UI Normal

文件操作

在左侧目录树中,包含 ArcWorkspace 两块面板
Arc 显示的是服务器上的文件
Workspace 显示的是本地电脑上的文件
tree view panel

DuiYing目前包含以下文件操作

  • Add(添加文件)
  • Edit(编辑文件)
  • Delete(删除文件)

这些操作只是通知dy服务器,你正在对文件进行修改,服务器会对你操作的文件打上相应的标记。
在你Submit(提交)之前, 服务器上的文件版本不会更改。
现在,请先把需要进行版本控制的文件,拷贝到我们在上一节设置的 Workspace Root 目录下,接下来,我们将对文件进行 添加编辑删除 操作

添加文件(Add)

右击需要添加的文件或文件夹,选择添加(Add...)
right click add

在弹出的对话框中,单击右下角的 OK .
add file dialog

若添加成功,则显示如下
add file mark

不过这仅仅是标记添加,如果想提交到dys服务器,还需要按下面的步骤进行操作

右击刚刚被标记的文件或文件夹,选择提交(Submit...)
add submit files

在弹出的对话框中,添加针对此次提交的描述,然后单击Submit(提交)按钮,等待提交完成
add submit dialog

提交成功后,图标变化如下
add finish submit

当前图标表示 本地已有版本为最新版.
上图中右侧的 1|1 , 左侧的1表示本地拥有的版本,右侧的1表示该文件在服务器上的版本数量。

编辑文件(Edit)

编辑只能操作服务器上已有的文件

右击文件或文件夹,选择编辑(Edit...)
right click edit

在弹出的对话框中,单击右下角的 OK .
edit file dialog

若编辑成功, 则显示如下图, 此时你就可以修改文件了
edit file mark

修改文件完成后, 到dyui界面, 按 F5 刷新界面, 如果dyui检测到文件被修改, 则会把文件标记为深色, 如下图
check changed file

右击文件或文件夹,选择 提交(Submit...)
edit submit files

在弹出的对话框中,添加针对此次提交的描述,然后单击 Submit(提交) 按钮,等待提交完成
edit submit dialog

提交成功后,图标变化如下
edit finish submit

此时,我们注意到文件后面的版本信息变成了 2|2, 即该文件在服务器上有两个版本,本地版本为第2版

有时, 你可能会在文件图标的右侧看到修改的标记, 像下图这样
edit by other
这说明这些文件正在被别人修改。
按住 Ctrl 键, 然后将鼠标放到文件上面, 停留2秒左右, dyui就会显示正在编辑该文件的用户
file tips

dy是允许两个或两个以上的人同时编辑文件的, 但提交的时候只能保留一个人的修改。
例如, 你和 用户A 在同时编辑一个文件, 如果 用户A 先提交, 然后你再提交, 此时该文件的最新状态仅会保留你提交的修改, 而 用户A 提交的修改将会变成历史版本。

如何避免这种编辑冲突, 请参考 锁(Lock)

删除文件(Delete)

删除只能操作服务器上已有的文件

右击文件或文件夹,选择删除(Delete...)
right click delete

在弹出的对话框中,单击右下角的 OK .
delete file dialog

此时,如果本地文件与服务器一致, 则本地文件会被删除, 显示如下
delete file mark

如果本地文件与服务器不一致, 则本地文件会被保留。

右击文件,选择提交(Submit...)
delete submit files

在弹出的对话框中,添加针对此次提交的描述,然后单击Submit(提交)按钮,等待提交完成
delete submit dialog

提交成功后,如果需要查看已删除的文件需要激活 显示已删除文件(show deleted files)
delete finish submit

此时,我们注意到文件后面的版本信息变成了 0|3, 即该文件本地没有版本信息, 在服务器上有3个版本。
删除操作并不会真正删除文件,只是新增了一个处于删除状态的版本。

重命名

目前DuiYing没有直接的命令来重命名。

可以通过 删除(Delete)和添加(Add)来完成重命名操作。

书架(Bookshelf)

有时候,你需要把文件共享给别人,但又不想影响服务器上的文件版本,此时,你可以用书架功能。它会把文件放在一个临时的位置,方便共享。

你可以通过“上架(Shelve)”将文件放到书架上,也可以通过“下架(Unshelve)”将文件从书架上删除。

别人可以通过“获取(Get)”来下载书架上的文件。

接下来,让我们一块看一下如何进行上述操作。

上架(Shelve)

在“待定”面板中,每个待定号都会包含一个书架,如下图。

bookshelf_01

你可以将“档案”或“工作空间”里的文件拖拽至“书架”进行上架。

bookshelf_02

也可以将待定号中的文件拖拽至“书架”进行上架。

bookshelf_03

如果想上架整个待定号中的文件,需要右击待定号,选择“上架”。

bookshelf_04

在上架的对话框中,可以通过“正则表达式”来过滤上架的文件。

“上架”仅会将本地的文件上架,如果本地文件不存在或读取失败,则会出现如下警告信息,不会上架。

bookshelf_05

用户需要拥有Edit权限,才可以上架文件。

获取(Get)

你可以通过找到书架所在的待定号,选择单个文件进行获取,或者选择“书架”来获取书架上的所有文件。(右击图像在新窗口打开会更清晰)
bookshelf_06

如果想查看书架上的文件在档案中的路径,则需右击文件,选择“在档案中显示”。
bookshelf_07

如果想快速找到待定号,可以使用菜单 “编辑” -> “跳转到书架”。
bookshelf_08

如果本地文件已存在,则需要勾选对话框中的“覆盖”选项才可以获取成功。
bookshelf_09

用户需要对路径拥有Read权限,才可以获取。

下架(Unshelve)

如果你想停止共享书架中的文件,可以通过“下架”来删除书架中的文件。

在书架中,可以选择文件进行下架,
bookshelf_10

也可以右击“书架”,下架当前书架中的所有文件。
bookshelf_11

锁(Lock)

当你标记添加,编辑或删除文件后,如果不想文件被别人提交,则需要锁上文件
文件被锁后,只有锁上文件的人用户可以提交这些文件

一个文件, 在标记添加、编辑或删除之后, 提交之前, 才可以上锁。在提交到服务器后, 文件会自动解锁。

右击文件或文件夹,选择上锁(Lock)
right click lock

完成后,文件左下方会添加一个锁的图标
lock finish

解锁(UnLock)

右击文件或文件夹,选择解锁(Unlock)
right click unlock

完成后,文件左下方锁的图标将会去除
lock finish

还原(Revert)

还原(Revert)操作将取消文件的添加、编辑和删除标记以及锁。

选择文件或文件夹,右击,选择 还原(Revert)
revert file
完成后,标记被取消
revert file finish

在pending上右击可以选择 Revert if unchanged, 相应的pending列表中,没有被修改的文件会被 还原(Revert)
revert if unchanged

与左侧的文件树相比,Revert of unchanged 检测文件是否更改会更加可靠。

移除本地文件(Remove Local Files)

移除本地文件(Remove Local Files)将会删除本地文件,服务器上的文件不受影响
选择文件或文件夹,右击,选择 移除本地文件(Remove Local Files)
remove local files

移除完成后,本地的文件将会被移除
remove local files finish

同步文件(Sync Files)

同步文件(Sync Files) 可以把dy服务器上的文件获取到本地

选择需要获取的文件或文件夹,右击,选择同步最新文件(Sync Latest),即可把文件的最新版获取到本地。
sync latest

右击文件或文件夹, 选择 Open Path, 会打开并选择路径
login open path

如果你需要获取特定的版本,可以在右击后,选择 Sync...,在弹出的对话框,#后面的输入框内填上需要获取的版本号,然后单击Sync同步文件
sync file dialog

在Sync Files...对话框中
# 表示引用版本的序号
@ 表示引用更改(change)号
有关更改号的内容,请查看 pending and change

如果dyui检测到本地文件被修改, 或者本地文件被手动删除(不是使用 移除本地文件(Remove Local Files) 删除的),同步文件将不会获取文件,此时你可以通过 Sync Files... 操作,在弹出的对话框中勾选 Force ,这样当你单击Sync按钮后,dyui会强制同步本地文件到你指定的版本, 同时本地文件会被 覆盖 sync force

待处理(pending) 和 更改(change)

dy将会用一个数字来记录你每一次对文件的修改
pending 用来组织你正在修改的文件
change 用来记录你每一次提交到dy服务器的修改

接下来我们将通过一个例子来说明pending和change的使用
比如你今天收到一个任务需要上传5张图片和一份文件, 结构如下图
animal folder

接下来开始添加,先选择 图片pic_01.png ~ pic_05.png,右击,选择添加(Add...) add files
在弹出的对话框中单击OK后,在待处理(pending)面板会自动创建一个待处理号(pending number),单击左侧的展开按钮,你会发现刚刚添加的文件都会组织在这个号码里
pending

接着继续添加文件,右击 "文件.txt",选择添加(Add...),在弹出的对话框中,pending选择刚刚新建的待处理号,也就是包含我们刚刚添加的5张图片的待处理号,单击OK
pending-2

此时你会发现"文件.txt"和刚刚的5张图片在同一个待处理号中
pending-3

接下来就是提交(Submit...) 右击待处理号 11 ,选择提交(Submit...),在弹出的对话框中,填写针对这些文件的描述,"5张图片和一份文件",单击OK,等待提交完成
submit

这样,dy将会用一个唯一的更改号来记录此次修改。如果想要查看更改号,单击 view,选择 Submit,就可以找到你刚刚提交的内容。

submit 1

submit 2

此时,你就可以发邮件通知,"任务完成了,更改号是 11 ".

此时, 其他人可通过以下步骤查看你的提交 单击菜单 View -> Submit ,打开 Submit面板
Filter 后的选项改为 User, 单击右侧的 刷新 按钮
filter user

此步骤是用来过滤Submit结果的。
由于此处 User 为空,所以会查看所有人的提交。
如果 User 为"admin",则仅会查看"admin"的提交。

右击更改号,选择 View Change... , 就可以查看更改号的相关信息
submit 3

Submit 面板中,如上图,红色三角表示当前登录用户的提交,蓝色三角表示其他用户的提交。
待处理号和更改号不一定总是相同的。
查看已提交的更改号,需要到通过菜单 View --> Submit ,在 Submit 面板下查看。
如果更改号顺序错乱,可单击 Filter User 下方的 change 对更改号进行排序。

如果想同步到本地,单击 Sync,就可以获取此次更改的文件, 勾选 Force 则会覆盖本地文件
submit 4

查找(Find)

单击菜单View -> Find,打开查找面板
view find

输入需要查找的范围和关键字,按回车键(Enter)或单击右侧查找图标,就可以开始查找了
Find Path 查找路径,路径越精确,查找速度越快
Find Name 需要查找的关键字
find panel

历史(History)

单击菜单View -> History, 打开历史面板
view history

单击需要查看历史的文件,就可以显示文件的历史版本了
view history panel

回滚(Rollback)

目前duiying并没有直接的命令来回滚历史,但可以通过以下步骤来回滚历史。

回滚文件历史

假设文件file.log有5个版本,我们需要将其第3版变为最新版本。

如果文件的最新版不是删除状态:

  1. 获取file.log文件的第3版。
  2. 将本地file.log文件更名为file_3.log(任意文件名都可以,只要不和当前文件夹下的其他文件名冲突)。
  3. 获取file.log文件至最新版。
  4. 编辑(Edit)文件。
  5. 删除本地的file.log文件,将file_3.log改名为file.log。
  6. 提交(Submit)file.log文件,并在提交对话框的描述中添加类似"回滚至版本3"的说明。

如果文件的最新版是删除状态:

  1. 获取file.log文件的第3版。
  2. 将file.log文件更名为file_3.log。
  3. 获取file.log文件至最新版。
  4. 将file_3.log改名为file.log。
  5. 添加(Add)文件。
  6. 提交(Submit)file.log文件,并在提交对话框的描述中添加类似"回滚至版本3"的说明。

回滚项目历史

假设 //project/ 最新提交号为1000,对应本地project文件夹,需要回滚到提交号为900的状态。

  1. 删除(Delete)//project/, 然后提交(Submit),并删除本地的project文件夹。
  2. 强制获取//project/至900。
  3. 将本地project文件夹改名为project_900。
  4. 获取//project/至最新状态。
  5. 将project_900改名为project。
  6. 添加(Add) //project/目录并提交,在提交对话框的描述中添加"回滚至提交号900"的说明。

工作空间

工作空间是用来将服务器的路径对应到本地的路径, 一个工作空间可以被多人在不同的电脑上使用。
通过工作空间,你可以:

  • 制定服务器路径到本地路径的转化规则
  • 忽略不需要的路径

新建工作空间

  1. 单击菜单 View -> Workspace, 打开工作空间的面板。
  2. 在工作空间的空白处右击,选择 New, 在弹出的对话框填写相应的内容。
    workspace right click new
    workspace new dialog
    Workspace Name 设置工作空间的名称。
    Workspace Root 设置工作空间的根目录,设置完成后,所有从服务器上获取的文件都会在这个文件夹内。
    Mapping 设置服务器路径与本地路径的对应关系。
    Description 设置工作空间的描述。
  3. 单击 ApplyApply 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)"。

如下图,其中绿线标出了用户可以自行修改的部分,包括密码、邮件和描述。

change user

如果用户修改了密码,则需要重新登录。

管理员

DY可以进行用户、组和权限的管理。

接下来,我们将会创建一个用户 "user1", 并且让其可以对路径 "//pictures/" 进行读(获取文件到本地)和写(修改服务器文件)。

创建步骤:

  • 创建组 pic (组的名称可以根据需要修改)
    由于dy是通过组进行权限设置的,所以需要先新建一个组。

  • 设置 pic 组的权限

  • 创建 user1,并加入到 pic

在dyui界面, 通过菜单 User -> Admin 打开管理界面
user admin
admin panel

日志

dy, dyui, dym, dys在运行过程中会产生日志。

程序  日志文件名路径
dydy.loginstall_dir/log/
dyuidyui.loginstall_dir/log/
dymdym.log%appdata%/dy/
dysdys.loginstall_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)。

edit erase

在弹出的对话框中,勾选"确认擦除"(Confirm Erase),单击"擦除"(Erase)。

erase dialog

擦除后,路径以及路径下的所有文件的历史都会被永久删除。

如果遇到"擦除错误",如下图。

erase error

这是因为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

创建组

  1. 在Group区域右击,选择 New Group
    new group

  2. 在弹出的对话框中,填写如下信息,然后单击 OK, 组创建完成。
    new group dialog
    new group complete

设置权限

  1. 新建权限
    在最右侧一栏右击, 选择 New Permission
    new permission

  2. 填写如下信息, 单击 OK 完成创建。
    new permission dialog
    Group : 将权限添加到组, 单击右侧列表按钮可以选择组
    new permission list groups
    Permission : 权限

  • NoAccess 没有权限
  • Access    可以看到路径
  • Read     可以获取路径文件
  • Edit      可以标记修改文件
  • Write     可以提交
  • Admin    可以进行用户、组和权限的管理

    以上权限, 下一级将会包含上一级的权限
    比如, Edit 权限包含 ReadAccessNoAcess的权限
    也就是说, 如果一个组是Edit权限, 那么这个组也可以看到文件路径, 获取路径下的文件

    Path : 权限所对应的路径
    DY对路径的约定:
    文件夹以 '/' 作为结尾, 否则为文件
    例如
    //arc/abc   表示 //arc/abc文件
    //arc/abc/  表示 //arc/abc文件夹

    Comment : 权限注释
  1. 权限创建完成,并且权限被添加到 pic 组。
    new permission complete

创建用户

  1. 在User区域右击,选择 New User
    new group

  2. 在弹出的对话框中,填写如下信息,然后单击 OK, 创建完成。
    new group dialog
    单击Group参数右侧的图标,可以从列表中选择组。
    new group list groups
    添加完成后,如下图。
    new group complete

至此,已完成用户添加。

现在可以使用 "user1" 进行登录了。

设置技巧

  • 显示 用户 所在的组以及权限
    单击选择需要查看的 用户
    单击如下图中绿框标记的图标
    user relative

  • 显示 所包含的用户以及权限
    单击选择需要查看的
    单击如下图中绿框标记的图标
    group relative

  • 多个用户 同时添加到 多个组里
    先选择需要批量添加的用户
    再选择相应的组
    单击 Add Selected Users To Select Groups
    users to groups
    注意:如果选择的用户已经在选择的组里,则会出现报错。

服务器备份

  1. 确认没有用户进行任何操作

  2. 将dys目录中的所有文件和文件夹拷贝至目标目录

注意: 如果是windows系统,需要确保目标文件夹的root目录大小写敏感属性已打开。

远程加密

dys本身不支持加密传输,需要借助dy_tls_server完成数据加密传输。 dy_tls_server使用 tls1.3 对数据进行加密传输。 admin tls connection
如上图,有四台电脑分别运行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)
单击 高级 选项卡, 单击 环境变量

env variable

env variable dialog

用户变量: 只有当前用户可以使用
系统变量: 所有登录到当前电脑的用户都可以使用

这里, 以 用户变量 为例进行说明

如果用户变量中, 不存在 变量为 Path 的项, 则需要单击 新建 变量名: Path 变量值: 此处填写dy所在的文件夹
env variable new
单击 确定 , 再单击 环境变量对话框的 确定 就可以添加成功了

如果用户变量中, 已存在 变量为 Path 的项, 则选择 Path变量, 单击 编辑 , 添加dy所在的文件夹就可以了
env variable edit

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
价格020元/用户/月
--------------------
200元/用户/年
联系我们
管理员数量不限不限不限
dy命令行
Python
离线文档
技术支持基础支持标准支持优先支持
支持方式邮件邮件、即时通讯邮件、即时通讯
响应时间不保证< 24小时(节假日除外)< 24小时(节假日除外)

问答

  • DuiYing版本控制软件是免费软件吗?
    DuiYing版本控制软件分为 基础版专业版企业版。 详见 价格, 或联系 contact@duiying.io 进行咨询。

  • DuiYing版本控制是否提供永久使用许可?
    我们只提供月订阅或年度订阅的许可。 具体请参考页面 价格

  • DuiYing版本控制软件是否可以对外网开放?
    可以。具体请参考远程加密

  • 软件许可到期后,服务器还可以启动吗?
    软件许可到期后,服务器可以正常启动。服务器会变成只读状态,即从服务器获取文件不受影响。

联系我们

如您在使用中,遇到任何问题,欢迎与我们联系。

联系方式

邮箱
contact@duiying.io