【问题标题】:Pushing to bitbucket with libgit2sharp使用 libgit2sharp 推送到 bitbucket
【发布时间】:2014-05-01 00:58:00
【问题描述】:

我正在尝试使用 libgit2sharp 推送到我在 bitbucket 上的存储库。我正在尝试这样做:

repo.Network.Push(repo.Branches[branchName], pushOptions);

一切似乎都很好,没有抛出异常,回调中也没有错误,但是当我检查 bitbucket 时,我的提交都不存在。其他方法似乎工作正常(即我可以在 bitbucket 上创建一个新分支,然后使用 libgit2sharp 获取并查看我现在在本地拥有该分支)。这里有什么我可能会遗漏的吗?

编辑:

试图只制作一个小示例程序,看看我是否可以让这个工作不成功。我不知道我的代码是否有帮助,但这里是:

 class Program
{
    static void Main(string[] args)
    {
        PushOptions options = new PushOptions();
        Credentials creds = new Credentials();
        creds.Username = "username";
        creds.Password = "password";
        options.Credentials = creds;
        options.OnPackBuilderProgress = Program.packBuilderProgressHandler;
        options.OnPushTransferProgress = Program.pushTransferProgressHandler;
        options.OnPushStatusError = Program.pushStatusErrorHandler;
        Repository repo = new Repository("E:/Ohad/Work/libgitTest");

        repo.Network.Push(repo.Branches["origin/master"], options);

        Console.WriteLine("Press enter to close...");
        Console.ReadLine();
    }

    public static bool packBuilderProgressHandler(PackBuilderStage stage, int current, int total)
    {
    Console.Out.WriteLine("packBuilder => " + current +  " / " + total);
        return true;
   }
    public static bool pushTransferProgressHandler(int current, int total, long bytes)
    {
    Console.Out.WriteLine("pushTransfer => " + current + " / " + total +  " , " + bytes);
    return true;
    }
    public static void pushStatusErrorHandler(PushStatusError error)
    {
        Console.Out.WriteLine("error => " + error.Message);
    }
}

只需在 bitbucket 上创建一个新的 repo 并添加上面的代码(更改硬编码的内容),它应该是可重现的。我只是做了一个随机更改,添加并提交它,然后使用程序尝试推送到 bitbucket。我从上面得到的输出是:

pushTransfer => 0 / 0 , 12
pushTransfer => 0 / 0 , 32
Press enter to close...

0/0 对我来说看起来很可疑,但我不知道我做错了什么 =/。谢谢你的帮助!!

编辑 2: 我刚刚添加了这个:

 repo.Branches.Update(repo.Head, delegate(BranchUpdater updater)
        {
            updater.Remote = "origin";
            updater.UpstreamBranch= repo.Head.CanonicalName;
        })

在我推送之前,它解决了问题。不知道具体原因,但我会接受 =)。

【问题讨论】:

  • 如果没有复制代码和无法使用的存储库,恐怕很难解决您的问题。
  • nulltoken 上述任何一项有帮助吗?谢谢=)

标签: c# git libgit2sharp


【解决方案1】:

我认为您愿意推送您的本地 master 分支而不是远程跟踪分支。

repo.Network.Push(repo.Branches["master"], options);

更新:

*您尝试推送的分支“master”(“refs/heads/master”)不跟踪上游分支。 *

如果您没有“原始”遥控器,以下应该可以工作。

Remote remote = localRepo.Network.Remotes.Add("origin", url);

repo.Branches.Update(repo.Head,                              -> (A)
    b => b.Remote = remote.Name,                             -> (B)
    b => b.UpstreamBranch = repo.Head.CanonicalName);        -> (C)

上面的代码应该读作“在这个本地存储库中,HEAD (A) 指向的分支将默认配置为跟踪具有相同名称的分支(C) 在此远程 (B) 标识的远程存储库中。”

【讨论】:

  • 我最初尝试过但引发异常的方法:您尝试推送的分支“master”(“refs/heads/master”)不跟踪上游分支。
  • 这很好用。请注意,如果远程已添加到您的 git 存储库中,则不一定需要添加。
猜你喜欢
  • 2017-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-03-06
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多