用libgit2sharp推送到bitbucket

use*_*635 4 c# git libgit2sharp

我正在尝试使用libgit2sharp推送到我在bitbucket上的回购。我正在尝试这样做:

repo.Network.Push(repo.Branches[branchName], pushOptions);
Run Code Online (Sandbox Code Playgroud)

一切似乎都很好,没有异常抛出,并且回调中没有错误,但是当我检查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);
    }
}
Run Code Online (Sandbox Code Playgroud)

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

pushTransfer => 0 / 0 , 12
pushTransfer => 0 / 0 , 32
Press enter to close...
Run Code Online (Sandbox Code Playgroud)

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

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

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

推到之前,它解决了这个问题。不知道确切的原因,但我会接受它=)。

nul*_*ken 5

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

repo.Network.Push(repo.Branches["master"], options);
Run Code Online (Sandbox Code Playgroud)

更新:

* 您尝试推送的分支“ 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)
Run Code Online (Sandbox Code Playgroud)

上面的代码应读为“ 默认情况下,此本地存储库上HEAD (A)指向的分支将配置为跟踪由该远程服务器(B)标识的远程存储库中带有相同名称(C)的分支。。”