如何推送到本地遥控器?

时间:2013-03-27 10:01:26

标签: push libgit2sharp

我很难用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.

是否有正确的方法来执行此操作,或者我的用例是否存在支持问题? 提前谢谢!

[UPDATE]

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

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

PushStatusErrorHandler只有一行代码,应该将PushErrorStatus写入控制台。但控制台仍为空白,然后发生上述异常。

[更新2]

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

2 个答案:

答案 0 :(得分:2)

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

此外,API使用中存在轻微错误。目标引用应该是远程更新的引用(例如@“refs / remote / origin / master”应该是@“refs / heads / master”)。

答案 1 :(得分:1)

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

为了尝试和帮助您,请您使用以下几个问题的答案更新您的问题:

  • Push接受其他参数以提供有关问题的更多信息:onPushStatusError。您能否提供每个潜在PushStatusError的输出?
  • 您声明"将其克隆到当地的仓库" 。你是如何进行克隆的?通过git?通过LibGit2Sharp?
  • 如果您将遥控器的网址更改为文件URI格式(例如file://computer_name/remote.git)会怎样?

更新

令人惊讶的 @yorah 正在使用 Pull Request 来增强有关您的方案的测试覆盖率。

  • 从本地存储库克隆
  • 添加新提交
  • 推送新创建的提交
  • 检索远程参考列表