以前在使用Perforce时犯过这样的错误:编写了新的文件,忘了添加到 Perforcedepot 中就匆匆submit,别人sync下来编译不过,影响团队进度。编写了一个Ruby脚本,用于检查当前client中有哪些文件没有添加到depot中,每次submit之前运行一下 p4nothave,就能知道还有哪些文件没有add进去。另外用 p4nothave | p4 -x - add 可以把这些文件都add到depot中。
基本思路,先用 p4 have 获得当前目录下有哪些文件是在depot中的,再遍历目录,找出不在depot的中的文件。在实现时要考虑到有些文件已经add但还没有submit,那么p4 have不会显示它,需要再运行p4 opened找出那些已经add却还没有submit的文件。
#!/usr/bin/env ruby
# Usage: p4nothave [paths]
require 'find'
def filter_out(f)
# filter out temp files
if File.basename(f) =~ /^\./
return true
end
false
end
def check_p4_output(firstline)
if firstline =~ /^Client '(.*?)' unknown/
puts "Client '#$1' unknown at path '#{Dir.getwd}'"
exit 1
end
end
def p4have(path)
have = IO.popen("p4 have 2>&1").readlines
check_p4_output(have[0])
in_depot = {}
have.each do |line|
# format of p4 have:
#
# //depot/trunk/hello#1 - /home/schen/p4client/trunk/hello
#
if line =~ /^.*? - (.*)$/
in_depot[$1] = 1
end
end
return in_depot
end
def p4added(path)
opened = IO.popen("p4 opened 2>&1").readlines
check_p4_output(opened[0])
in_depot = {}
opened.each do |line|
# format of p4 opened:
#
# //depot/trunk/p4scripts/p4nothave.rb#1 - add default change (text)
#
if line =~ /^(.*?)((#|@)(.*?))? - add/
# get the local filename from remote filename
# format of p4 where:
#
# //depot/trunk/temp //schen_asus_1/trunk/temp /home/schen/p4client/trunk/temp
#
`p4 where #$1` =~ /^(.*) (.*) (.*)/
in_depot[$3] = 1
end
end
return in_depot
end
def nothave(path)
in_depot = p4have(path).merge(p4added(path))
Find.find(path) do |f|
if File.file?(f) && !in_depot.include?(File.expand_path(f))
if !filter_out(f)
puts f
end
end
end
end
paths = ARGV.empty? ? ["."] : ARGV
paths.each do |path|
nothave(path)
end
分享到:
相关推荐
P4-Perforce 提供了多种命令来管理文件,包括添加、编辑、删除、比较等操作。 * p4 add:添加文件到版本库。 * p4 attribute:设置文件的属性。 * p4 copy:复制文件。 * p4 delete:删除文件。 * p4 diff:比较...
在工作空间中,用户可以查看和管理Depot(服务器上的文件库)和Workspace(本地工作目录)的内容。 在客户端设置中,用户可以根据个人需求调整各种选项,例如自动保存上次的路径、提交时仅包含已修改的文件、以及在...
- 表示文件还未被添加到仓库中。 - **在仓库 (In Depot)** - 文件已存在于仓库中,用于长期项目或重要新特性开发。 - **标记为添加 (Marked for Add)** - 文件将被添加至仓库,但尚未提交。 - **标记为删除 ...
Perforce 是一个强大的版本控制系统,常用于管理软件开发中的源代码和其他文件。Perforce 官方培训课程旨在帮助用户理解并有效地使用 Perforce 进行版本控制操作。本课程分为三天,涵盖了从基础到高级的各种主题,以...
在添加用户之前,需要将破解的license文件拷贝到服务器的安装根目录下,不然只能有两个用户使用。然后,打开命令行界面,输入p4 set命令查看当前Perforce的配置情况。 添加用户可以使用p4 user –f命令,例如添加...
- `p4add`:打开新文件并添加到仓库(depot)。 - `p4delete`:打开现有文件并从仓库中删除。 - `p4copy`:通过分支、替换或删除操作使目标文件与源文件保持一致。 - `p4revert`:取消文件的签出状态,如果文件...
Perforce P4V支持将文件检入到仓库的仓库中(称为“提交”或“检入”操作),或者从仓库中取回文件到本地(称为“检出”操作)。检入的文件将变成新的版本,而检出的文件则是为了进行修改。在进行检出操作时,如果有...
Perforce Streams Adoption Guide是一份专业的文档,旨在指导用户如何从Perforce传统的depot(仓库)迁移到使用stream(流)的工作模式。Perforce是一款广泛使用的版本控制系统,而stream模式是其较新的特性,用以...
### Perforce软件配置管理使用说明 ...此外,熟悉Perforce的基本命令也是非常重要的,例如`p4 login`用于登录服务器,`p4 sync`用于同步文件等。希望本指南能帮助您更好地理解和使用Perforce系统。
- **配置客户端连接端口**:通过环境变量`P4PORT`告知Perforce客户端程序连接到哪个端口。 - **启动与停止服务器**:启动服务器可通过命令`$P4ROOT/bin/p4d -r $P4ROOT`实现,而停止服务器则可通过`pkill p4d`命令...
5. **gclient.bat**:Gclient 是 Depot Tools 中的一个子命令,它是一个简单的脚本,用于驱动 Git 和 Perforce 等多种版本控制系统。Gclient 可以帮助开发者管理他们的依赖关系,执行自动化工作流,如同步源代码、...
Practical Perforce is the ideal complement to the existing product manual, focusing less on the 'how" and more on the "why" and "when." The book is not only a helpful introduction to Perforce, it's ...
perforce培训.pdf
Profile of Autodesk Practical Perforce
P4HTMLDiff.java可用于生成HTML格式的perforce文件diff,并且此HTML文件将存储在本地磁盘中以供以后参考。 在以文本格式发送文本文件/代码差异供某人查看时,这将很有用。 先决条件:Perforce必须已安装并登录,...
Perforce 是一个流行的版本控制系统,用于管理软件开发中的源代码和其他文件。Jenkins Perforce 插件是 Jenkins 持续集成服务器与 Perforce 服务器进行交互的一种方式,允许开发者在 Jenkins 中自动化构建、测试和...