Monday, April 12, 2021

V2EX - 技术

V2EX - 技术


准备从 Go 和 Rust 二选一,求建议

Posted: 12 Apr 2021 04:33 AM PDT

从代码风格来看,目前喜欢的是 Rust

求意见和中文学籍

求一个最大值解法

Posted: 12 Apr 2021 04:30 AM PDT

6e9a5c21688438e387b39fbec70a05e.png

每个装备只能选一个属性,即一行只能有一个属性。

每列可以有多个属性,也可以没有属性。

每列上的数据先相加。

每列相加之和各自加底数 1 之后再相乘。

求最终最大值。 [穷举太慢,自己写的逻辑算出来 2.139 ,还不到最大]

坚果云的客服真是太差了

Posted: 12 Apr 2021 04:30 AM PDT

坚果云的云桥会把你的所有文件同步一份空数据到本地,即使你勾选了不同步。

找客服问怎么关,给我的回复是让我自己把所有文件同步下来。。

实在用不惯 OrginOS 想回 MIUI 去

Posted: 12 Apr 2021 04:19 AM PDT

虽然还没 12.5,虽然 BUG 还是很多。。。

Orgin 的广告真的不是一般的多,还都关不掉,各种系统 UI 的角角落落都能给你插广告。MIUI 虽然也有广告但是好坏大部分都能关掉

VIVO 的私有快充太贵买不起第二套,猴厂的好坏还有 QC 保底

问一下 K40 40P,米 10S,米 11 这几个机子还有 GMS 吗。。。

关于 mongodb 索引的疑问��️

Posted: 12 Apr 2021 04:18 AM PDT

使用 mongodb 应该什么时候添加索引?集合建立之前或者之后?如果是在之后,进程写入数据集合才建立,这时候如何添加?

有大佬使用 Python 技术栈搞过微服务么?

Posted: 12 Apr 2021 04:18 AM PDT

目前准备使用 flask 搭建微服务,但是有以下问题不知道解决

1 、网关怎么处理?
2 、注册中心问题
3 、分布式事务问题

上面这些问题在 java 微服务网关有 Spring Cloud 那一套, 那 python 使用什么技术栈呢?

typecho 博客换域名的正确姿势

Posted: 12 Apr 2021 04:17 AM PDT

我用 phpstudy 在本地搭建并且测试了 typecho 博客,现在我想把博客迁移到服务器上面

我目前想法就是,直接在 typecho 后台把站点地址 http://localhost 修改为 http://xxx.com ,然后导出数据库,打包代码,最后上传服务器导入数据库

大家觉得我的姿势对不对,各位平时又是如何操作的呢?

用 Pi 做 NAS 有没有什么槽点??

Posted: 12 Apr 2021 04:16 AM PDT

家里两个现成的硬件都有问题:

v2ex.com/t/769624

v2ex.com/t/749937

采购新硬件的话要小要新,好像只有 Pi 之类的可以选择了,如果入手树莓派最新的 2G 版本的单单做个 NAS 够了吧?尤其传输速度上??

微软出品的 Rust 和 Go 学习文档

Posted: 12 Apr 2021 04:16 AM PDT

请教个 docker 或是 iptables 防火墙问题:容器内能 ping 通 ip 但 ping 不通域名,提示“bad address”

Posted: 12 Apr 2021 04:15 AM PDT

原帖发在了恩山,https://www.right.com.cn/forum/thread-4109783-1-1.html

dns 服务器应该不是问题了,可能就是防火墙的问题。用的是 x86 的 openwrt,防火墙是 iptables 程序,这条 iptables 规则怎么写? docker 中的容器 ping 不通域名这个问题是怎么一回事?

echo echo "91.189.92.201 archive.ubuntu.com" >> /etc/hosts 后就能 ping 通 archive.ubuntu.com 这个域名

搜到了下面的方法,但是我不知道用 iptables 该怎么解决,救救孩子🧒🏻吧

firewall-cmd --zone=public --add-masquerade --permanent firewall-cmd --reload systemctl restart docker 

有没有 IT 行业的小说推荐

Posted: 12 Apr 2021 04:11 AM PDT

