• 我的想法是每个人翻译一两章,这样压力不会太大。其间大家保持沟通(尤其是术语的翻译),然后汇总由大家一起修改、润色。这只是粗略的想法,欢迎 brainstorming...

  • Perforce 用 Protections 来进行权限管理的。你可以运行 p4 protect 来启动文本编辑器并输入 protection rules. 具体的可以参考管理员手册第四章:

    http://www.perforce.com/perforce/r10.1/manuals/p4sag/04_protect.html#1064878

  • 楼主可以很多用户共用一个 Perforce user account。不过这样你就需要自己编写一个客户端程序来分辨每一个 changelist 究竟是来自哪一个程序员的。不是做不到,只是更复杂罢了;同时管理上也会有很多的问题。

  • 论坛我不是很清楚,不过你可以试试 Perforce 的用户邮件组:

    http://maillist.perforce.com/mailman/listinfo/perforce-user

    那里还是有很多牛人的。

  • 有关导出 changelist at 2010年05月17日

    这次说的很清楚了,不过如果你仔细看了我的回帖,就知道可以用 “-l” 参数来列出完整的变更表描述了。另外你不需要用”-i“参数,这个参数使” p4 changes"列出包括所有源分支的变更表。也就是说如果你的分支是从其他的分支 integrate 过来的,其他分支里提交的变更表也会列出——这就是为什么你的两个输出前半部相同的原因(估计他们有共同的源)。

    p4 changes -l //InsectsWaken/...

  • 有关导出 changelist at 2010年05月14日

    问题问得确实不太清楚,我猜是要用:p4 changes -l //depot/path/... ? (List long output, with the full text of each changelist descriptioin.)

    猜测,仅只是猜测而已。:P

  • Perforce Client Root 和 Alt Roots at 2010年05月13日

    newscm 于 2010-5-13 20:09 发表
    在 Client 里 Root 和 Alt Roots 有啥不同? 有一个不就可以了,为什么有两个?都是干嘛的? [/quote]

    Perforce 的客户端软件(P4、P4V 等)使用 Root 和 Alt Roots 来匹配客户程序的当前工作目录(文件夹)。使用 Alt Roots(最多两个)可以让你在不同的平台上使用同一个工作区(client/workspace)。比如说,如果你需要在不同的平台上构建你的产品(Linux、Unix、Windows),作为一个构建工程师,你当然可以在不同的平台上使用不同的 Perforce 工作区。你会注意到这些工作区的视图(Mappings)可能都是一样的(因为是同一产品)。这种情况下,你就可以用 Alt Roots 来指定在另一个平台下的工作区根目录。Perforce 的客户端软件会选择第一个能找到的 Root 或 Alt Roots 来作为当前的工作区根目录。

    注意如果你使用 Windows 目录的话,你必须使用 Windows 的目录作为你的主工作区根目录。

  • Perforce c++ API 安装 at 2010年05月12日

    [Error]: TCP send failed. write: socket: Broken pipe

    这个是系统错误,说明当写入 socket 的时候另一端关闭了(也就是说连接由于什么原因中断了)。如果你运行man 2 write,就可以获得更多有关的错误信息:

    EPIPE fd is connected to a pipe or socket whose reading end is closed. When this happens the writing process will also receive a SIG- PIPE signal. (Thus, the write return value is seen only if the program catches, blocks or ignores this signal.)

    有可能是 Python 的网络连接模块有问题。还可以检查一下 P4.py 的 umask 是否设置正确(0022)。

  • Perforce c++ API 安装 at 2010年05月11日

    cinderella0405 于 2010-5-11 11:40 发表
    我的神仙老大老大!!!你看看我这里是不是这样子的。。。激动啦~~~~哈哈 [/quote]

    看上去你的 P4Python 编译没有问题(你可以忽略警告信息)。至于说 python test.py 的错误可能是由于测试代码找不到 p4d——Perforce 服务器可执行程序 p4d 必须包括在你的路径中,也就是说如果你运行which p4d必须能够找到 p4d。

  • Perforce c++ API 安装 at 2010年05月10日

    试试看不用尖括号:

    python setup.py build --api-dir /home/yangl/p4api-2009.2.238357

  • Perforce c++ API 安装 at 2010年05月07日

    在 Windows 下安装 P4Python 并不需要 P4API(C/C++),只要下载 P4Python 安装程序就行了。如果你是要从源代码编译构建 P4Python,你需要下载 Perforce C/C++ API,然后只要 unzip 它到一个空文件夹里。当你构建 P4Python 时,可以使用下面的命令:

    python setup.py build --apidir

    然后记住运行 python test.py 进行测试。

    最后,用下面的命令进行安装:

    python setup.py install --apidir

    简单的说,只要下载 P4 C/C++ API 并解包到一个文件夹即可。

  • changelist at 2010年04月28日
  • Perforce 创建用户 at 2010年04月28日

    你可以试试 P4Admin(包括在 P4V 里,Tools->Administration)。这是个图形界面的 Perforce 服务器管理工具,至少用来管理用户会比较直观一点吧。

  • Perforce 创建用户 at 2010年04月28日

    对了,一般来说 Perforce 会自动创建不存在的用户,如果安全标准(security level)设置为不需要密码的话,就没有必要创建用户了。呵呵,不过这样的配置只能用于业余的开发,公司用大概不行。;P

  • Perforce 创建用户 at 2010年04月28日

    呵呵,好像是没有什么办法了——再写个 script? :lol

    p4create_user.pl username password

  • laofo 于 2010-4-28 15:56 发表
    看来还要回去好补补 shell 啊。。。:$ [/quote]

    其实很多时候 Shell 就足以完成任务了。不过每种语言都有自己的优势,比如说你的 script 就可以跨平台使用。也向你学习了!

  • Linux 下:

    0) 新建一个文件夹。

    mkdir test cd test

    1) 新建一个用户工作区。

    $ p4 client -o TEST | p4 client -i Client TEST saved.

    2)设置 Perforce 客户端使用新的 client。

    $ export P4CLIENT=TEST

    3)取得所有指定变更表里德文件列表。

    $ p4 -Ztag describe -s 9056 | grep "... depotFile" | cut -d" " -f3 > files.txt

    4)从服务器上下载所有文件。

    $ p4 -x files.txt sync

    5)打包(?)

    tar cvf files.tar .

    不知道这样能否满足要求。

  • changelist at 2010年04月27日

    Perforce 下没有本地 changelist 的概念,所有的信息都是存在服务器上的。

  • 紧急求助 P4 还原 at 2010年04月27日

    如果有完整的备份可以按照这个帖子的恢复部分做就行了。

    http://bbs.scmroad.com/viewthread.php? %3D1

  • Perforce 服务器备份 at 2010年04月16日

    恢复的过程分不同的情况: 1、数据库损坏但源文件没有受影响。 2、数据库和源文件都损坏了。

    一、如果只是数据库损坏,你只需要恢复数据库。步骤如下: 1) 暂停 Perforce 服务器。

    p4 admin stop

    2) 将所有数据库文件(db.*)改名或移动到另一个文件夹(最好不要直接删除)。

    mv $P4ROOT/db.* /somewhere/safe

    3) 运行 p4d 从最新的 checkpoint 和 journal 文件恢复数据库。

    p4d -r $P4ROOT -jr checkpoint_file journal_file

    注意如果 checkpoint 和 journal 是压缩文件的话,需要加上-z 标志。

    p4d -r $P4ROOT -z -jr checkpoint_file journal_file

    到这里数据库就应该恢复好了,你可以重新启动 Perforce 服务器检查恢复是否成功。

    二、数据库和源文件都损坏了。 1) 如上恢复数据库,但是不需要使用 journal 文件,因为你需要从备份中恢复源文件,当前的日志文件包含的信息不再适用。

    2) 恢复源文件。从备份中拷贝(如果压缩过的话先解压)源文件到 Perforce 库文件应在的位置,比如 $P4ROOT.

    任何恢复完成后都应该确定所有版本文件没有问题,运行:

    p4 verify -q //...

  • newscm 于 2010-4-16 17:43 发表
    现在我可以通过这个命令给某个分支打标签: p4 tag -a -l help_label_2 //help/... 然后就显示 //help/help.txt#1 - added

    请问如何在命令行下将刚打的这个标签锁住? 是不是要通过模版文件打 label 的时候才能做到这步? ... [/quote]

    p4 label -o help_label_2 | sed "s/Options:.*unlocked/Options: locked/" | p4 label -i

  • 从日志文件里可以看出你的数据库文件已经 corrupted 了,如果你运行 p4d -r /perforcedatabase -xv 就可以验证是否如此。正如你所说的,从 journal 文件恢复是最佳的途径。

  • local - 存储需要版本控制的源文件,结构可以由用户控制。文件使用本地存储介质,由服务器直接从本地读取。 remote - 存储需要版本控制的源文件,结构可以由用户控制。文件不在本地读取而由远程服务器提供。 spec - 存储需要版本控制的 Perforce 规范(Specifications,比如用户、工作区等等)。其结构用户无法控制(只读),一个 Perforce 服务器只能够有一个 spec 库。

    首先要区分的是 spec 和其他的两种仓库 -- spec 是用来保存 Perforce 服务器上的特定信息的。举个例子,每次用户修改一个工作区定义事,他/她所做的改动会自动保存在 spec 库里(spec/clients/client_name,v)。如果需要取消某个变更,用户可以 sync 前面的版本并以之重定义工作区(p4 client -i < client_name 文件)。

    local 和 remote 库都是保存用户上传的文件的。他们的区别在于 remote 库的文件是从另一个 Perforce 服务器获取的。也就是说每次用户读取一个文件,本地服务器都要向另一个服务器请求这个文件。所有有关该文件的信息(版本等)也都是存在远程服务器上的,本地服务器数据库里没有有关该文件的任何记录,所以 remote 库里的文件也都是只读的。这也是 remote 库经常导致 performance 问题的原因。

    至于说为什么不用 Proxy 而要用 Remote depot?我觉得只有一种情况是适合使用 Remote 库的 -- 那就是两个服务器分别保存不同的产品(或是同一软件的相关不太紧密的不同部件。比如说一个软件使用某个第三方的 library,如果第三方也用 Perforce 的话,就可以用 remote 库来导入这个 library。这样我们可以及时地获得任何有关的更新。

    以上只是本人的管见,对 remote 库有兴趣的话可以看看 Perforce 的知识库文章:

    http://kb.perforce.com/article/30/using-remote-depots

  • 呵呵,这是两三天来闹的最沸沸腾腾的有关 Perforce 的新闻了。其实作为公司内部使用的系统,大多数 SCM 软件都假定是在安全的网络上运行。试想黑客已经都侵入公司的内网了,找到服务器的入口还不是早晚的事吗。

  • 定时备份才是正道。任何时候都应该先考虑按照正常的步骤恢复(方法 3),只有在没有备份的情况下才应该用其他的方法。如果不能够按照方法 3 恢复,就是说服务器的管理有很严重的问题,赶快改进吧!:lol