gerrit3 搭建记录

Gerrit代码审计系统实战-Gerrit 3.6.1版本快速搭建 Gerrit代码平台搭建 gerrit安装教程 Gerrit安装 Gerrit 阅读详情

目前的最新版本3.5.1,安装指令如下:

java -jar gerrit-3.5.1.war init -d review_site

选项不做解说,关键项如下:

Authentication method [openid/?]: http
Use case insensitive usernames [Y/n]? n
Listen on port                 [8080]: 8900
Canonical URL                  [http://yy.com:8900/]: http://192.168.50.120:8900/

采用http授权,用户名不区分大小写(请参照实际情况选择,LDAP授权不区分用户名大小写)

如果能修改DNS的话,不要直接使用IP地址

全部设定完成后,在终端可看到服务启动OK


由于采用了http授权,需要在nginx内需添加相应字段

server {
  listen *:8081;
  server_name localhost;
  auth_basic "Welcome to Gerrit Code Review Site!";
  auth_basic_user_file /home/service/gerrit/gerrit.password;
  location / {
    proxy_pass http://127.0.0.1:8900;
    proxy_set_header X-Forwarded-For $remote_addr;
    proxy_set_header Host $host;
  }
}

需要代理gerrit的端口(8081->8900)

别忘了生成password文件(htpasswd -m gerrit.password admin)

修改完后,别忘了 systemctl nginx reload

登录地址为 $(IP):8081,输入用户名及密码,自动跳转到 $(IP):8090

后续可以直接登录 $(IP):8090


总结

    2.x的版本还需要mysql,3.x的版本已经不需要了。

    公司内部使用,接着配置 LDAP 授权。

    个人使用的话,还是喜欢gogs(简单得多)。

备注

    gerrit、jenkins联动的话,需要插件 events-log。

Gerrit通过API获取提交记录 通过gerrit API获取相关分支提交记录 阅读详情

相关推荐

Gerrit VS Gitlab

一、Gerrit 简介 第一次入职的时候,看到 Gerrit 的我是一脸懵逼,这是个什么上古的玩意,界面交互这么丑…因为,在之前公司都是使用类似 GitLab 这种版本控制平台,初次使用或多或少有些抵触,后面几天通过了解其工作流程,大概对它有了个基本的认识。 引用 wiki 百科的介绍 Gerrit 和 GitLab Gerrit,一种开放源代码的代码审查软件,使用网页界面。利用网页浏览器,同一个团队的软件开发者,可以相互审阅彼此修改后的代码,决定是否能够提交,回退或是继续修改。它使用版本控制系统Git作

优快云前端知识共享 1万+

python检查用户名不区分大小写_Django:用户名和密码用户名不区分大小写匹配

Django by-default implements username as case sensitive, now for authentication I have written my own Authentication Backend to handle case insensitive usernames while authentication.Now, the problem ...

weixin_39616693的博客 542

Gerrit部署(Ubuntu+Gerrit+Nginx)

Gerrit部署 1 Gerrit简介 Gerrit是一个基于web的代码评审工具,它基于Git版本控制系统,由Google内部编写用于代码评审管理。Gerrit旨在提供一个轻量级框架,用于在代码入库之前对每个提交进行审阅。Gerrit提供了一个临时区域,将本地提交与远程仓库隔离开,开发人员将‎‎更改上传到Gerrit,在它们被审阅通过前并不会直接上传到远程仓库。 要了解Gerrit如何帮助强化开发人员的工作流程,请考虑如下一个典型的项目。该项目有一个中心源存储库作为项目内容的权威副本,例如Git版本控制系

carlos博客 4067

Gerrit3.6.1版本使用

一、Gerrit简介Gerrit 是一种免费、开源的代码审查工具,使用网页交互页面。这个软件的名称来自于荷兰设计师师赫里特·里特费尔德(Gerrit Rietveld),作者为Google公司的Shawn Pearce。它使用Git作为底层版本控制系统,相比于其他的代码管理工具,Gerrit明显的特色是代码审核。利用网页浏览器,同一个团队的软件程序员,可以相互审核(Review)彼此修改后的程序代码,然后决定是继续提交还是取消提交。

Byte的博客 2784

搭建gerrit服务器(apache&nginx反向代理方式)

这段时间,想搭建一个gerrit,用于代码托管,gerrit的搭建,网上有很多种教程,但是自己按照别人的教程逐步操作,一直出现诸多问题。最头痛的就是: Configuration Error Check the HTTP server's authentication settings.       后来经过他人指点,才知道自己的原因。由于对Apache的反向代理的机制,没有清楚

Coder80的专栏 8562

Windows搭建gerrit环境

Windows搭建gerrit环境

特立独行的博客 8176

教师资格证信息技术主观题

我个人认为,如果你想靠着背面试题来获得心仪的offer,用癞蛤蟆想吃天鹅肉形容完全不过分。想必大家能感受到面试越来越难,想找到心仪的工作也是越来越难,高薪工作羡慕不来,却又对自己目前的薪资不太满意,工作几年甚至连一个应届生的薪资都比不上,终究是错付了,错付了自己没有去提升技术。这些面试题分享给大家的目的,其实是希望大家通过大厂面试题分析自己的技术栈,给自己梳理一个更加明确的学习方向,当你准备好去面试大厂,你心里有底,大概知道面试官会问多广,多深,避免面试的时候一问三不知。

2401_84048832的博客 648

gerrit-3.5.1

gerrit-3.5.1

ubuntu18.04搭建gerrit+gitweb代码审核系统(gerrit-3.2.3,自己亲手搭建经验总结贴)

ubuntu安装gerrit

u014630142的博客 459

ldap+gerrit+gitweb集成化安装部署

本文档详细介绍了如何在linux系统下安装ldap、gerrit、gitweb的安装流程。还包括gerrit的ldap认证配置,gerrit+gitweb集成化安装部署流程。

PostgreSQL中idle in transaction状态的5个隐藏危害及实战解决方案

本文深入剖析了PostgreSQL中`idle in transaction`连接状态的五大隐藏危害,包括内存与锁泄漏、VACUUM受阻导致表膨胀、事务ID加速消耗、连接池资源耗尽以及增加故障排查复杂度。文章提供了基于`pg_stat_activity`视图的监控方法、识别高危事务的SQL脚本,并给出了从数据库参数调优(如设置`idle_in_transaction_session_timeout`)到应用层编码规范与连接池配置的完整实战解决方案。

zzz56的博客 234

【git管理工具】【一】android 代码版本管理 - gerrit3 安装

现状:我们一直使用的是集中式的版本管理工具SVN,由专人维护,个人管理个人的代码,代码比较分散,代码分支和合并比较混乱,由此,考虑使用分布式版本管理工具git,但是对于android这种超大型的项目(数百个git库),使用单纯的git服务器已经不能满足需求了,需要采用google原厂的repo方式 (封装了git服务器),经过查找资料,服务端决定采用gitolite + gerrit + repo的方式管理源代码,正好我们新安装了一台服务器,在这台服务器安装最新gerrit3

weixin_34799243的博客 1305

基于FreeRTOS与MQTT的物联网技术应用系列——步进电机控制(三)SD卡驱动、FatFS等的移植和ini配置文件读取的实现

本文实现了基于STM32F107VC的金牛开发板的基于SPI模式的SD卡驱动和FatFS的移植,以及利用minini库对ini配置信息文件进行读取。

sqshining的专栏 2137

gerrit 升级记录

第一次升级gerrit记录由于gerrit3.0.0版本被公司安全部门扫描到ssh监听端口29418有安全漏洞,所以必须升级到3.0.1漏洞名称:SSH 3.0.0 Locked Account Remote Authentication Bypass(CVE-2001-0553) 详细描述:Unix系统的SSH Secure Shell 3.0.0版本不能正确地对sshd2守护程序执行密码认证,本地用户可以获得带有短密码字段的账号的使用权,例如在密码字段中使用"NP"的锁定账户。......

weixin_41927873的博客 892

嵌入式Linux网络调试踩坑记:YT8531/YT8521 PHY驱动移植与设备树配置实战

本文深入解析嵌入式Linux系统中YT8531/YT8521 PHY驱动移植与设备树配置的实战经验。从网络不通的常见现象入手,详细介绍了驱动移植关键点、设备树配置详解及常见问题排查技巧,帮助开发者快速解决RGMII接口调试难题,提升嵌入式网络开发效率。

weixin_42525328的博客 444

Shopee 虾皮API接口:商品详情采集的实践

随着电商行业的蓬勃发展,数据采集和分析在商业决策中扮演着越来越重要的角色。Shopee作为东南亚领先的电商平台,拥有大量的商品数据。通过Shopee的API接口,我们可以方便地获取商品详情,为数据分析和市场研究提供有力支持。本文将介绍如何使用Shopee API接口采集商品详情,并分享一些实践技巧。提供了丰富的数据接口,包括商品详情、店铺信息、订单数据等。通过API接口,开发者可以轻松地获取Shopee平台上的数据,进行进一步的处理和分析。Shopee API接口:商品详情采集的实践与技巧。

An4480的博客 1886

【Gerrit】搭建Gerrit服务器

初次接触Gerrit服务器的搭建,很多的功能还不是很懂事干什么的,简单的做一个搭建过程,来进行一遍小小的回忆。 在搭建Gerrit服务器之前,电脑上需要准备好几个工具: 链接:https://pan.baidu.com/s/1BYJAQgG0lvmObFdkuodIwQ 提取码:gxke 【关于Xshell和xFTP的安装软件,】 1)Linux虚拟机:笔者在虚拟机上安装的是CentOS 64位 2)Xshell:Xshell是...

胡振涛 2224

2025.06.06【Ribo-seq】|riboWaltz:P-site定位与三碱基周期性分析流程

同学们,大家好!今天我们要学习的是riboWaltz——一款专为Ribo-seq(核糖体足迹测序)数据设计的R包,主要用于P-site定位优化和三碱基周期性分析。P-site的准确定位是Ribo-seq下游所有翻译组学分析的基础,riboWaltz为我们提供了系统、可视化、易用的解决方案。P-site定位优化:自动识别不同长度RPF的最佳P-site偏移量。三碱基周期性分析:可视化RPF在CDS、UTR等区域的分布,评估数据质量。多样本/多条件支持:可同时处理多个样本,便于批量分析和对比。

1791

使用gerrit query统计上传记录

gerrit query命令格式: ssh -p <port> username@gerrit_server gerrit query 查看所有参数类型 ssh -p <port> username@gerrit_server gerrit query --help gerrit query QUERY ... [--] [--all-approvals] [--all-reviewers] [--comments] [--commit-message] [--curren.

流浪风博客 1784

【大语言模型 21】语言模型训练目标:MLM vs CLM vs GLM对比分析

本文深入对比分析三种主流语言模型训练目标:掩码语言模型(MLM)、因果语言模型(CLM)和双空白填充(GLM)。通过数学推导、代码实现和实验对比,揭示不同训练目标的工作机制、适用场景和性能差异,为选择合适的预训练策略提供科学指导。

熵数实验室 1174

CE电流法测试中的dBμV负值解析

传导发射(CE)电流法测试中出现的dBμV负值现象表明被测设备干扰电平低于1μV参考基准。这源于对数计算特性(小于1μV的电压转换后为负值)、设备优良的EMC设计(如滤波效果显著)及测试环境的影响(LISN隔离、屏蔽室低噪声)。负值虽不代表实际负电压,但反映干扰水平优于标准限值,为系统集成预留电磁裕度。工程应用中需结合设备灵敏度、环境背景噪声等因素综合分析,避免误判,这类数据可用于评估EMI设计冗余度。

硬核科技 298

【gerrit】记录:gerrit提交代码

记录自己使用gerrit提交代码的过程。 公司搭建好gerrit服务、管理员建好项目、给公私钥。 gerrit认证: 登录,输入用户名(密码为空)。 设置-认证:http://192.168.xx.xxx/#/settings/ssh-keys , 将id_rsa.pub内容添加到key中。 http://192.168.xx.xxx/#/settings/contact 添加自己的邮箱并登陆邮...

xilejie的博客 3029

[RK3568 Android12] 添加自定义启动脚本

1:定义添加的脚本 2:rk3568_s.mk 中定义打包 3:在启动脚本中init.rk356x.rc添加权限及何时启动 4:添加权限文件file_contexts 5:系统确认是否运行

OpenWrt/WLAN/驱动/Android/嵌入式开发总结 2220

linux下搭建Gerrit

Gerrit 是一个基于 web 的代码评审工具, 它基于 git 版本控制系统。Gerrit 旨在提供一个轻量级框架, 用于在代码入库之前对每个提交进行审阅。‎Gerrit记录每一次提交的代码修改, 但实际上并不成为项目的一部分, 直到它们被审阅和接受。它是标准开源过程的一个简单工具来支持提交补丁程序, 然后由项目成员在应用到代码库之前进行评审。‎Gerrit 首先是一个临时区域, 在提交的代码成为代码库的一部分之前, 可以对其修改进行检查。因此,在项目开发过程中我们为了保证代码的质量,我们就可以通过G.

Bruce 2927

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain&#39;s apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath(&#39;DeepLearnToolbox&#39;));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand(&#39;state&#39;,0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W&#39;); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand(&#39;state&#39;,0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = &#39;sigm&#39;;%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, &#39;Too big error&#39;);```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand(&#39;state&#39;,0)sae = saesetup([784 100]);sae.ae{1}.activation_function = &#39;sigm&#39;;sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)&#39;)% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;;nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, &#39;Too big error&#39;);```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x&#39;,28,28,60000))/255;test_x = double(reshape(test_x&#39;,28,28,10000))/255;train_y = double(train_y&#39;);test_y = double(test_y&#39;);%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you&#39;ll get around 1.2% errorrand(&#39;state&#39;,0)cnn.layers = { struct(&#39;type&#39;, &#39;i&#39;) %input layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 6, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %sub sampling layer struct(&#39;type&#39;, &#39;c&#39;, &#39;outputmaps&#39;, 12, &#39;kernelsize&#39;, 5) %convolution layer struct(&#39;type&#39;, &#39;s&#39;, &#39;scale&#39;, 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, &#39;Too big error&#39;);```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, &#39;Too big error&#39;);%% ex2 neural net with L2 weight decayrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex3 neural net with dropoutrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex4 neural net with sigmoid activation functionrand(&#39;state&#39;,0)nn = nnsetup([784 100 10]);nn.activation_function = &#39;sigm&#39;; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex5 plotting functionalityrand(&#39;state&#39;,0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = &#39;softmax&#39;; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand(&#39;state&#39;,0)nn = nnsetup([784 20 10]); nn.output = &#39;softmax&#39;; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, &#39;Too big error&#39;);```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

jdk-8u144-linux-x64.tar.gz.

该资源为搭建Linux系统Java环境用,资源的后缀为tar.gz格式的压缩包

Gerrit环境搭建记录

搭建了一下gerrit的环境,主要参考了 http://blog.sina.com.cn/s/blog_7a691e910101jc51.html 下的过程 其中遇到了一些问题,记录一下 1.数据库选择mysql,安装中默认下载的版本号为5.1,跟我电脑上的的8.0版本不配套。 2.尝试自己下载驱动并替换 解决上面问题,但是执行某条sql时发现有关键字group与mysql冲突,于是手动执行该sql ,顺利建表 3.后续有反向代理的配置问题,使用了mac系统自带的apache2 4.在启动之后顺利登陆,但是

maqinchaoTnT的博客 639

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

gerrit 搭建

本文记录我在搭建gerrit的一些步骤和问题:  1. 下载gerrit 安装包 gerrit-2.14.war 2. 安装java, 在centos,root账户 使用  yum install java 3. 执行gerit,使用专门的账号, 创建gerrit2             sudo adduser gerrit2        sudo su gerr

yes_sir_yes的专栏 639
上一篇: 软件官网地址
下一篇: gogs 触发 jenkins 任务
cluse
博客等级 码龄19年 29粉丝 29原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值