linux安装svn服务器(yum方式)和SVN项目同步

1.查看yum是否安装

在终端中输入yum即可如果已经安装,会显示yum的参数,如果没有安装,会提示yum未安装或无效命令……

2.安装svn

yum -y install subversion

出现下面截图后,表示安装完成。

3.创建目录并配置

建立版本库目录(repo为要创建的版本库名称,可自定义)

mkdir -p /data/svn/repo

配置 

svnadmin create  /data/svn/repo

执行上面的命令后,自动建立repo测试库,查看/data/svn/repo 文件夹发现包含了conf, db,format,hooks, locks, README.txt等文件,说明一个SVN库已经建立。

4.用户密码passwd配置

cd /data/svn/repo/conf
vi passwd

修改passwd为以下内容:

[users]
# harry = harryssecret
# sally = sallyssecret
hello=123

用户名=密码

以上语句都必须顶格写, 左侧不能留空格, 否则会出错.

这样我们就建立了hello用户, 123密码

5.权限控制authz配置

vi  authz

目的是设置哪些用户可以访问哪些目录,向authz文件追加以下内容:

请别落下[/]

#设置[/]代表根目录下所有的资源   或者写成[repl:/]
[/]
hello = rw

意思是hello用户对repo测试库下所有的目录有读写权限,当然也可以限定。 如果是自己用,就直接是读写吧。

以上语句都必须顶格写, 左侧不能留空格, 否则会出错.

6.服务svnserve.conf配置

vi svnserve.conf

追加以下内容:

[general]
#匿名访问的权限,可以是read,write,none,默认为read
anon-access=none
#使授权用户有写权限 
auth-access=write
#密码数据库的路径 
password-db=passwd
#访问控制文件 
authz-db=authz
#认证命名空间,subversion会在认证提示里显示,并且作为凭证缓存的关键字 
realm=/data/svn/repositories

7.防火墙开启

/sbin/iptables -I INPUT -p tcp --dport 3690 -j ACCEPT

8.启动svn服务器

svnserve -d -r /data/svn/

9.访问

在windows客户端,输入地址:svn://ip地址:3690/repo(iP地址为你linux的ip,repo为前文创建的版本库名称,3690为svn默认端口)

端口默认为3690,输入配置好的用户名和密码即可。

如果连接不上可能是服务器端口没开启

请 ping 3690端口确认是否通畅

telnet ip地址 3690

10.其他命令

# 查看占用端口的进程
lsof -i:3690   
# 关闭进程 21882
kill -9 进程号(上一步查到的pid)
#启动SVN (多个版本库)  /data/svn 是svn 安装位置
svnserve -d -r   /data/svn

11.svn代码同步到项目中

# 手动更新 
svn co svn://ip地址:3690/库名 同步的地址 --username 用户名 --password 密码
# 示例
svn co svn://127.0.0.1:3690/repo /www/wwwroot/repo --username hello --password 123

1.使用post-commit 实现同步代码

  代码同步需要使用到hooks文件目录下的post-commit勾子文件,在hooks下很多tmpl文件,这些文件都是勾子的模板来的,
  如果需要使用的时候copy 一份去掉.tmpl后缀便可使用

# 先移动到这个文件夹,再改名
cd /data/svn/repo/hooks/
cp post-commit.tmpl post-commit
# 设置post-commit 文件的权限 切记这步一定不可漏,不然后期运行时会报错
chmod 777 post-commit 

这样就会生成一个有效的post-commit 文件,文本改成下面的样式

#!/bin/sh
# 上边这个不是注释,必须带上,我之前在这里踩坑,以为是注释内容没带上
# 其实是linux用于指定由哪个解释器来执行脚本的标记
REPOS="$1"
REV="$2"
mailer.py commit "$REPOS" "$REV" /path/to/mailer.conf
# 项目版本库地址
BASEPATH=/www/wwwroot/repo
WEBPATH="$BASEPATH/"
export LANG=zh_CN.UTF-8
# 账号 hello 密码 123
svn update $WEBPATH --username hello --password 123 --no-auth-cache

最后操作是关闭服务然再打开服务,请参考上方其他命令重启svn服务

电脑端SVN地址:

https://pan.baidu.com/s/1kBjFWJCGCSuHqvlRR8fkIQ?pwd=kj73

文章来源

原文地址:https://www.freesion.com/article/711642592/

原文地址:https://www.runoob.com/w3cnote/linux-subversion-yum.html

原文地址https://blog.csdn.net/baixiaoshengaaa/article/details/108866038

Css 相关操作

css超出部分显示省略号

/*单行超出部分显示…*/
overflow: hidden;
text-overflow:ellipsis;
white-space: nowrap;

/*多行超出部分显示…*/
display: -webkit-box;
-webkit-box-orient: vertical;
-webkit-line-clamp: 3;
overflow: hidden;

npm安装教程  node14

1下载安装

