0

我很难使用 libgit2sharp 将我的提交推送到远程存储库。使用 git bash 它工作正常。

远程通过 UNC 寻址,例如“//computer_name/remote.git”。所以它是本地网络中机器上的一个文件夹,它有一个可访问的文件夹。

使用 libgit2sharp 将其克隆到本地存储库工作得很好,并且构建远程也成功了

Remote remote = localrepo.Network.Remotes["origin"];

现在,当我尝试使用以下命令推送到遥控器时:

localrepo.Network.Push(remote, "HEAD", "origin");

我在 Proxy.cs 的 git_push_add_refspec() 中遇到异常

An error was raised by libgit2. Category = Invalid (Error).
Not a valid reference 'origin'

所以我尝试了:

repo.Network.Push(remote, "HEAD", @"refs/remotes/origin/master");

并在 Proxy.cs 的 git_push_finish() 中得到了异常

An error was raised by libgit2. Category = Net (Error).
Remote transport doesn't support push.

是否有正确的方法可以做到这一点,或者我的用例是否存在支持问题?提前致谢!

[更新]

现在我的命令看起来像这样

repo.Network.Push(remote, "HEAD", @"refs/remote/origin/master", pushStErrHnd, null);

PushStatusErrorHandler只有一行代码,它应该在其中写入PushErrorStatus控制台。但是控制台保持空白,然后发生上述异常。

[更新 2]

当我经历上述情况时,静态变量 Repository.Version 为 0.9.5。

4

2 回答 2

2

正如 nulltoken 已经提到的,最近才添加了本地推送。你需要确保你有一个最近的 LibGit2Sharp 版本(你需要 LibGit2Sharp 包含提交 547a6bd,于 3 月 12 日提交)

另外,API 的使用也有一点小错误。目标引用应该是远程更新的引用(例如@"refs/remote/origin/master" 应该是@"refs/heads/master")。

于 2013-03-27T16:32:34.517 回答
1

推送到本地存储库最近已添加到 libgit2(请参阅PR #1406)并最终嵌入到 LibGit2Sharp 中。但是,此功能尚未经过适当测试。

为了尝试帮助您,您能否通过以下几个问题的答案更新您的问题:

  • Push接受附加参数以提供有关问题的更多信息:onPushStatusError. 您能否提供每个潜在PushStatusError的输出?
  • 您声明“将其克隆到本地回购工作”。你是如何进行克隆的?通过 git? 通过 LibGit2Sharp?
  • 如果您将远程的 url 更改为文件 URI 格式(例如。file://computer_name/remote.git)会发生什么?

更新

令人惊叹的@yorah正在处理一个拉取请求,以增强有关您的场景的测试覆盖率。

  • 从本地存储库克隆
  • 添加一个新的提交
  • 推送新创建的提交
  • 检索远程引用列表
于 2013-03-27T11:27:04.303 回答