官场好像有很多类似的小说
好奇 IT 行业有没有相关的小说,之前有人推荐《凤凰项目一个 IT 运维的传奇故事》、《仍然不足够》,准备开始读一读

微信软磨硬泡要求存储空间权限,但是不给貌似也不影响啥,那它要来干嘛呢,有木有办法不给?

Posted: 12 Apr 2021 04:07 AM PDT

如题。。

软磨硬泡是指如果不给权限,它就会隔一段时间弹出"加载历史数据",但亲测不给权限所有的历史数据也都能读到。

一加氧 OS 最新版。

很蛋疼,因为如果那个弹框不及时手动按掉,就会导致之后的聊天消息都收不到推送。

web 页面转换为实时图片

Posted: 12 Apr 2021 04:03 AM PDT

请教下各位大神,目前工作中遇到一个需求,就是要在某个页面客户点击某个按钮触发将整个页面生成一个图片格式的留档保存在服务器。图片中是要有客户在页面上已经填写好的信息的。

后端是 Java,请问这个有什么方式可以实现的吗?

无法忍受 google 针对被他错识为大陆 ip 的 ip 地址的做法!

Posted: 12 Apr 2021 03:57 AM PDT

本来被识别错误用不了 YouTube premium 已经让人很恼火,现在 dns.google 竟然把来自这些被他识错的 ip 地址的针对"fonts.googleapis.com"这个域名的 ip 地址解析到一个只能在墙内访问而在墙外无法访问的 203 开头的北京谷歌的 ip 上面,使得我几乎无法正常打开所有使用了 Google Fonts 的网站,Google 是想做什么?

收徒计划可能失败了...

Posted: 12 Apr 2021 03:57 AM PDT

前段时间发了个收徒贴,一个月过去了,来分享一下收获吧~

业余自学,1 、时间和节奏难以保证,除了 996 的还有周末加两天班的.. 2 、入门内容学起来很枯燥。 建群初期 16 个人,到现在只有 2 个人还在坚持学习了。。

主要的学习方式是我整理学习路线,并且把内容分成小结和作业。我也把这个月的内容整理了一些输出:

1 、前端开发是否还有前途: https://www.bilibili.com/video/BV1eK4y1U7dP 2 、学习 CSS 布局: https://www.bilibili.com/video/BV1tV411n7jJ

其实还录了一些更细的知识点,但是后来发现 B 站上某培训机构老师的基础公开课讲的更细致更好,就直接推荐了。貌似线下培训机构也是助教带着看视频?

整理了一个前端自学路线,目前还在完善: https://github.com/Simbachen/self-learning-front-end/blob/main/articles/road-map.md

为了不因为个人的经验误导初学者,我也同时参考和推荐了大神整理的前端学习路线: https://github.com/kamranahmedse/developer-roadmap/blob/master/translations/chinese/img/frontend-map.png

除了初学者,还有一些童鞋加我是问跳槽、进阶、简历还有讲解技术之类的,没有拉群,但我一一回复了他们的问题,希望对他们有帮助。其中还有两个人正好是在跳槽面试中,说我是他们的贵人,厉害了,第一次。

有一个童鞋问有没机会进大厂请我看简历,我给了一些建议,无奈他的简历还是写的太差,迫于点了他发的红包,我整理了一文档,好像还有一点普适性,供参考,没有大厂经验的前端可以这么写简历: https://juejin.cn/post/6950088415832440869

以上~之前预想的这种自学方式可能暂时宣告失败了,接下来的摸鱼之路还在思考中...

安卓可以在地址栏里输入 scheme 唤起 APP 吗?

Posted: 12 Apr 2021 03:53 AM PDT

安卓可以在地址栏里输入 scheme 唤起 APP 吗? ios 的 Safari 可以 按住的 oppo 浏览器不行呢

DS218+空间快满了,怎么办?

Posted: 12 Apr 2021 03:34 AM PDT

只放了些高清的电影,4T 的空间就快满了

在预算有限的情况下:

方案一 更改磁盘阵列,取消备份,变成 8T 的无备份空间。实施起来比较困难,据我所知群晖不支持直接更改阵列,可能要全部重装。


