问题标签 [go-git]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
2 回答
513 浏览

git - 如何创建拉取请求或合并 PR

我可以将 fetch push 克隆到 repo。同样是否可以使用 Go 创建拉取请求或合并 PR?

0 投票
1 回答
164 浏览

git - go-git 相当于“git push --all"

无法找到一种方法将所有分支推送到远程使用go-git而不迭代所有分支。我查看了PushOptions定义,但没有看到与git push --all <remote>. 有没有人做到这一点?

0 投票
1 回答
683 浏览

go - 使用 go-git 获取文件的平面列表

我正在开发一个列出 .git 存储库中所有文件的应用程序。我有一种将树变成平面列表的工作方式,但速度慢(300 毫秒)

这是 Tree 对象的源代码https://github.com/go-git/go-git/blob/master/plumbing/object/tree.go

我的工作解决方案:

但是,如前所述,这需要大约 300 毫秒才能运行。做时git ls-files需要< 50ms。作为一个从 Go 开始的人,我是否遗漏了一些明显的东西?

0 投票
1 回答
1492 浏览

go - 如何使用 go-git 签出新的本地分支?

当我尝试使用工作树结帐时;它不起作用并且代码返回错误

输出:

我使用时遇到同样的错误

0 投票
4 回答
13000 浏览

docker - docker multi-stage build Go image - x509:由未知权威签署的证书

我尝试使用私有公司网络中构建图像:

并得到x509: certificate signed by unknown authority错误

我试图在

X509:由未知机构签署的证书(在 Docker 容器中运行 Go 应用程序)

docker build:无法获取 github 公共存储库,x509:证书由未知机构签名

未知权威签署的 x509 证书 - go-pingdom

,但结果是一样的。


❗️如果加-insecureflag

Dockerfile unrecognized import path错误包装先前的x509错误和无法访问的 包更改为golang.org/x/crypto

有什么问题❓</p>

(我知道问题出在git获取依赖项时的证书和身份验证中,但我尝试使构建图像的过程更常见)

0 投票
1 回答
845 浏览

go - git credential.helper 而不是 .netrc 来获取依赖项