https://pan.baidu.com/s/1LRZA8adOieeldCTK5wuSaQ?pwd=b5ty

可以使用默认路径,本例子中自行修改为d:\nodejs

一路点Next,最后点Finish完成

2.打开CMD,检查是否正常

输入 node-v ,如图已经安装好

3.再看看另外2个目录,npm的本地仓库跑在系统盘c盘的用户目录了(没见到npm-cache是因为没有用过,一使用缓存目录就生成了),我们试图把这2个目录移动回到D:\nodejs

先如下图建立2个目录

node_global node_cache

然后运行以下2条命令

  • npm config set prefix “D:\nodejs\node_global”
  • npm config set cache “D:\nodejs\node_cache”

3.配置镜像站

输入命令npm config set registry=http://registry.npm.taobao.org 配置镜像站

检查一下镜像站行不行 命令 npm config get registry

出现下图表示成功

4.注意

此时,默认的模块D:\nodejs\node_modules 目录
将会改变为D:\nodejs\node_global\node_modules 目录,
如果直接运行npm install等命令会报错的。
我们需要做1件事情:
1、增加环境变量NODE_PATH 内容是:D:\nodejs\node_global\node_modules

(注意,一下操作需要重新打开CMD让上面的环境变量生效)

安装淘宝npm(cnpm)

npm install -g cnpm --registry=https://registry.npm.taobao.org

将 D:\nodejs\node_global 添加进环境变量

输入cnpm -v命令,查看结果

如果安装后出现 cmd管理员模式才能运行node 的错误

cmd输入命令set-ExecutionPolicy RemoteSigned

之后输入YES

内容来源:

https://www.cnblogs.com/goldlong/p/8027997.html

https://www.csdn.net/tags/NtzaEg1sNzM3MzktYmxvZwO0O0OO0O0O.html

win10 实时保护永久关闭

用CMD命令修改注册表

除了前两种方法外,有一个更高级的CMD命令,可以直接更改注册表,同样达到前两种方法实现的效果。

首先,用管理员身份打开CMD窗口(PowerShell),然后执行下面这条语句:

reg add  "HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows Defender\Real-Time Protection" /v DisableRealtimeMonitoring /t REG_DWORD /d 1

原文地址 http://www.webkaka.com/tutorial/system/2021/022431/#method_03

uniapp实现一键登录

1、开通uni一键登录服务

1)需要登录DCloud开发者中心,申请开通一键登录服务。(注:已在开发者中心开发了项目应用获取appid)

2)进入基础配置配置相关的信息,我这个是已经配置好了,在获取用户手机号码时需要云服务用到的ApiKeyApiSecret可在这里获取

真机调试无需添加应用,如需打包使用请添加。一键登录应用ID为离线打包时配置的appid

3)添加服务空间

2、uni-app项目开通uniCloud服务

1)在uni-app项目中创建云开发环境,可阿里云或者腾讯云(我的是阿里云)

2)创建云函数,右键云开发环境创建

3)云函数使用

'use strict';
exports.main = async (event, context) => {
	// event里包含着客户端提交的参数
		const res = await uniCloud.getPhoneNumber({
			appid: 'xxxx', // 替换成自己开通一键登录的应用的DCloud appid,使用callFunction方式调用时可以不传(会自动取当前客户端的appid),如果使用云函数URL化的方式访问必须传此参数
			provider: 'univerify',
			apiKey: 'caf274f2f33c8715725f28ee5c755602', // 在开发者中心开通服务并获取apiKey
			apiSecret: '03f484268054c2b8f4cfb575ed5f2d89', // 在开发者中心开通服务并获取apiSecret
			access_token: event.access_token,
			openid: event.openid
		})
		// 这里已经成功获取手机号,访问后端接口处理
		const phone = res.phoneNumber
		const apiUrl = "xxxx" // 后端登录验证地址
		
		return await uniCloud.httpclient.request(apiUrl, {
		    method: 'POST',
		    data: {
		      phone: phone
		    },
		    contentType: 'json', // 指定以application/json发送data内的数据
		    dataType: 'json' // 指定返回值为json格式,自动进行parse
		  })
};

4)将云函数上传到云服务器(点击云函数右键上传)

5)项目配置(manifest.json中app模块的一键登录勾选)

3、项目开发

1)页面点击一键登录(客户端-预登录)