方案二 购买西数 /希捷的外置盘,用 USB 口插在群晖上…感觉读写速度会很慢…

方案三 购买其他低价的类 NAS 设备,千兆网线共享空间给群晖,速度应该回快点。

方案四 置换更多盘位的群晖,把 DS218+(港行)挂闲鱼。

方案五…想不出来了…

华为手机自动拦腾讯云的电话?

Posted: 12 Apr 2021 03:17 AM PDT

小弟买了个腾讯云服务器和域名

需要备案了于是留了移动的电话

过了 1 周吧,腾讯云那边来人说打不通我的电话,备案不予通过

我说我就没接到你们的电话啊,我去拦截记录上找,也没有记录

你现在不就是和我打着电话吗,现在能备案吗

他说那我让备案的人再打一次电话,我说行

于是又过了一段时间,又打电话来说打不通我的电话,不予通过,我 X 了狗了

最后我通过更换二奶机 iPhone 的手机号,成功备案

所以我想问的是华为的手机会悄悄咪咪的拦截腾讯云的电话吗?

给手机推送提醒,有没有简单的方案呢?

Posted: 12 Apr 2021 03:12 AM PDT

目前想在脚本中给自己的 Android 手机推送消息,提醒自己,不知道有没有简单的方案呢?
自己有台 vps,本来想用 ChatOps 来做,但配置 ChatOps 还需要花些时间搞定,所以想先找一个比较简单的方案先用着。

搜了一下,看到有的用"喵提醒"(还要手机号注册。。),"IFTTT"。大家都是用什么方案呢?

Galaxy Note 10+ 面部识别和指纹识别问题

Posted: 12 Apr 2021 03:06 AM PDT

三星 Galaxy Note 10+
面部识别问题:只要我嘴上叼着烟,它就死活识别不出来。
指纹识别问题:速度慢,且经常识别失败,不得使用密码输入。

Go + gRPC-Gateway(V2) 构建微服务实战系列(水文持续更新中……)

Posted: 12 Apr 2021 03:05 AM PDT

之前那个 Chrome 书签不能同步的问题,我写了个 Chrome 插件

Posted: 12 Apr 2021 03:02 AM PDT

之前在 V 站上看到有人说 Chrome 书签不能跨机器同步,鄙人做了个 Chrome 插件,提供导入 Chrome 书签功能,可以 Chrome 跨设备使用,也可以跨浏览器使用,比如 Edge/Firefox/Chrome 浏览器直接同步。

项目链接: https://www.grabox.net/

Chrome Store 地址: https://chrome.google.com/webstore/detail/grabox/nijbkefpoolpdgangaidjfojilcbnpfl?utm_source=chrome-ntp-icon

刚写完没多久,遇到问题大家可以反馈一下,在此感谢。

建了个微信群,请大家不吝赐教。

cBI1zj.jpg

求一款方便使用的基于 JS 技术图片裁剪,前端好集成的

Posted: 12 Apr 2021 02:57 AM PDT

求一款好的基于 JS 技术图片裁剪,前端好集成的
大佬给推荐一款开源的
开源附上 github 地址的

建议大家都把 Google 给 ncr 一下

Posted: 12 Apr 2021 02:53 AM PDT

以前 Google 有个很烦的问题就是 Google.com 定向到 hk
一是强制安全搜索,设置无效
二是无论切什么地区节点都是 hk
三是 apple 设备都没法自定义搜索引擎,选 Google 就是默认.com ,然后转到 hk
四是近期 Google 应用有个 bug,就是刷出的推荐热点新闻,最底部总是提示登陆查看更多,实际上早就登陆了,登录也没效果

ncr 之后都解决了

C++中 static_cast<>做了什么

Posted: 12 Apr 2021 02:31 AM PDT

面试被问 static_cast<>做了什么?直接懵逼

Appstore 让上架 股票数据和资讯 APP 不?

Posted: 12 Apr 2021 02:27 AM PDT

如题,公司想尝试这个方向,想知道需不需要相关资。请教一下有经验的各位大佬

Google 环聊无法发送短信

Posted: 12 Apr 2021 02:16 AM PDT

