什么相当于LibGit2Sharp上的git checkout branch_name

时间:2014-09-24 09:50:46

标签: git libgit2sharp

我在git服务器上有两个分支,它们是master和develop。我使用下面的代码将存储库克隆到我的机器上。

var options =
    new CloneOptions()
    {
        CredentialsProvider = this.credentialsHandler,
    };

return
    Repository.Clone(
        gitHttpUrl,
        localPath,
        options);

默认分支是master。我想用以下代码切换到develop分支。

using (var repo = new Repository(localPath))
{
    var branch = repo.Branches[branchName];

    repo.Checkout(branch);
}

但是分支为空。

如何使用LibGit2Sharp切换分支?

更新
默认分支是master,以下是重现问题的步骤。

  1. 结帐develop分支
  2. 拉,它在这里抛出异常。
  3. 这是代码:

    private void Checkout(string localPath, string branchName)
    {
        using (var repo = new Repository(localPath))
        {
            var branch = repo.Branches[branchName];
    
            if (branch == null)
            {
                branch = repo.CreateBranch(branchName, "origin/" + branchName);
            }
    
            repo.Checkout(branch);
        }
    }
    
    private MergeResult Pull(string path)
    {
        const string NAME = "test-user";
        const string EMAIL = "test-email@gmail.com";
    
        using (var repo = new Repository(path))
        {
            var merger =
                new Signature(
                    NAME,
                    EMAIL,
                    DateTimeOffset.UtcNow);
    
            var options =
                new PullOptions
                {
                    FetchOptions = new FetchOptions()
                    {
                        CredentialsProvider = this.credentialsHandler
                    }
                };
    
            return repo.Network.Pull(merger, options);
        }
    }
    

1 个答案:

答案 0 :(得分:4)

与Git类似,在克隆时,LibGit2sharp只会为远程HEAD创建一个本地分支

所有其他分支也将被提取并可作为远程跟踪分支访问,但不会自动为它们创建本地分支。

因此,为了实现您的目标,您可以签出远程跟踪分支(例如origin/master)。请注意,在这种情况下,HEAD将自动设置为分离模式。

repo.Checkout["origin/my_branch"];

或者,从远程跟踪创建本地分支,然后签出本地分支。

var branch = repo.CreateBranch("my_branch", "origin/my_branch");

repo.Checkout(branch);