小编Jor*_*ett的帖子

GitHub Actions - 从上次提交中复制 git `user.name` 和 `user.email`

我有一个 GitHub Action,它可以在任何推送到我的存储库时运行。基本上,它编译存储库文件,提交编译的文件,压缩提交到前一个文件,然后强制推送到存储库。

从本质上讲,这个想法是它无缝地创建一个构建并将其添加到存储库中,使其看起来像是原始推送的一部分。

我遇到的唯一问题是git config. 我希望能够复制上次提交的user.name和,这样当我的操作执行提交时,看起来就像是由推送的用户完成的。user.email我知道我可以使用GITHUB_ACTOR环境变量来获取用户名,但似乎没有提供电子邮件的环境变量。GitHub 发现它们并不相同:

在此输入图像描述

那么,如何设置git config使用上次提交的user.name和呢?user.email


.yaml为了完整起见,以下是该操作的文件:

on: [push]
jobs:
  build:
    runs-on: ubuntu-latest
    steps:
      - name: Set up Git repository
        uses: actions/checkout@v2
        with:
          fetch-depth: 2
      - (... step that creates build files ...)
      - name: Upload build files to repo
        run: |
          # Configure git
          git config user.name "$GITHUB_ACTOR"
          git config user.email "<>"
          # Roll back git history to before last commit …
Run Code Online (Sandbox Code Playgroud)

git github github-actions

7
推荐指数
2
解决办法
9995
查看次数

用 fork 替换 Go 依赖:“...用于两个不同的模块路径”

我有一个非常大的 Go 项目,依赖于github.com/golang/mock. 不幸的是,这个包不再维护,开发人员已指示人们使用位于 的 fork go.uber.org/mock。所以我想用 替换github.com/golang/mock依赖项go.uber.org/mock

据我了解,这正是 go.modreplace指令的用途(允许您替换依赖项,而不必更改每个文件中的导入路径)。因此,用 fork 替换此模块应该很简单,只需将以下行添加到 my go.mod

replace github.com/golang/mock => go.uber.org/mock v0.2.0
Run Code Online (Sandbox Code Playgroud)

不幸的是,当尝试运行任何go命令时,这会导致错误:

$ go mod tidy
...
go: go.uber.org/mock@v0.2.0 used for two different module paths (github.com/golang/mock and go.uber.org/mock)
Run Code Online (Sandbox Code Playgroud)

我在这里做错了什么?

如有必要,您可以在此处查看存储库/提交。

go dependency-management git-fork go-modules

3
推荐指数
1
解决办法
817
查看次数

`sort.Slice` 顺序是不确定的

我正在尝试使用sort.SliceGo 标准库对字符串切片进行排序。我希望它们按字母顺序排序,我希望空字符串出现在所有其他字符串之后(因此我不能只使用sort.Strings)。

对于 less 函数,我认为这会起作用:

func(i, j int) bool {
    return s[j] == "" || s[i] < s[j]
}
Run Code Online (Sandbox Code Playgroud)

但是,我似乎会根据输入顺序得到随机答案。这是一个 MWE:

package main

import (
    "fmt"
    "math/rand"
    "sort"
    "time"
)

func main() {
    s := []string{"", "foo", "bar", "baz"}

    rand.Seed(time.Now().Unix())
    rand.Shuffle(len(s), func(i, j int) {
        s[i], s[j] = s[j], s[i]
    })
    fmt.Printf("%q\n", s)

    sort.Slice(s, func(i, j int) bool {
        return s[j] == "" || s[i] < s[j]
    })
    fmt.Printf("%q\n", s)
}
Run Code Online (Sandbox Code Playgroud)

这是运行几次的输出:

$ go …
Run Code Online (Sandbox Code Playgroud)

sorting string go slice

0
推荐指数
1
解决办法
305
查看次数