uVersion
简体中文
下载 →

Wiki

上传一个已有项目

把已经在磁盘上的 Unreal 项目纳入 uVersion 管理:就地初始化文件夹,检查排除规则,然后从 Pending 标签页执行签入。附带首次上传的常见陷阱。

你的磁盘上有一个 Unreal 项目,想把它纳入 uVersion 管理。本页正好涵盖这种情况: 你的文件不会移动,文件夹就地连接到服务器,然后上传。

相反,如果你是从服务器上已经创建好的空仓库开始,那你需要的是 克隆,而不是本页。

开始之前

关闭 Unreal 编辑器 一次上传结束时,上传的文件会在磁盘上重新变为只读。而 uVersion 插件在编辑器打开时, 会自动为所有仍可写的资产加锁:如果操作期间编辑器是打开的,它会立刻重新为你刚上传的 内容取得锁。由于锁永远不会自行过期,你会在毫不知情的情况下一直持有它们。

还要确认你将要声明的文件夹确实是仓库想要的根目录.uproject 文件必须位于该根目录之下最多三层,否则客户端不会把该项目识别为 Unreal 项目,Unreal 面板将始终不显示。

初始化文件夹

1. 打开 Open Repository 窗口

在侧边栏打开 Workspace,然后点击 Open Repository (或标签栏的“+”)。打开的窗口首先是用来克隆一个已有仓库的:这不是你在这里想要的。 一直滚动到最下面,在仓库列表和 Open Local Repository... 下方,点击 New Repository from a Project Folder...

看不到这个按钮? 它只对 admin 角色显示,因为它会在服务器上创建一个仓库。 参见创建仓库
Open Repository 窗口的底部:Download files after clone 复选框、Open Local Repository 按钮,以及其下方的 New Repository from a Project Folder 按钮。

2. 选择项目根目录

会打开一个文件夹选择器,标题为 Select your project folder to create a new repository。选择你项目的根目录, 即包含 .uproject 的文件夹,或包含它的文件夹。不会复制或移动任何东西: 这个文件夹会留在原处。

3. 为仓库命名并创建

表单会显示在窗口本身之中,就在你刚点击的按钮的位置,而不是在一个新的 对话框里。它会重述所选的路径,并提供一个用文件夹名称预填的 Repository name 字段。按需调整,然后点击 Create & Open。只要名称为空,按钮就保持不可用, 而且这个名称在整个服务器上必须唯一。

Open Repository 窗口中的就地创建表单:所选文件夹的路径占一行,用文件夹名称预填的 Repository name 字段,Create and Open 按钮和 Cancel 按钮。

此时客户端只做四件事,别无其他:

  • 在服务器上创建仓库;
  • 在你的项目里写入一个 .uversion/ 文件夹,记录仓库、服务器地址以及 工作区的所有者账户;
  • 写入一个 .uversionignore 文件,仅在尚不存在时
  • 不下载任何东西,也不触碰你的任何文件。
这个文件夹成为你的 初始化该文件夹的账户成为它的所有者,此后命令行在这个文件夹里正是以这个身份操作。 同事不应复制你的文件夹:他应当在自己那边克隆仓库,否则会得到消息 This workspace belongs to ...

检查排除规则

现在正是好时机,而且比事后简单得多。打开根目录的 .uversionignore 文件:它列出了永远不会被上传的内容。默认模板已经排除了 Unreal 项目会自行重新生成的东西, 尤其是 Binaries/Build/DerivedDataCache/Intermediate/Saved/Packages/,以及各开发环境的项目文件。

有两条规则无法修改,最好了解一下:

  • Plugins/uVersion 始终被排除。Unreal 插件从不纳入版本管理: 每台机器通过桌面客户端安装与它自己引擎相对应的版本。在仓库中看不到它是正常的。
  • 包含一个名称恰好为 ThirdParty 的文件夹的路径,无论你写什么规则, 都永远不会被排除。因此你的第三方库始终会上传。

由于 Packages/ 被排除,打包好的构建永远不会进入仓库:它通过构建发布功能分发, 而不是通过版本管理。

上传

4. 在 Files 标签页查看状态

你的整个项目都会以 untracked 状态出现:在你这边存在,尚未在服务器上。 这是一个刚初始化的文件夹的正常状态。树上方的计数徽标概括了同一件事 (N local only),Rev 列处处显示 v0Pending 标签页也已经带有一个相同数字的徽标:客户端自己发现了你的文件, 无需手动“添加”任何东西。

初始化之后的 Files 标签页:树上方的 N local only 徽标,每行的 untracked 状态,值为 v0 的 Rev 列,以及 Pending 标签页上相同数字的徽标。

5. 打开 Pending 标签页

你的所有文件都已经在那里,标记为 add,归入 Default 变更列表。左列显示将要上传内容的树状结构,右侧面板显示扁平列表,每行带一个 Diff 和一个 Remove。这里只移除你永远不想纳入版本管理的东西: 对“这个文件夹不该在这里”的正确回应,是在 .uversionignore 里写一条规则, 而不是逐行 Remove。

首次上传时的 Pending 标签页:左侧是文件的树状结构,右侧是 Default 变更列表,每个文件标记为 add,每行有 Diff 和 Remove 按钮,Describe your changes 区域,以及 Checkin all 按钮。

6. 描述,然后 Checkin all

Describe your changes... 里写一条消息:这是必填的,只要该区域为空, Checkin all 按钮就保持不可用。“项目首次上传”就足够了。然后点击 Checkin all (N)

Default 变更列表面板:填入了首次上传消息的 Describe your changes 区域,带有文件数量、已激活的 Checkin all 按钮。
上传会为你预留 签入本身会为它上传的文件加锁,等修订版本验证通过后再释放。首次上传时这没有影响, 这些文件只有你一人。在一个已经共享的仓库里,某个被别人预留的文件会导致上传失败: 参见下方的陷阱。

随后上传会自行进行,分为若干阶段显示在标题栏中:分块、检查服务器已经持有的内容、传输, 然后验证。其间你可以切换标签页,进度会跟着走。被中断的传输会从中断处 继续,而不是全部重来。最后,上传的文件会变为只读:这是它们已在服务器上、且修改前需要 预留的标志。

首次上传的陷阱

我在 Files 里找上传按钮

它不在那里。Files 标签页显示状态并用于零星操作;上传在 Pending 标签页进行,任何未跟踪或已修改的文件都会自行出现在那里。如果 Pending 显示了徽标, 就说明有东西要上传。

“Failed to acquire locks for N file(s)”

有一个或多个文件已经被别人预留,而且整个上传会被取消,而不仅仅是相关的文件。 查看待处理预留的标签页,看看谁持有它们,并请对方释放。

我选中的一个文件被当作删除上传了

一个被上传但在传输时刻磁盘上不存在的路径,会被解读为一次删除。如果你在选择和上传之间 移动或重命名了文件,就会发生这种情况。操作期间请避免在该文件夹里工作。

“This folder is already a uVersion repository”

该文件夹已经包含一个 .uversion/。请使用 Open Local Repository...,而不要重新创建它。

文件夹被拒绝

客户端会有意拒绝某些位置:磁盘根目录、系统文件夹、自动启动文件夹,或相对路径。 请选择一个普通的工作文件夹。

接下来