小编Cos*_*age的帖子

Git:拉一个重新分支

让我来描述我的情况:

Blond先生和Orange先生正在研究分支A,它在提交M1的主分支上分支出来.分支A有2个提交:A1和A2.

M1  
   \
    \
     A1 - A2
Run Code Online (Sandbox Code Playgroud)

与此同时,奥兰治先生承诺并在主分公司M2和M3上多推了两笔.

M1  - M2 - M3
   \
    \
     A1 - A2
Run Code Online (Sandbox Code Playgroud)

布朗先生从遥控器拉出来,过了一会儿决定重新进入主分支:

M1  - M2 - M3
   \         \
    \         \
     A1 - A2   A1` - A2`
Run Code Online (Sandbox Code Playgroud)

现在A1`和A2`是在先生金发的本地存在的衍合的提交,以及A1和A2远程存在.金发先生推动他的提交,使用-f强制他的改变并"重写"历史.现在远程存储库看起来像这样:

M1  - M2 - M3
             \
              \
               A1` - A2`
Run Code Online (Sandbox Code Playgroud)

但奥兰治先生也在A分公司工作.他的本地存储库仍然如下所示:

M1  - M2 - M3
   \
    \
     A1 - A2
Run Code Online (Sandbox Code Playgroud)

Orange先生需要做什么才能与远程存储库中的A分支同步?

正常拉动不起作用.请拉-f强制远程本地的更改?我知道删除本地版本的A并从远程存储库再次提供它将会起到作用,但这似乎并不是实现这一目标的好方法.

git push pull rebase

45
推荐指数
4
解决办法
2万
查看次数

Rust 中的 Rc::clone(&rc) 和 rc.clone() 有什么区别吗?是否有基于此的编译优化?

我注意到 Rust 书建议使用Rc::clone(&rc)如下rc.clone()

use std::rc::Rc;

let five = Rc::new(5);

// recommended
let _ = Rc::clone(&five);

// not recommended
let _ = five.clone();

Run Code Online (Sandbox Code Playgroud)

为什么?

rust

18
推荐指数
1
解决办法
4567
查看次数

使用DaemonSet运行glusterfs集群

我一直在尝试使用以下方法在我的kubernetes集群上运行glusterfs集群:

glusterfs-service.json

{
  "kind": "Service",
  "apiVersion": "v1",
  "metadata": {
    "name": "glusterfs-cluster"
  },
  "spec": {
    "type": "NodePort",
    "selector": {
      "name": "gluster"
    },
    "ports": [
      {
        "port": 1
      }
    ]
  }
}
Run Code Online (Sandbox Code Playgroud)

并且glusterfs-server.json:

