我的想法是每个人翻译一两章,这样压力不会太大。其间大家保持沟通(尤其是术语的翻译),然后汇总由大家一起修改、润色。这只是粗略的想法,欢迎 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
那里还是有很多牛人的。
这次说的很清楚了,不过如果你仔细看了我的回帖,就知道可以用 “-l” 参数来列出完整的变更表描述了。另外你不需要用”-i“参数,这个参数使” p4 changes"列出包括所有源分支的变更表。也就是说如果你的分支是从其他的分支 integrate 过来的,其他分支里提交的变更表也会列出——这就是为什么你的两个输出前半部相同的原因(估计他们有共同的源)。
p4 changes -l //InsectsWaken/...
问题问得确实不太清楚,我猜是要用:p4 changes -l //depot/path/... ? (List long output, with the full text of each changelist descriptioin.)
猜测,仅只是猜测而已。:P
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 的目录作为你的主工作区根目录。
[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)。
cinderella0405 于 2010-5-11 11:40 发表
我的神仙老大老大!!!你看看我这里是不是这样子的。。。激动啦~~~~哈哈 [/quote]
看上去你的 P4Python 编译没有问题(你可以忽略警告信息)。至于说 python test.py 的错误可能是由于测试代码找不到 p4d——Perforce 服务器可执行程序 p4d 必须包括在你的路径中,也就是说如果你运行which p4d
必须能够找到 p4d。
试试看不用尖括号:
python setup.py build --api-dir /home/yangl/p4api-2009.2.238357
在 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 并解包到一个文件夹即可。
你可以试试 P4Admin(包括在 P4V 里,Tools->Administration)。这是个图形界面的 Perforce 服务器管理工具,至少用来管理用户会比较直观一点吧。
对了,一般来说 Perforce 会自动创建不存在的用户,如果安全标准(security level)设置为不需要密码的话,就没有必要创建用户了。呵呵,不过这样的配置只能用于业余的开发,公司用大概不行。;P
呵呵,好像是没有什么办法了——再写个 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 .
不知道这样能否满足要求。
Perforce 下没有本地 changelist 的概念,所有的信息都是存在服务器上的。
如果有完整的备份可以按照这个帖子的恢复部分做就行了。
恢复的过程分不同的情况: 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 的知识库文章:
呵呵,这是两三天来闹的最沸沸腾腾的有关 Perforce 的新闻了。其实作为公司内部使用的系统,大多数 SCM 软件都假定是在安全的网络上运行。试想黑客已经都侵入公司的内网了,找到服务器的入口还不是早晚的事吗。
定时备份才是正道。任何时候都应该先考虑按照正常的步骤恢复(方法 3),只有在没有备份的情况下才应该用其他的方法。如果不能够按照方法 3 恢复,就是说服务器的管理有很严重的问题,赶快改进吧!:lol