为了兑现依赖项,我使用连接到专用网络之外的服务器(因为无法直接从 获取依赖项)的(作为goproxynexusGitHub


nexus.some.repo.com:4443/repository/go-nexus-proxy ➡️gonexus.dev nexus.some.repo.com:4443/repository/go-proxy ➡️proxy.golang.org ...


在此处输入图像描述

我使用.netrc文件连接到

我可以用git credential.helper代替.netrc❓</p>

如果我该 如何配置git credential.helper❓</p>

0 投票
0 回答
212 浏览

merge - 如何使用 go-git 进行合并?

既然merge并且rebase目前还没有实现,那么使用go-git将来自另一个分支的更改合并到您的活动分支中的推荐方法是什么?

例如,假设我们的主分支有两个提交(m1 和 m2)。

当时我们在master分支的基础上创建了一个feature分支,它的最后一次commit是m2。

我们实现了一个新特性 f1,它此时应该只存在于特性分支中。

与此同时,我们的 master 分支也在不断发展。另一位开发人员将提交 m3 推送到 master 分支。

在那之后,我们继续在我们的功能分支上工作,并在提交 f2 中提交了这些更改。

我们如何将我们的功能分支更改(f1,f2)组合回我们的主分支(m3)?

(您将执行哪些命令来执行合并操作?)

0 投票
1 回答
149 浏览

git - go-git 如何为第一次提交生成补丁?

我有以下代码

它遍历所有提交并使用对父级的引用为每个提交生成补丁。但是第一次提交没有父级,然后我无法生成补丁。有没有像传递空提交这样的解决方法?

我正在搜索,我在归档go-git存储库上找到了 open pull request 。

0 投票
0 回答
21 浏览

go-git - 如何在 go-git 中创建空树

在 git 中有一个带有 sha1 的空树:

如何制作空树go-git?我需要一个用于为存储库中的第一次提交生成差异

0 投票
2 回答
904 浏览

git - go-git:创建本地分支的正确方法,模拟“git分支”的行为“?

正如标题所暗示的,我试图弄清楚如何使用go-git与 Git CLI 命令相同的结果来创建本地分支git branch <branchname>

据我所知,git branch <branchname>(没有明确的<start-point>论点)做了两件事:

  1. 创建.git/refs/heads/<branchname>指向当前HEAD提交
  2. .git/logs/refs/heads/<branchname>用单行记录分支的创建。

它可能会做得更多,但我知道这两件事是肯定的。(如果您知道它的更多功能,请分享!)

接下来的大部分内容都记录了我在研究我的选择时的发现之旅,我想我现在可能已经掌握了上面的#1。不过,对于#2,我开始认为我可能是 SOL,至少使用go-git.

第一个想法:Repository.CreateBranch

我最初的幼稚想法是打电话Repository.CreateBranch,并且有一个类似的 SO 问题的答案(“如何使用 go-git 结帐一个新的本地分支?”),这似乎可以证明这个想法。但是一旦我开始研究细节,事情就变得非常混乱。

首先,Repository.CreateBranch将 aconfig.Config作为输入(为什么?),并且似乎还修改了存储库的.git/config文件(再次,为什么?)。我已经验证该git branch <branchname>命令不会触及 repo 的配置,当我调用该命令时,我当然不需要提及任何有关配置的内容。

其次,我在上面链接的 SO 答案引用了go-git'srepository_test.go中的代码,该代码执行以下操作:

但是 的定义config.Branch是:

并且"refs/heads/foo" 不是 refspec(因为 refspec:将其srcdst组件分开)。

经过大量的头疼和代码阅读后,我得出了一个(非常)初步的结论,即评论中的“refspec”这个词一定是错误的,而应该只是“ref”。但我对此完全不确定:如果我是对的,那么为什么这个字段被命名Merge而不是 just Ref

另一个初步结论是,这Repository.CreateBranch并不是真正用于创建纯粹的本地分支,而是用于创建与远程分支有某种关系的本地分支——例如,如果我从遥控器。

实际上,在重新阅读Repository.CreateBranch方法时,我根本不相信它确实创建了一个分支(也就是说,它创建了一个分支.git/refs/heads/<branchname>)。除非我遗漏了某些东西(完全有可能),否则它似乎所做的[branch "<name>"] 只是.git/config. 但如果这是真的,为什么它是一种方法Repository呢?为什么它不是一种方法config.Config

同样,还有一个相关的功能:

那只会从配置中返回分支信息。然而,文档中的下一个功能Repository是:

它确实返回了一个遍历.git/refs/heads/.

这非常令人困惑,并且文档(例如)无济于事。无论如何,除非有人能说服我,否则我很确定这对实际创建一个分支CreateBranch没有太大帮助。

工作树结帐???

一些额外的网络搜索从旧d-src/go-git回购中发现了这两个问题:

这两篇文章都提出了创建本地分支的基本方法:

除了这个检查新分支的事实之外git branch <branchname>,它也没有创建.git/logs/refs/heads/<branchname>.

此外——作为一个潜在的非常令人讨厌的意外——它会清除工作树中所有未跟踪的文件。默认情况下,git checkout 保留对工作树中文件的本地修改,但go-git您需要明确指定Keep: true,即使您已指定Force: false.

绝对违反了“最小惊讶原则”。值得庆幸的是,在我测试过的本地仓库中,它们都是旧的编辑器备份文件或我早就放弃的旧项目的片段。

存储器.ReferenceStorer

碰巧的是,其中一位go-git作者/维护者回应了第二个问题,并建议:

为了创建和删除独立于工作树的引用,您应该使用storer.ReferenceStorer.

请看一下分支示例:https ://github.com/src-d/go-git/blob/master/_examples/branch/main.go

这很好,很简单,但它只解决了分支 ref 的创建。

我能够在go-git源代码中找到的所有“日志”一词似乎都指的是提交日志,而不是参考日志。鉴于 reflog 条目看起来不像.git树中的其他工件,我想创建/更新它们需要一种不同类型的存储器 - 并且现有存储器看起来都不像(对我而言)他们做那。

所以...

关于我应该如何获得适当的 reflog 以配合 ref 的任何建议?

(或者,也许我严重误解了,除了我上面列出的那些之外,还有一些方法可以在 中创建分支go-git,这可以满足我的需求。)