Git是一个开源的分布式版本控制系统,可以有效、高速地处理从很小到非常大的项目版本管理。
对gitlab的常见的使用有建立仓库、提交代码、更新代码、回滚代码、显示/修改日志、拉取分支、解决冲突、设置比较工具等
一、安装
git下载官网地址: http://git-scm.com/downloads
根据操作系统选择下载(版本1.9以上)
安装完成,在项目根目录鼠标右键可以打开Git GUI Here 和 Git Bash Here则安装成功.
二、Git设置
一般在新的系统上,我们都需要先配置下自己的 Git 工作环境。配置工作只需一次,以后升级时还会沿用现在的配置。当然,如果需要,你随时可以用相同的命令修改已有的配置。
1、设置用户名和邮箱(必须设置)
在命令行里输入以下命令来添加用户名和 Email ,这个信息将用在后续你的每一次 Git 提交里。
git config --global user.name "Your Name" # 请替换你的用户名
git config --global user.email your@email # 请替换你自己的公司邮箱
设置完之后可以查看一下自己的配置:
git config --global –list
三、权限校验
首先,您的数据保存在远端服务器一份,服务器需要对您的身份识别。
云效代码管理 (Codeup)的仓库支持 HTTP(S) 和 SSH 两种访问协议,SSH 协议可以实现安全的免密认证,且性能比 HTTP(S) 协议更好。
从云校上生成ssh公钥并配置到云校上
Ssh公钥有两种算法类型,ED25519 (推荐)和RSA (不推荐)
这里以ED25519为例:
1、查看本地是否有ssh公钥
cat ~/.ssh/id_ed25519.pub
2、没有的话,生成一个
ssh-keygen -t ed25519 -C "<
注释内容
>"
3、点击回车,选择ssh密钥生成路径。
密钥默认生成路径:/home/user/.ssh/id_ed25519,
公钥与之对应为:/home/user/.ssh/id_ed25519.pub。
4、设置口令(这里设置空就行)
口令默认为空,你可以选择使用口令保护私钥文件。如果你不想在每次使用 SSH 协议访问仓库时,都要输入用于保护私钥文件的口令,可以在创建密钥时,输入空口令。
5、 点击回车,完成密钥对创建。
6、 拷贝公钥
cat ~/.ssh/id_ed25519.pub | clip
从云校上添加上ssh公钥就可以了
当然用http(s)协议也是可以的,这么设置一下用户名密码,本地git首次提交代码的时候,输入下用户名密码即可。
四、快速上手
登录云校,找到需要克隆的代码,赋值ssh路径
将代码克隆到本地
git clone 代码地址
用编辑器打开代码,一般默认就会自动关联了。
如果有个别没有自动关联的情况,也可以手动指定一下git位置, Vscode也是一样的
五、使用
从一般开发者的角度来看,git有以下功能:
1、 从服务器上克隆完整的Git仓库(包括代码和版本信息)到单机上。
2、 在自己的机器上根据不同的开发目的,创建分支,修改代码。
3、 在单机上自己创建的分支上提交代码。把服务器上的分支,checkout到本地
4、 在单机上合并分支。(也可以从云校上操作)
比如将develop分支代码合并到master分支上,需要一下几步:
① 切到develop分支上获取最新代码
② 切到master分支上获取最新代码
③ 选择develop分支,点击merge into current 即可
5、 把服务器上最新版的代码fetch下来,然后跟自己的主分支合并。
六、注意点
1、我们研发习惯一般项目至少会有两个分支 master、develop
master:主分支,也是代码最终的成果分支,一般部署到生产环境都是从master分支部署。
develop:开发分支,研发过程中,一个项目多人研发时如果没有别的并行模块研发的话,从develop分支写,提交代码之前先pull拉去一下最新,从本地合并完之后,再push到代码仓库里。
2、如果一个项目有多个迭代同步研发的话,可以创建多个分支,先上线的,先往master分支上合并。如果修改生产环境上的bug,可以从master分支拉去一个release分支,改完后合并到master分支上,删除release分支。
wuli哥哥是傻帽
01介绍在Golang语言并发编程中,经常会遇到监控goroutine运行结束的场景,通常我们会想到使用WaitGroup和chan+select,其中WaitGroup用于监控一组goroutine是否全部运行结束,chan+select用于监控一个goroutine是否运行结束(取消一个goroutine)。如果我们需要监控多个goroutine是否运行结束(取消多个goroutine),通常会使用context,当然使用context也可以用于监控一个goroutine是否运行结束(取消一个goroutine)。我们在之前的文章已经介绍过Golang语言标准库Context,未阅读的读者朋友们可以按需翻阅。本文我们主要介绍Context的一些使用方式。02取消一个goroutine使用context取消一个goroutine,比较类似于使用chan+select的方式取消一个goroutine。示例代码:funcmain(){ ctx,cancel:=context.WithCancel(context.Background()) gofunc(ctxcontext.Contex
区块链应用又出新实践样本了!就在近日举办的2020世界区块链大会武汉区块链场景对接论坛上,武汉市区块链不动产税收示范项目建设正式亮相,这是区块链在政务应用上的创新实践。其中腾讯安全领御打造的武汉政务区块链中枢,为武汉税务区块链示范应用建设提供了技术保障。武汉市区块链不动产税收示范项目建设基于区块链多方共识、不可篡改、数据可追溯的这些特性,实现了不动产税收关联部门间高效协同和数据共享,“减资料、减环节、简流程、减时限”,适用于新建商品房不动产交易、税收和登记全流程场景。数字化浪潮下,区块链应用也逐渐向各领域、各行业辐射,覆盖了数字身份、电子存证、电子票据、产权登记、工商注册、数据共享、涉公监管、行政审批、公益等诸多场景。高技术门槛、高运维成本、监管难度大......,传统“一个应用配一套运行环境”的“烟囱式区块链应用建设”模式的弊端,阻碍了城市数字化进程。怎么推进政务数字化转型,推动政务区块链技术的快速普及和规模化应用?腾讯安全领御以区块链中台产品为基础架构,结合“武汉市城市大脑体系”,打造了武汉政务区块链中枢,降低开发、部署、运营、互通、监管的难度和成本。这个运用了FISCOBCOS、
Painter中绘制图形很简单,今天我们就来看看painter艺术油画笔的使用方法。1、打开Painter软件,鼠标左键单击菜单下的【文件】>>【新建】,在新创建的画布中绘图,右边的画笔选项栏下选择艺术油画笔,如下图所示。2、接着,设置画笔的颜色为浅红色,画笔的大小为20,并用画笔在画布上绘制出卡通房子出来,如下图所示。3、然后,更改画笔的笔触样式,选择厚油画笔样式的画笔,如下图所示。4、接着,更改画笔的颜色为橘色,画笔的大小设置为20,用画笔在画布上绘制出一条道路出来,如下图所示。5、接着,更改画笔的笔触样式,选择颗粒调好笔样式的画笔,如下图所示。6、然后,设置画笔颜色为绿色色,画笔的大小设置为10,在画布的画出一棵树出来,如下图所示。用不同的画笔就会画出不同的效果,喜欢绘画的朋友按着步骤也来画画吧。
作为程序员,偶尔会冒出些新奇的想法,又不希望实现起来太麻烦,比如说做一个单机版的客户管理系统。这时候我们可能会希望有个这样的存储工具:不需要网络接口成熟可嵌入式如果我们需要的是关系型数据库,可以选择SQLite,如果希望用菲关系型数据库,我推荐尝试DiskDB。DiskDB简介DiskDB是一个轻量级的JSON文件数据库,它的API模仿了MongoDB,非常适合于Node环境开发。Github:https://github.com/arvindr21/diskDB使用手册:https://github.com/arvindr21/diskDB/README.md应用实例:https://github.com/arvindr21/diskDB/tree/master/examplesDiskDB用法介绍DiskDB的安装$npminstalldiskdb复制vardb=require('diskdb'); db=db.connect('数据库存储目录',['访问的数据集合']); //之后像Mongodb一样操作它复制注:每一个
中国铁塔也有望成为最近30年来在港交所进行的第四大IPO融资。 据悉,7月4日,中国铁塔开始对中国香港IPO的投资者需求进行评估,并且开始了其IPO前的“投资者教育”(pre-dealinvestoreducation),向投资者介绍待发行公司。 报道称,中国铁塔此次IPO将超越小米公司,成为今年以来全球最大规模的IPO。与此同时,中国铁塔也有望成为最近30年来在港交所进行的第四大IPO融资。 6月28日,《南华早报》援引知情人士消息称,中国铁塔已经得到了港交所上市委员会的正式批准,将通过IPO的方式融资100亿美元。中国国际金融公司和高盛是中国铁塔此次IPO的承销商。 今年5月中旬,中国铁塔正式向港交所提交了上市申请。从招股书看,2015年,中国铁塔的总营收为88.02亿元,税前利润亏损47.46亿元;2016年,其总营收为559.97亿元,税前利润为1.06亿元。到2017年,其总营收已达686.65亿元,税前利润为26.85亿元。 其中按客户划分,2017年中国移动带来营收368.04亿元,占总营收53.6%,中国联通带来营收162.32亿元,占总营收23.7%,中国电信带来营收
花了好几天,终于看完了《Docker进阶与实战》,今天终于抽出时间来实践一把,这里把今天实战的过程记录一下。安装Docker因为我使用的MacOS系统,查阅文档找到在MacOS系统中最简易安装办法如下。#使用HomebrewCask安装virtualboxbrewcaskinstallvirtualbox#使用Homebrew安装docker-machinebrewinstalldocker-machine#使用docker-machine创建名叫mydockerhost的docker主机docker-machinecreate--driver=virtualboxmydockerhost这里创建docker主机时要从github下载一个boot2docker.iso的镜像,下得很慢,我使用axel加速了一下wgethttps://github.com/boot2docker/boot2docker/releases/download/v1.11.2/boot2docker.iso #这里会进行几次重定向,最后重定向到amazon上s3的一个地址,拷贝这个地址,然后中止下载,然后用ax
选择模型fd_set结构可以把多个套接字连在一起,形成一个套接字集合typedefstructfd_set{ u_intfd_count;//下面数组的大小 SOCKETfd_array[FD_SETSIZE];//套接字句柄数组 }fd_set;复制网络事件:readfds集合:数据可读,连接关闭,重启或者中断writefds集合:数据能发送exceptfds集合:OOB数据可读设置超时:如果为null为无限阻塞,知道有网络事件发生typedefstructtimeval{ longtv_sec;//指示等待多少秒 longtv_usec;//指示等待多少毫秒 }timeval;复制应用举例1初始化fdSocket集合,添加监听套接字句柄2将fdSocket集合拷贝fRead传递给select函数,当有事件发生的时候,select函数移除fRead中没有未决IO操作的句柄,然后返回3比较原来的fdSocket集合,与select处理过的fdRead集合,确定哪些套接字有未决IO并处理这些IO4回到2进行选择1CInitSocktheSock;//初始化winsock库 2intmai
theme:channing-cyan这是我参与11月更文挑战的第1天,活动详情查看:2021最后一次更文挑战滑动窗口算法滑动窗口算法可以将嵌套的循环问题,转换为单循环问题,降低时间复杂度。比如给定如下数组:[5,7,1,4,3,6,2,9,2]复制求出5个连续元素的最大和是多少?[5,7,1,4,3]是第一组5个连续元素,求和是20,[7,1,4,3,6]是第二组5个连续元素,求和是21......这样一直进行下去,最终对比发现5个连续元素的最大和是24,由[4,3,6,2,9]组成;简单粗暴的双层for循环算法实现:constgetMaxSumOfFiveContiguousElements=(arr)=>{ letmaxSum=-Infinity; letcurrSum; for(leti=0;i<=arr.length-5;i++){ currSum=0; for(letj=i;j<i+5;j++){ currSum+=arr[j]; } maxSum=Math.max(maxSum,currSum); } returnmaxSum; };复制时间复杂
开源地址: https://github.com/CreateChen/Bencode Nuget:Install-PackageBencode 1.Bencode规则 BEncoding是BitTorrent用在传输数据结构的编码方式,我们最熟悉的“种子”文件,它里面的元数据就是BEncoding过的字典表。虽然比用纯二进制编码效率低,但由于结构简单而且不受字节存储顺序影响(所有数字以十进制编码,不存在大端小端的问题)——这对于跨平台性非常重要。而且具有较好的灵活性,即使存在故障的字典键,只要将其忽略并更换新的就能兼容补充,更多介绍见维基百科。 这种编码方式支持四种类型的数据:string,int,Dictionary<string,object>,List<object>,各自的编码规则如下: 1.1string类型 &
1、html <divclass="img-wrap"> <img:src="./img.jpg"> </div>复制 2、css .img-wrap{ position:relative; width:100%; height:0px; padding-top:100%;//padding-bottom都可以 img{ position:absolute; top:0; left:0; width:100%; height:100%; } }复制 3、原理: 外层div中,padding-top:100%;这个padding-top中的百分百是根据width去计算的。所以padding-top拿到了跟width一样的大小,又通过padding去填充了容器的高度,所以实现了div宽度百分百,高度跟宽度一样大小; 内部img标签的position:absolute。使其成为块状元素,可以设置img宽高,均为外层div盒子的百分百,由此实现img宽度百分百,高度跟宽度一样大小
在开启selinux时_增加规则_允许httpd_php-fpm执行iptables命令 转载注明来源:本文链接来自osnosn的博客,写于2020-01-04. 起因 写了个php的页面,经过一番验证之后,要调用iptables添加或修改一条记录。 我的环境是centos7,nginx+php7-fpm,开启了selinux。 nginx和php-fpm都是以apache用户身份运行。且运行在httpd_t标签下。 因为iptables的命令比较固定。所以写了个简单的C程序,在C程序内用execl()执行iptables语句(为了安全,所有参数写死在程序中)。 然后把这个C程序编译为执行文件myrule,设置myrule文件的ower为root,设置myrule可执行,并设SUIDchmodu+smyrule。 在php程序中用exec()调用这个myrule程序。 临时关闭selinux setenforce0 测试,一切OK,php成功调用myrule程序,用iptables-nL见到了加入的记录。 恢复selinux setenforce1 php执行失败,没看到有新
589F 题意:给出n个时间区间,每个区间挑定长的非连续区间,求不同个区间不存在时间冲突的最大定长,输出乘上n 二分图模型+二分长度,左顶点集为区间编号,右顶点集为时间编号(1...10000),汇点到左顶点集的容量为枚举长度,右顶点集到汇点的容量为1,左到右顶点集的容量如果符合条件则连边且置1,注意左闭右开 判断只需直到是否满流即可 https://paste.ubuntu.com/p/JBDQ49k9yv/ 321B 题意:你有m张卡牌,对方有n张卡牌,卡牌类型有攻击和防御两种类型,而你只有攻击卡牌 卡牌的具体规则如下: 每张卡牌只需使用一次 攻击类卡牌值为x,则可以攻击对方, 若对方无卡牌,则受到x伤害; 若对方有攻击类卡牌且值y<=x,则受到x-y伤害,同时该卡牌作废 若对方有防御类卡牌且值y<x,则对方不受伤害,同时改卡牌作废 否则该攻击卡牌无法使用 现在是我方的回合,求使对方造成最大伤害的值(即使卡牌没用完也可以随时停止攻击) 这是一个二维问题,一个维度是卡牌数量(流量)另一维度是伤害值(费用),因此使用费用流求解 对我方m个点编号1...m,对方n个点拆成两
原文:http://www.mathworks.com/support/bugreports/1293244 Description DeployedGUIsandfigureslookandfeeldifferentcomparedtoundeployedMATLABdesktopversions. Deployedapplicationsareusingthecrossplatformlookandfeelbydefault,whiletheundeployedfiguresandGUIsusetheplatformspecificlookandfeel. Workaround Toworkaroundthisissue,manuallysetthelookandfeeltothedefaultplatformspecificversion.Ifyou'reusingworkaround2or3,dependingontheplatformyou'redeployingto,useoneofthelookandfeelcodesbelowandapplyit
题目表述 给定一个二叉搜索树的根节点root和一个值key,删除二叉搜索树中的 key 对应的节点,并保证二叉搜索树的性质不变。返回二叉搜索树(有可能被更新)的根节点的引用。 一般来说,删除节点可分为两个步骤: 首先找到需要删除的节点; 如果找到了,删除它。 示例: 输入:root=[5,3,6,2,4,null,7],key=3 输出:[5,4,6,2,null,null,7] 解释:给定需要删除的节点值是3,所以我们首先找到3这个节点,然后删除它。 一个正确的答案是[5,4,6,2,null,null,7],如下图所示。 另一个正确答案是[5,2,6,null,4,null,7]。 递归 根据二叉搜索树的性质 如果目标节点大于当前节点值,则去右子树中删除; 如果目标节点小于当前节点值,则去左子树中删除; 如果目标节点就是当前节点,分为以下三种情况: 其无左子:其右子顶替其位置,删除了该节点; 其无右子:其左子顶替其位置,删除了该节点; 其左右子节点都有:其左子树转移到其右子树的最左节点的左子树上,然后右子树顶替其位置,由此删除
最近公司在做移动端的项目,自然而然的需要搭建打包的环境。本来计划用Jenkins的,但是发现在gitlab上创建完项目后,提示去配置pipeline,于是决定用gitlab去尝试下,毕竟我觉得Jenkins的配置过于复杂了。 gitlab-runner 在gitlab中,gitlab-runner相当于Jenkins中的slave的概念,所以首先需要给项目配置一个runner。gitlab-runner分为三种:SharedRunner、GroupRunner、SpecificRunner。其中: SharedRunner相当于全局的runner,所有的项目都可以使用。 GroupRunner相当于给一个分组设置runner,因此,分组中所有的项目都可以使用。 SpecificRunner顾名思义,就是项目特有的runner。只有这一个项目才能使用。 个人建议使用GroupRunner,你可以根据不同种类的项目,创建不同的分组,比如:Android、IOS、服务端等,然后针对每个分组创建对应的GroupRunner,这样相互之间不会有影响,同时又不需要为每个工程单独创建runner
Sansaloni,C.,Franco,J.,Santos,B.etal.Diversityanalysisof80,000wheataccessionsrevealsconsequencesandopportunitiesofselectionfootprints.NatCommun11,4572(2020).https://doi.org/10.1038/s41467-020-18404-w 本文作者利用DArTseq对56342种驯化六倍体、18946种驯化四倍体,以及3903种野生近缘种进行了测序,鉴定出了三十余万个高质量SNP和SilicoDArTmarker。测序结果被比对到IWGSCRefSeqv1.0、durumwheatgenomeassembly(cv.Svevo)和DArTgeneticmap。研究中的小麦来自CIMMYT和ICARDA。 通过测序结果对样本进行分析,作者发现六倍体elite小麦相较于landrace品种,尚有大量变异未被利用;四倍体elite品种则均匀分布在“遗传多样性空间”内,象征着大部分多样性都已被利用(除了一大批来自Ethiopia的品
这篇博文,作为本人《Java高级技术》专栏的一个里程碑 统合了本人学业生涯的所有自主实现的优化资源请求发送流程的开源框架级别的高级技术 相信在本篇博文的学习中,同学们将会有非常大的收获! 那么,废话不多说,开始本篇博文的主题讲解吧: 首先,本人来讲解下多文件自平衡云传输框架的基本功能: 功能概述: 资源上传 资源下载 服务发现: 优化网络通信流程 负载均衡: 减少资源发送端的压力 大体上来讲,可以通过一句话来概括: 通过云思想,简化、优化多个文件的请求发送流程的开源框架 接下来,本人来讲解下多文件自平衡云传输框架的基本实现原理: 实现原理: 多文件自平衡云传输框架大体上由四个模块组成: 功能模块的组成: 远程方法调用层 网络文件传输层 负载均衡层 资源发现层 由上述四个功能模块通过一定的逻辑进行巧妙的拼接,就实现了本专栏的目标—— 那么,本人再来讲解下这四层的结合步骤: 结合步骤: 通过资源发现层: 资源拥有者注册资源/资源请求者请求资源 资源发现层通过远程方法调用层告知资源请求者资源列表, 资源请求者通过远程方法调用层获知目标资源的持有者列表 资源请求者根据
前言 有好几个月都没有认真学习,博客也停更挺久的,中间发生了很多事,网络安全的学习确实是耽搁了。但是有得有失吧,在派出所实习也学到了很多基层办案的知识,一些人情世故,让自己更加清楚了自己喜欢的是什么样的生活,今年可能网安学习时间会比较少了,专注备考,希望明年再见时能以一名网警的身份提升网络安全。 心得 今年的信息收集多明白了一个点,就是子资产的问题。很简单一个道理,中心靶标“重兵把守”,很多主站有防护,但是其实子资产的防护就会弱很多了,所以渗透时要学会”欺软怕硬“。国内政府的组织架构是:部—厅—局—处。所以其实在收集时,这里是很难通过工具及相关探测到,但是实际上每级单位都有很多的从属单位,一般方法是通过天眼查或者在官网找到从属事业单位的信息,比如今年在打一个市级局时找到了很多他的局属事业单位,从而扩大了攻击面 渗透测试时,对于CMS和框架的漏洞,今年也碰上了很多。dedecms、ezEIPv5.0、DESTOONB2B、帝国cms、javapms。这里dedecms爆路径还是挺好用的,通过此漏洞成功爆出后台路径。dedecms在关闭会员中心和tags.php的情况下,常见漏洞可
基本练习通常是一个两个简单动作在不同位置上反复操练,所以打谱的时候用模进必不可少。 所谓模进,就是把一个片段平行地转移到其他音高上进行。比如 doremifa 可以把从do开始改成从so开始,那么就变成了 solasido lilypond的模进命令很管用,能节省大量时间。它的命令是: %先声明片段pianduan=\relativec'{ cdef } \score{ %把片段从c模进到d \transposecd{\pianduan} }复制 下面给出我做的例子 %声明好片段basicOne basicOne=\relativec''{ d8-2~c-1~<dc>4 e8-3~c-1~<ec>4 f8-4~c-1~<fc>4 g8-5~c,-1~<g'c,>4 } %正式打谱 \score{ \relativec''{ \cleftreble \basicOne \break %模进到d \transposecd{\basicOne} \break %模进到e,下面类
定义 素数,又称质数,指因数只有两个的数(及自己和1)。 注意:1与0不是质数,因为其因数个数小于2 求素数 法一:直接求解 基本的解法就是从定义入手,既然定义是除了1与自己以外没有其它因数,那么我们询问n是否是质数时就可以枚举x\((1<x<n)\),判断x是否是n的因数。 代码: if(n<=1){//小于等于1就不是质数 return0; } for(inti=2;i<n;i++){//枚举(1,n)之间的正整数,判断是否有 if(n%i==0){ return0; } } return1; 复制 优化 我们知道,若\(n=x*y(x\ley,\{n,x,y\}\subseteq\mathbbR)\)则若\(x\notin\mathbbZ\)那么,\(y\)一定有\(y\notin\mathbbZ\),若\(x\in\mathbbZ\)那么,\(y\)一定有\(y\in\mathbbZ\),所以我们其实只要枚举所有小于等于\(\sqrt[2]n\)的大于一整正数就行了。 代码: if(n<=1){//小于等于1就不是质数 return