uni.preLogin({
					provider: 'univerify',
					success(res) { //预登录成功
					console.log('预登录成功'); 
						uni.login({
							provider: 'univerify',
							univerifyStyle: {
								"icon": {
									"path": "static/0105c858eeffaca8012049ef28010c.jpg" // 自定义显示在授权框中的logo,仅支持本地图片 默认显示App logo   
								},
							},
							success(res) { // 登录成功
								uniCloud.callFunction({
									name: 'get_phone_with_card_token', // 你的云函数名称
									data: {
										access_token: res.authResult
											.access_token, // 客户端一键登录接口返回的access_token
										openid: res.authResult.openid // 客户端一键登录接口返回的openid
									}
								}).then(res => {
									console.log(res);
									if (res.result.data.status == 0) {
										// 登陆失败操作
										console.log('登陆失败操作');
									} else {
										console.log('登陆成功操作');
										// 登陆成功操作
										uni.closeAuthView()
									}
								}).catch(err => {
									console.log("获取失败");
								})
							},
							fail(res) { // 登录失败
							}
						})
					},
					fail(res) { // 预登录失败
						// 不显示一键登录选项(或置灰)
						// 根据错误信息判断失败原因,如有需要可将错误提交给统计服务器
						console.log('失败', 2222);
						console.log(res.errCode)
						console.log(res.errMsg)
					}
				});

2)运行时可在云函数中查看日志(判断是否请求成功)

注)如果手机没有插入有效的sim卡,或者手机蜂窝数据网络关闭,都有可能造成预登陆校验失败。(所以运行测试时需要在有sim卡的真机上测试,使用数据线连接电脑和手机,将项目运行在手机上)
连接后可自动检测

原文链接https://blog.csdn.net/weixin_42373488/article/details/113182370

PHP 后台配置规范

// 表单
// 输入框 'type' => 'input'
// 'maxlength' => 20 最大输入字符个数20
['field' => 'code', 'title' => '员工编号', 'type' => 'input', 'maxlength' => 20]

if(isempty($search, 'pantou_code')) // like 搜索
  $o->whereLike('a.pantou_code' , "%{$search['pantou_code']}%");
if(isempty($search, 'create_time')) { // 时间段内
  $date = $search['create_time'];
  $date[1] = date('Y-m-d H:i:s', strtotime($date[1].' 00:00:00')+86399);
  $o->whereTime('a.create_time', 'between', [$date[0].' 00:00:00', $date[1]]);
}

python中删除某个元素的3种方法

1.remove: 删除单个元素,删除首个符合条件的元素,按值删除
举例说明:
>>> str=[1,2,3,4,5,2,6]
>>> str.remove(2)
>>> str
[1, 3, 4, 5, 2, 6]

2.pop:  删除单个或多个元素,按位删除(根据索引删除)
>>> str=[0,1,2,3,4,5,6]
>>> str.pop(1)   #pop删除时会返回被删除的元素
1
>>> str
[0, 2, 3, 4, 5, 6]
>>> str2=['abc','bcd','dce']
>>> str2.pop(2)
'dce'
>>> str2
['abc', 'bcd']

3.del:它是根据索引(元素所在位置)来删除
举例说明:
>>> str=[1,2,3,4,5,2,6]
>>> del str[1]
>>> str
[1, 3, 4, 5, 2, 6]
>>> str2=['abc','bcd','dce']
>>> del str2[1]
>>> str2
['abc', 'dce']

除此之外,del还可以删除指定范围内的值。
>>> str=[0,1,2,3,4,5,6]
>>> del str[2:4]  #删除从第2个元素开始,到第4个为止的元素(但是不包括尾部元素)
>>> str
[0, 1, 4, 5, 6]

del 也可以删除整个数据对象(列表、集合等)
>>> str=[0,1,2,3,4,5,6]
>>> del str
>>> str         #删除后,找不到对象

Traceback (most recent call last):
  File "<pyshell#27>", line 1, in <module>
    str
NameError: name 'str' is not defined

注意:del是删除引用(变量)而不是删除对象(数据),对象由自动垃圾回收机制(GC)删除。

补充: 删除元素的变相方法
s1=(1,2,3,4,5,6)
s2=(2,3,5)
s3=[]
for i in s1:
if i not in s2:
    s3.append(i)
print 's1-1:',s1
s1=s3
print 's2:',s2
print 's3:',s3
print 's1-2:',s1

Python 时间格式化

# strftime()方法语法:
time.strftime(format[, t])
# 参数
# format -- 格式字符串。
# t -- 可选的参数t是一个struct_time对象。
"""
python中时间日期格式化符号:

%y 两位数的年份表示(00-99)
%Y 四位数的年份表示(000-9999)
%m 月份(01-12)
%d 月内中的一天(0-31)
%H 24小时制小时数(0-23)
%I 12小时制小时数(01-12)
%M 分钟数(00=59)
%S 秒(00-59)
%a 本地简化星期名称
%A 本地完整星期名称
%b 本地简化的月份名称
%B 本地完整的月份名称
%c 本地相应的日期表示和时间表示
%j 年内的一天(001-366)
%p 本地A.M.或P.M.的等价符
%U 一年中的星期数(00-53)星期天为星期的开始
%w 星期(0-6),星期天为星期的开始
%W 一年中的星期数(00-53)星期一为星期的开始
%x 本地相应的日期表示
%X 本地相应的时间表示
%Z 当前时区的名称
%% %号本身
"""