Switch / Checkout Branch无法正常工作

时间:2015-01-07 18:53:14

标签: libgit2 libgit2sharp

我正在使用版本0.19 我有一个名为'dev'的远程分支

克隆后我想切换到这个分支。 我找到了一些代码来执行分支更新。但对我来说它不起作用。 我也尝试在此之后运行结帐,但也无效。

在代码之后查看git日志时,我会看到主分支的变更集。但是本地分支名称是已创建分支的名称(例如“dev”)

我做错了什么?

private static Branch SwitchBranch(Repository repo, RepositoryProperties properties)
    {
        string branchname = properties.Branch;
        Branch result = null;
        if (!string.IsNullOrWhiteSpace(properties.Branch))
        {
            Branch remote = null;
            foreach (var branch in repo.Branches)
            {
                if (string.Equals(branch.Name, "origin/" + branchname))
                {
                    remote = branch;
                    break;
                }
            }

            string localBranchName = properties.Branch;
            Branch localbranch = repo.CreateBranch(localBranchName);

            Branch updatedBranch = repo.Branches.Update(localbranch,
                b =>
                {
                    b.TrackedBranch = remote.CanonicalName;
                });

            repo.Checkout(updatedBranch);

            result = updatedBranch;
        }

        return result;
    }

2 个答案:

答案 0 :(得分:4)

您正在使用的CreateBranch()重载的xml文档状态“创建具有指定名称的分支。此分支将指向Repository.Head指向的提交”

从您的问题来看,您似乎希望此分支也指向与远程跟踪相同的提交。

因此,我建议您按如下方式更改代码:

Branch localbranch = repo.CreateBranch(localBranchName, remote.Tip);

答案 1 :(得分:0)

请注意,您只能创建一次本地分支。因此,您第二次会收到错误。至少,我做到了。

 Branch localbranch = repo.Branches.FirstOrDefault(x => !x.IsRemote && x.FriendlyName.Equals(localBranchName));

            if (localbranch == null)
            {
                localbranch = repo.CreateBranch(localBranchName, remote.Tip);
            }

            Branch updatedBranch = repo.Branches.Update(localbranch,
                    b =>
                    {
                        b.TrackedBranch = remote.CanonicalName;
                    });

            repo.Checkout(updatedBranch);