gv 保号活跃需要发送短信,目前环聊已经无法发送短信了,大家有啥移动端的对策方案

「指定时间后如果手机在充电就开始备份照片」是怎么实现的

Posted: 12 Apr 2021 02:12 AM PDT

看到有 APP 能实现这个,是怎么唤醒的?

国内安卓市场更新必须提供《计算机软件著作权证书》了吗

Posted: 12 Apr 2021 02:06 AM PDT

提交小米市场的更新被拒了:

很抱歉,您的应用未通过审核,原因如下: 1 、请提交资质《计算机软件著作权证书》

有大佬遇到了吗,这是啥玩意儿,个人开发者可以申请吗?

HomeKit 还是 Alexa 好呢?

Posted: 12 Apr 2021 01:32 AM PDT

家里电子产品是果家全家桶, 但是不是所有的家居都支持 HomeKit, 而且 HomeKit 的扩展性和 siri 的功能性有待商榷. 有大佬横向使用比较过生活中哪一个更好吗.

Java 并发,在项目中都没怎么用过?面试一定会问吗? 最近有面试官问我 concurrentHashMap 的 put 过程,我都没看过源码 现在面试都考什么

Posted: 12 Apr 2021 01:28 AM PDT

《捕蛇者说》28 期发布: Ep 28. gRPC and Python

Posted: 12 Apr 2021 01:26 AM PDT

收听方式:

赞助 logo

如果喜欢我们的节目,欢迎通过爱发电打赏支持: https://afdian.net/@pythonhunter

嘉宾

  • Lidi Zheng

主播

时间线

  • 00:00:28 开始
  • 00:00:40 嘉宾介绍
  • 00:01:29 嘉宾经历
  • 00:05:26 嘉宾在 CMU (卡内基·梅隆大学) 研究生的经历回顾
  • 00:07:08 嘉宾在出入 Google 时的情况
  • 00:09:04 什么是 RPC
  • 00:09:55 gPRC 与 RPC 的关系是什么
  • 00:10:19 gRPC 中 g 的含义
  • 00:11:23 gRPC 支持的语言
  • 00:12:26 为什么 gRPC 要使用 HTTP2
  • 00:13:43 gRPC 使用了 HTTP2 的哪些特性 r
  • 00:14:10 什么是流控制
  • 00:14:49 流控制的一些选项是否可以在 gRPC 中修改
  • 00:16:02 gRPC 的 streaming 是如何实现的
  • 00:16:31 HTTP3 的出现是否会影响
  • 00:18:55 关于 TCP 和 UDP 服务保障的相关讨论
  • 00:20:08 gRPC Protocol Buffers
  • 00:23:36 关于 gRPC Python
  • 00:24:08 XX 语言的使用经验
  • 00:26:34 如何让 gRPC 支持 asyncio
  • 00:32:34 Python asyncio 特性讨论
  • 00:33:00 gRPC 与服务发现
  • 00:40:40 gRPC 与商业开源
  • 00:51:17 如何防止恶意代码从 Github 流入企业内部
  • 00:57:52 从 gRPC 角度出发聊一聊 Python 的性能
  • 01:06:44 有考虑用 Cython 重写 gRPC 嘛

相关链接

聊天网站的匹配功能怎么实现比较好

Posted: 11 Apr 2021 11:10 PM PDT

需求

用户上线后可进入匹配界面。然后按一定的条件对其进行匹配。每次匹配之前还需校验账户是否存在余额。

思考

现在暂不考虑 es 。

如果用 mongodb 存储用户 uid 以及相关匹配条件。相当于筛选出符合条件的用户。

增加对 mongodb 用户信息同步更新。

这种方案会存在那种问题?

现在项目是 mysql 生扛,然后 redis 加唯一锁,但是数据的状态更新还是落在 mysql 。特别容易出现状态更新失败的情况。

相似文章

https://www.v2ex.com/amp/t/497091

stripe 的 alipay 出问题?

Posted: 11 Apr 2021 10:58 PM PDT

扫码后,'订单信息无法识别'。网上查了一下,好像是个老问题。联系了 stripe 客服,也没给出个完整答复。

请教下 centos 依赖的问题

Posted: 11 Apr 2021 10:45 PM PDT