{
  "apiVersion": "extensions/v1beta1",
  "kind": "DaemonSet",
  "metadata": {
    "labels": {
      "name": "gluster"
    },
    "name": "gluster"
  },
  "spec": {
    "selector": {
      "matchLabels": {
        "name": "gluster"
      }
    },
    "template": {
      "metadata": {
        "labels": {
          "name": "gluster"
        }
      },
      "spec": {
        "containers": [
          {
            "name": "gluster",
            "image": "gluster/gluster-centos",
            "livenessProbe": {
              "exec": …
Run Code Online (Sandbox Code Playgroud)

glusterfs kubernetes

9
推荐指数
1
解决办法
834
查看次数

Ansible - 自动化远程或本地?

如果运行像Ansible这样的自动化工具来在云中构建基础架构堆栈(例如AWS),那么将自动化工具和构建堆栈放在云中的不同区域/ VPC中就足够了,或者让自动化变得更有意义本地工具和脚本(自己的数据中心/机器)?

两者似乎都被使用,但我只是想知道是否有最佳实践标准.

automation infrastructure amazon-web-services ansible devops

7
推荐指数
1
解决办法
215
查看次数

使用 gRPC-web 安全地公开带有身份验证的 gRPC 服务

我们正在使用 Improbable 的gRPC-Web 库向在浏览器中运行的 Javascript 客户端公开 gRPC 服务(在 Go 中实现)。该服务将与现有的前端 Go 服务并存,该服务托管基于 REST 的 API。现有服务使用基于会话的身份验证对其用户进行身份验证(会话 cookie + 使用双重提交 cookie 的XSRF 保护,这也使用一些每个会话的服务器端状态进行验证)。

前端 Go 服务托管各种 API 端点,这些端点要么在本地处理,要么通过将请求代理到其他服务来实现。所有端点都通过 Gin 中间件处理程序链公开,它实现了上述会话身份验证和 XSRF 保护检查。有人建议我们在这个现有的中间件后面托管 gRPC-Web 的gogrpcproxy 组件,以向全世界公开我们的 gRPC 服务。

我有兴趣确保对传入 gRPC-Web 请求进行身份验证的方法是安全的。已提出以下方法:

  • 基于令牌的身份验证——即在 gRPC 请求元数据中传递承载令牌,这些令牌由后端 gRPC 服务验证。这与在不涉及 gRPC-Web 的情况下对原生 gRPC 调用进行身份验证的身份验证模型相匹配。

    在这个模型中,gRPC-Web 的职责是实现浏览器和服务器之间的传输抽象,并将请求编组到/来自本机 gRPC 表示;身份验证委托给支持的 gRPC 服务。gRPC-Web 代理作为现有 REST API 外部的单独端点托管。

  • 基于会话的身份验证——重用现有的会话身份验证中间件。在此模型中,grpcweb 代理服务器托管在 Gin 处理程序链之后。在接受请求之前,Gin 执行其通常的检查以验证相关 cookie 和 XSRF 标头是否存在。

    这种方法重用了大部分现有的身份验证逻辑。但是,它需要传递 XSRF 标头以确保请求被 Gin 中间件承认。这在当前实现中可以通过设置请求元数据来实现,这是(当前)通过在出站 HTTP …

authentication go grpc grpc-web

7
推荐指数
0
解决办法
3066
查看次数

如何使用GCP负载平衡器将HTTP重定向到HTTPS

我正在GCP中使用2个节点(Apache httpd)和域lblb.tonegroup.net设置负载均衡器。

目前,我的负载均衡器工作正常,流量正在2个节点之间切换,但是如何配置将http://lblb.tonegroup.net重定向到https://lblb.tonegroup.net

是否可以在负载均衡器级别配置它,或者我需要在apache级别配置它?我已安装Google托管SSL证书供参考。

linux apache load-balancing google-cloud-platform

6
推荐指数
2
解决办法
3886
查看次数

Golang无法从恐慌mgo.DialWithInfo中恢复

我尝试使用mgo.DialWithInfo函数(在失败的情况下)测试连接到MongoDB的连接.mgo.DialWithInfo不会返回错误,而是会发生恐慌.

我试图添加恢复逻辑以从恐慌中恢复但没有成功.

我的问题是:

  1. 为什么不mgo.DialWithInfo回复error恐慌?
  2. 为什么我的恢复不起作用?

码:

功能

func Connect(mongoDBDialInfo *mgo.DialInfo) error {
    log.Infof("connect to MongoDB with %v", mongoDBDialInfo)
    defer func() {
        if r := recover(); r != nil {
            fmt.Println("Recovered in f", r)
        }
    }()

    mongoSession, err := mgo.DialWithInfo(mongoDBDialInfo)
    if err != nil {
        log.Errorf("error, cannot connect to MongoDB, %v", err)
        msg := fmt.Sprintf("fail, cannot connect to MongoDB, %v", mongoDBDialInfo)
        sf := "main.main"
        errM := err.Error()
        util.LogError(msg, sf, errM)
        return err
    } …
Run Code Online (Sandbox Code Playgroud)

go mgo

-2
推荐指数
1
解决办法
248
查看次数