我正在尝试使用libgit2sharp推送到bitbucket上的repo。我正在尝试这样做:
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;
})
到之前我推动并修复了问题。不确定为什么,但我会把它=)。
答案 0 :(得分:4)
我认为您愿意推送本地 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)标识的远程存储库中。