image.png

安装 mysql 提示,依赖版本高了,像这种问题,就要使用 RPM 包安装的方式,有什么可行的解决方法、思路?求指教

目前试过的有

  1. 编译 openssl,软链接过去,但是后来发现好事是依赖的问题,不行!
  2. 下载 openssl rpm 包,强制安装,也不行

为啥腾讯的高防比阿里的便宜这么多?

Posted: 11 Apr 2021 09:26 PM PDT

阿里 30g 防御 100m 带宽要 2 万多,腾讯 20g 防御 100m 带宽只要 6000,虽然阿里比腾讯多了 10g 防御但价格也差太多了吧?还是说腾讯有什么坑点?有买过的人说说吗?

Git 工作流程及分支策略

Posted: 11 Apr 2021 09:07 PM PDT

本文首发于 刘星的个人网站

image.png

Git 是目前世界上最先进的分布式版本控制系统。它使我们更方便的跟踪,管理和组织代码。也帮助了我们更好的与其他开发者进行协作开发。但是没有规矩不成方圆。协作开发必须有一个规范来约束各个贡献者的行为。这个规范就是 Git 工作流程(Git Workflow),也为我们规范各个分支管理策略等行为。

Git 工作流程是有关如何使用 Git 以高效协作开发的规则或策略建议,下文这些常见工作流程只是作为指导参考,这些工作流不是一成不变的,我们应该根据自己的项目选择或制定合适自己的工作流。

集中式工作流

首先我们来介绍最简单粗暴的集中式工作流,如果你用过SVN,那么你可以无痛切换到 Git 集中式工作流。该工作流只用到 master 这一个主分支来维护我们的代码,这也是该工作流的主要工作方式。

工作流程示例

1 、首先 clone 远程仓库到本地

git clone ssh://user@host/path/to/repo.git 

2 、然后在本地的 master 分支做出修改完成开发后,创建一个提交

git status # 查看本地仓库的修改状态 git add # 暂存文件 git commit # 提交文件 

3 、然后推送到远程仓库

git push origin master 

4 、 如果此时本地仓库与远程仓库有了分歧,Git 将拒绝操作并报错。这时我们就应该先 pull 远程仓库的修改到本地仓库后再解决重新推送

git pull --rebase origin master 

5 、如果有冲突,Git 会在合并有冲突的提交处暂停 rebase 过程,并报出错误信息,我们在解决掉冲突后可以使用一下命令将更改加入暂存区后继续只能执行 rebase:

git add <some-file> git rebase --continue 

如果遇到一个搞不定的冲突,这可以使用一下命令来终止 rebase

git rebase --abort 

主要遵循原则

  • 只用到 master 这一个分支,所有的修改都推送到 master 分支
  • master 分支代表了项目的正式发布版本,所以提交历史应该被尊重且是稳定不变的
  • pull 代码时, 最好使用 rebase 而不是生成一个 merge commit

优点

  • 集中式工作流主要优点是简单,非常适合小型团队
  • 对于要从 SVN 迁移过来的团队来说很友好

缺点

  • 当您的团队规模扩大时,上面详述的冲突解决过程可能会成为瓶颈

  • 完全没有发挥 Git 的优势,在实际使用 Git 协作的项目开发中很少使用集中式工作流

如果在稍大的团队中使用前面的集中式工作流,那么可能会在解决冲突中浪费很多时间。在实际开发中我们基本上都是都 功能驱动式开发,基于功能需求,创建相应的分支进行开发,完成开发合并到主分支后再被删除掉。接下来我们介绍的三个工作流:GitHub Flow,Git Flow 及 Gitlab Flow 都是基于不同的分支管理策略运作的。

GitHub Flow 工作流

GitHub Flow 是一个轻量级的基于分支的工作流程。它由 GitHub 在 2011 年创建。分支是 Git 中的核心概念,并且 GitHub 工作流程中的一切都以此为基础。

最重要的的一点就是:**main / master分支中的任何内容始终都是可部署的**。其他分支(功能分支)创建用于新功能和错误修复的工作,并且在工作完成并经过检查后,这些分支将合并回到主分支中后删除。这些分支名应该是具有描述性的如 refactor-authentication, user-content-cache-key, make-retina-avatars

