如何有效地使用任务流?
How to efficiently work with a task stream?
免责声明:我让问题开放,但我的缓慢分支问题是由于服务器超载造成的。所以这不是通常的 Perforce 行为。我现在大约需要 30 秒来分支 10K 个文件。
我是 Perforce 2014 的新用户。我创建了一个流仓库,并将遗留应用程序(大约 10,000 个 cpp 文件)放在开发分支中。这对于初始导入来说相对较快,上传所有内容大约需要 1 小时。
现在我想创建一个 'lightweight' 任务流来处理新功能。
我使用默认菜单>新流>类型任务...我select"Branch file from parent on stream creation"
令我惊讶的是,创建一个新任务需要很长时间(大约 1 小时),因为它会为每个文件单独创建分支。我希望来自其他 SCM 工具的过程几乎是即时的。 (git, svn,...)
现在我的问题是:
- 这是预期的行为吗?
- 或者,有没有一种方法可以更快地创建任务,并且只分支我打算修改的文件?
创建 10k 文件的新任务流应该是一个非常快速的操作(大约一两秒?),因为没有传输实际文件内容,假设您从同步工作区开始。如果您正在为新流创建一个全新的工作区,那么创建新工作区的一部分将是同步文件;我预计这会花费与提交一样长的时间,因为它传输的数据量相同。
确保在创建新流时不是在创建新工作区。在可视客户端中有一个选项 "create a workspace";确保取消选中该框,否则它会创建一个新的工作区,然后同步它,这部分需要一个小时。
在命令行中,从 //stream/parent 的工作区开始,这是创建新任务流的方法:
p4 stream -t task -P //stream/parent //stream/mynewtask01
p4 populate -r -S //stream/mynewtask01
p4 client -s -S //stream/mynewtask01
p4 sync
"stream" 和 "client" 命令实际上并不对任何文件进行操作,因此无论如何它们都会非常快。 "populate" 将对所有 10k 个文件进行分支,但它在后端进行,实际上并没有移动任何内容,所以它也非常快(如果你达到数百万或数十亿,可能需要相当多的时间时间量取决于服务器硬件,但 10k 不算什么)。如果您已经同步到 //stream/parent,"sync" 会非常快,因为所有文件都已经在那里;同样,它只是在服务器端四处移动指针,而不是传输文件内容。
我找到了一种变通方法,它可以稍微加快速度,而且实际上更接近我打算做的事情:
任务流默认创建如下"stream view"
share ...
我已将其替换为
import ...
share /directory/I/actually/want/to/modify/...
所以我跳过了大部分文件的分支,它工作正常。
免责声明:我让问题开放,但我的缓慢分支问题是由于服务器超载造成的。所以这不是通常的 Perforce 行为。我现在大约需要 30 秒来分支 10K 个文件。
我是 Perforce 2014 的新用户。我创建了一个流仓库,并将遗留应用程序(大约 10,000 个 cpp 文件)放在开发分支中。这对于初始导入来说相对较快,上传所有内容大约需要 1 小时。
现在我想创建一个 'lightweight' 任务流来处理新功能。 我使用默认菜单>新流>类型任务...我select"Branch file from parent on stream creation"
令我惊讶的是,创建一个新任务需要很长时间(大约 1 小时),因为它会为每个文件单独创建分支。我希望来自其他 SCM 工具的过程几乎是即时的。 (git, svn,...)
现在我的问题是:
- 这是预期的行为吗?
- 或者,有没有一种方法可以更快地创建任务,并且只分支我打算修改的文件?
创建 10k 文件的新任务流应该是一个非常快速的操作(大约一两秒?),因为没有传输实际文件内容,假设您从同步工作区开始。如果您正在为新流创建一个全新的工作区,那么创建新工作区的一部分将是同步文件;我预计这会花费与提交一样长的时间,因为它传输的数据量相同。
确保在创建新流时不是在创建新工作区。在可视客户端中有一个选项 "create a workspace";确保取消选中该框,否则它会创建一个新的工作区,然后同步它,这部分需要一个小时。
在命令行中,从 //stream/parent 的工作区开始,这是创建新任务流的方法:
p4 stream -t task -P //stream/parent //stream/mynewtask01
p4 populate -r -S //stream/mynewtask01
p4 client -s -S //stream/mynewtask01
p4 sync
"stream" 和 "client" 命令实际上并不对任何文件进行操作,因此无论如何它们都会非常快。 "populate" 将对所有 10k 个文件进行分支,但它在后端进行,实际上并没有移动任何内容,所以它也非常快(如果你达到数百万或数十亿,可能需要相当多的时间时间量取决于服务器硬件,但 10k 不算什么)。如果您已经同步到 //stream/parent,"sync" 会非常快,因为所有文件都已经在那里;同样,它只是在服务器端四处移动指针,而不是传输文件内容。
我找到了一种变通方法,它可以稍微加快速度,而且实际上更接近我打算做的事情:
任务流默认创建如下"stream view"
share ...
我已将其替换为
import ...
share /directory/I/actually/want/to/modify/...
所以我跳过了大部分文件的分支,它工作正常。