git - 什么等同于 LibGit2Sharp 上的 git checkout branch_name

标签 git libgit2sharp

我在 git 服务器中有 2 个分支,分别是 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. pull
  2. checkout develop 分支
  3. pull ,这里抛出异常。

这是代码:

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);
    }
}

最佳答案

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

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

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

repo.Checkout["origin/my_branch"];

或者,从远程跟踪分支创建一个本地分支,然后检查本地分支。

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

repo.Checkout(branch);

关于git - 什么等同于 LibGit2Sharp 上的 git checkout branch_name,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26013795/

相关文章:

git - 什么是 git 边界提交

git - 在 Gitlab 中新建一个分支

git - 使用 SHA ID 修改旧提交的评论消息

git - 有没有办法让 git 为审查板创建补丁?

git - 我怎样才能恢复 Git 提交的片段?

c# - 如何使用 LibGit2Sharp 在 Git 上获取文件内容?

c# - 限制在 LibGit2Sharp 中查询的提交数量?

c# - LibGit2Sharp 获取自 {Hash} 以来的所有提交

c# - 如何检测 libgit2sharp 中的未决更改?

c# - 如何使用 libgit2 连接到 GitHub 存储库?