工作流程示例

1 、首先 clone 远程仓库到本地

git clone ssh://user@host/path/to/repo.git 

2 、根据要实现的功能创建一个新的分支,分支名应该具有描述性,如实现鉴权功能:feature-auth

git checkout -b feature-auth 

3 、然后将新工作提交到该分支下,并定期将工作推送到远程仓库

# 创建一个 commit git status # 查看本地仓库的修改状态 git add # 暂存文件 git commit # 提交文件  # 将分支推送到远程仓库 git push --set-upstream origin feature-auth 

4 、当你需要帮助或者反馈,或是你觉得你已经完成该功能的工作准备合进主分支的时候创建 pull request

5 、当你的这部分工作在 pull request 中,被 review 以及 approved 后,则可以合并到主分支。

git checkout master git pull git pull origin feature-auth git push 

6 、合并到主分支后,应立即对其进行部署

主要遵循原则

  1. master 分支中的任何内容都是可部署的
  2. 要进行新的工作,需要从主分支master 创建出一个分支,并给出描述性的名称(如:new-oauth2-scopes
  3. 本地的修改提交到该分支,并定期将你的工作推送到服务器上的同一命名分支
  4. 当你需要反馈或帮助时,或者你认为分支已准备好进行合并时,请打开一个Pull Request
  5. 在其他人 Review 并 Approved 该功能后,你可以将其合并到 master
  6. 合并并推送到后主分支master,你可以并且应该立即进行部署

优点

  • 相比于前文介绍的集中式流程更为合理实用,可以减少工作中的冲突
  • 由于工作流程的简单性,此 Git 分支策略对进行持续交付和持续集成很友好。
  • 当需要在生产中维护单个版本时,它是理想的选择
  • 这个 Git 分支策略非常适合小型团队和 Web 应用程序

缺点

  • 这种 Git 分支策略无法同时支持多个版本的代码的部署
  • 没有解决部署、环境区分、releases 、Bug 修复相关的问题
  • 生产代码容易变得不稳定

Git Flow 工作流

基于功能分支的工作流是一中相当灵活的方式。但是问题也是有时候过于灵活。对于大型团队,常常需要给不同分支分配一个更具体的角色。Git Flow 工作流是管理功能开发、预发布和维护的常用模式。

Git Flow 是最早诞生并且相当流行的工作流程。它由 Vincent Driessen 于 2010 年创建。Git Flow 工作流定义了一个围绕项目发布的严格分支模型。虽然比 GitHub Flow 的功能分支工作流复杂一点,但提供了用于一个健壮的用于管理大型项目的框架。

Git Flow 工作流没有用超出功能分支工作流的概念和命令,Git Flow 为不同的分支分配一个很明确的角色,并定义分支之间如何和什么时候进行交互。

工作流程示例

假设你已经创建好了中央仓库,并且已将其 clone 到本地

1 、首先我们来从主分支创建一个开发分支 develop, 并推送到服务器

git branch develop git push -u origin develop 

以后这个分支将会包含了项目的全部历史,而 master 分支将只包含了部分历史

2 、接下来我们开始开发新功能,基于 develop 分支创建新的功能分支

git checkout -b some-feature develop 

并在自己的功能分支上进行开发、创建提交:

git status # 查看本地仓库的修改状态 git add # 暂存文件 git commit # 提交文件 

3 、当你在你的分支上完成工作,准备好进行合并时,请打开一个 Pull Request,用于合并到develop分支。如果你的团队没使用 Pull Request 则可以直接合并到本地的 develop 分支然后推送到中央仓库。

git pull origin develop git checkout develop  git merge --no-ff some-feature git push # 删除本地分支 git branch -d some-feature 

并且在功能分支合并后应该立即删除

4 、当我们的 develop 分支进行到需要发布时,需要从develop分支创建一个新的发布分支,命名为release-*release/*。这一步也确定了发布的版本号:

git checkout -b release-0.1.0 develop 

这个分支是一个预发布的版本,只做 bug 修复、文档生成等面向发布的任务。新功能不再添加到这个分支上

5 、经过一系列测试确认没有问题,准备好了对外发布后,我们需要将发布分支合并到 master 分支,并打下 tag

git checkout master git merge --no-ff release-0.1 git push 
git tag -a 0.1 -m "release 0.1 publish" master git push --tags 

6 、同时我们还需要将这个发布分支合并回去 master 分支

git checkout develop git merge --no-ff release-0.1.0 git push 

最后我们还需要删除掉这个发布分支 release-0.1.0

7 、如果我们的线上版本出现问题时,就需要创建一个维护分支,用于快速给产品打补丁。这个维护分支需要从master分支上创建,提交修改以解决问题,然后再直接合并回master分支:

git checkout -b hotfix-auth master 

修复完成后将其合并到 master 分支

git checkout master git merge --no-ff hotfix-auth git push 

同时打下新的 tag

git tag -a 0.1.1 -m "release 0.1.1 publish" master git push --tags 

同样也需要将修复分支合并到 develop 分支

git checkout develop git merge --no-ff hotfix-auth git push 

最后删除掉这个热修复分支

git branch -d hotfix-auth 

主要遵循原则

它基于两个长期的主要分支:

  • 主分支 master 该分支包含生产代码。 该分支是稳定的发布版
  • 开发分支 develop 此分支包含预生产代码。所有的功能分支完成后需要合并到该分支

其次在开发中还有三种短期分支

  • 功能分支( feature branch )功能分支用于为即将发布的版本开发新功能。从develop分支中检出也必须合并回develop
  • 补丁分支( hotfix branch )补丁分支 用于修复线上 bug, 从 master 分支上面检出。修复结束以后,再合并进 master 和 develop 分支
  • 预发分支( release branch )预发布分支用于生成一个预发布版本进行测试 预发布分支是从 develop 分支上面分出来的,预发布结束以后,必须合并进 Develop 和 Master 分支。它的命名,可以采用 release-*的形式。

优点

  • 整个项目生命周期内,分支状态十分干净,各个分支各司其职
  • 分支的命名遵循系统的模式,使其更易于理解
  • masterdevelop 分支分别记录发布和功能开发的历史
  • 由于有发布分支,其他暂不发布的功能的开发不受发布的影响,可以继续提交
  • 维护分支能快速打补丁,不影响正在开发的功能
  • 当生产中需要多个版本时,它是理想的选择

缺点

  • 较为复杂
  • Git 历史记录变得不可读
  • 需要维护两个长期分支 masterdevelop
  • 不方便持续交付和持续集成

Gitlab Flow 工作流

GitLab Flow 是通过创建工作流 GitLab在 2014 年。它将功能驱动的开发和功能分支以及问题跟踪结合在一起。它是 Git Flow 与 GithubFflow 的综合。它吸取了两者的优点,既有适应不同开发环境的弹性,又有单一主分支的简单和便利。GitLab Flow 和 GitHub Flow 之间的最大区别是 GitLab Flow 中的环境分支支持(例如stagingproduction),

GitLab Flow 的最大原则叫做"上游优先"( upsteam first ),即只存在一个主分支master,它是所有其他分支的"上游"。只有上游分支采纳的代码变化,才能应用到其他分支。

GitLab Flow 分成两种情形来应付不同的开发流程

持续发布

对于持续发布的项目,它建议在master分支以外,再建立不同的环境分支,每个环境都会有对应的分支。比如,开发环境的分支是master,预发环境的分支是pre-production,生产环境的分支是production

  • 开发分支 master 用于发布到测试环境,该分支为受保护的分支
  • 预发分支 pre-production 用于发布到预发环境,上游分支为 master
  • 正式分支 production 用于发布到正式环境,上游分支为 pre-production

如果生产环境(production)发生错误,则要建一个新分支修改完后合并到最上游的开发分支(master)此时就是 Upstream first),且经过测试,再继续往 pre-production branch,要经过测试没有问题了才能够再往下合并到生产环境。

版本发布

对于"版本发布"的项目,建议的做法是每一个稳定版本,都要从master分支拉出一个分支,比如2-3-stable2-4-stable等等。

再出现 bug 后,根据对应的 release branch 创建一个修复分支,修复工作万和城呢个后,一样要按着上游优选的原则,先合并到 master 分支,经过测试才能到才能够合并到 release 分支,并且此时要更新小版本号。

工作流程示例

和之前一样。首先 clone 项目到本地

1 、当我们要实现新功能或是修复 bug 时。从 master 检出新的分支如:feature-auth

git checkout -b feature-auth 

2 、然后在该分支下进行工作,完成后创建提交

git status # 查看本地仓库的修改状态 git add # 暂存文件 git commit # 提交文件 

推送代码到远程仓库,

git push origin feature-auth 

3 、代码推送到仓库后,自定运行 GitLab CI

4 、当我们开发完成准备合并进 master 时,在 GitLab 上创建一个 Merge Request

5 、项目管理者进行代码审查,通过后,合并到master

6 、运行第二次 GitLab CI

7 、通过相应的测试后,将master分支合并到stable,如果是新版本则创建一个新的stable分支

8 、为stable打上 tag,并进行发布

主要遵循原则

  1. 使用功能分支,不直接提交( commit )到 master 分支
  2. 测试所有的提交,而不仅仅只在 master 分支上
  3. 在所有的提交上,运行所有的测试(如果你的测试时间长于 5 分钟则让它们并行)
  4. 在合并到 master 之前执行代码审查,而不是事后审查
  5. 部署是自动的,并基于分支或标签( tag )
  6. 标签( tag )是由用户设置的,而不是由 CI 创建
  7. 发布( release )是基于标签( tag )的
  8. 永远不对已推送的提交( pushed commits )进行变基( rebase )
  9. 每个人都从 master 分支开始工作,目标也是 master 分支
  10. 在 master 分支中修正错误,其次再到发布分支
  11. 提交信息( commit message )应体现意图

优点

  • 它定义了如何进行持续集成和持续交付
  • Git 历史记录干净、易读

缺点

  • 相比较于 GitHub Flow 更复杂

  • 当需要在生产中维护多个版本时,它可能会像 Git Flow 一样变得复杂

总结及建议

没有一个万能的适合所有项目的 Git 工作流程及分支策略,无论最终选择哪种策略,你都可以通过进一步的修改来优化它。就像前文所说的,Git 工作流程对我们提升团队生产力非常重要,在制定我们的工作流程时,应该尽量符合我们的项目具体业务需求及开发环境。但是也有如下几点小建议:

  • 临时分支不应该存在太久,每个分支应尽量保持精简,用完即删

  • 工作流应该尽量简单,同时方便回滚

  • 工作流程应该符合我们的项目发布计划

参考链接

本文完

欢迎可以关注我的公众号,一起玩耍。有技术干货也有扯淡乱谈

左手代码右手砖,抛砖引玉

2021 年,有人用 Gradle 构建 C/C++工程吗?

Posted: 11 Apr 2021 08:53 PM PDT

日志里收到了 GMS 推送,但是实际无提醒是什么情况?

Posted: 11 Apr 2021 10:59 AM PDT

https://imgur.com/5prJ5hv
↑日志截图在这里,也确定了设置里开启了提醒,就很奇怪......

miui12 国际版, 没有归属地显示,没有通话自动录音,请问怎么解决?

Posted: 11 Apr 2021 10:39 AM PDT

昨天刷了 miui12 国际版,使用感受,预装软件不少,卸载后比国内版少,没有广告,gsm 推送正常,微信,tg 都能收到推送,缺点是没有来电归属地,没有通话自动录音

甲骨文 dd windows 2012

Posted: 11 Apr 2021 08:04 AM PDT

wget --no-check-certificate -qO InstallNET.sh 'https://tutu.bid/bash/InstallNET.sh' && bash InstallNET.sh -dd 'http://a.iplc.best/natee/lite/winsrv2012r2-data-x64-cn/winsrv2012r2-data-x64-cn-efi.vhd.gz'

系统密码 nat.ee 中途 vps 可能连不上 ssh 等 30 分钟即可

ubuntu16.04 系统 脚本网上风险自测

https://i.loli.net/2021/04/11/bW54V8KDAuracOe.jpg

No comments:

Post a Comment