gpt4 book ai didi

git - 使用 LibGit2Sharp 克隆一个给定的分支

转载 作者:太空狗 更新时间:2023-10-29 14:06:34 25 4
gpt4 key购买 nike

我想使用 LibGit2Sharp 将给定分支克隆到本地存储库。

 var repoPath = LibGit2Sharp.Repository.Clone("https://something", localpath, cloneOptions);

using (var repo = new LibGit2Sharp.Repository(repoPath))
{
var branches = repo.Branches.GetEnumerator();
}

使用 repo.Branches.GetEnumerator() 我可以看到每个远程分支,但是使用 Clone 命令我只能从 GitHub 克隆 master 分支?我怎样才能克隆“testBranch”之类的东西?

实际上,默认情况下,Clone() 负责在本地检索所有分支的所有提交。默认情况下,只有远程 HEAD 分支(通常是 origin/master)获取自动创建的本地分支副本,然后将其 check out 。

因此,一旦执行了克隆,您所要做的就是从您想要使用的远程分支创建一个本地分支,并检查这个新创建的分支。

例如,假设您对分支 my-feature-branch 感兴趣并且您的 Remote 名为 origin:

Branch remoteBranch = repo.Branches["origin/my-feature-branch"];

Branch newLocalBranch = repo.CreateBranch("my-feature-branch");

// Make the local branch track the upstream one
repo.Branches.Update(newLocalBranch ,
b => b.TrackedBranch = remoteBranch.CanonicalName);

Branch trackingBranch = repo.Branches["my-feature-branch"];

repo.Checkout(trackingBranch);

FWIW,有一个未决的 Pull Request 允许用户明确指定希望 checkout 的分支。

编辑

我根据您的建议更新了我的代码,但它仍然无法正常工作。我的本地存储库的内容与 trackingBranch 不相等,它仍然代表 master 分支的内容。

var remoteBranch = repo.Branches["origin/" + branchName];

var newLocalBranch = repo.Branches.Add(branchName, commit, true);

repo.Branches.Update(newLocalBranch,
b => b.TrackedBranch = remoteBranch.CanonicalName);

var trackingBranch = repo.Branches[branchName];

repo.Checkout(trackingBranch, new LibGit2Sharp.CheckoutOptions(), author);

最佳答案

实际上,默认情况下,Clone() 负责在本地检索所有分支的所有提交。默认情况下,只有远程 HEAD 分支(通常是 origin/master)获取自动创建的本地分支副本,然后将其 check out 。

因此,一旦执行了克隆,您所要做的就是从您想要使用的远程分支创建一个本地分支,并检查这个新创建的分支。

例如,假设您对分支 my-feature-branch 感兴趣并且您的 Remote 名为 origin:

Branch remoteBranch = repo.Branches["origin/my-feature-branch"];

Branch newLocalBranch = repo.CreateBranch("my-feature-branch", remoteBranch.Tip);

// Make the local branch track the upstream one
repo.Branches.Update(newLocalBranch ,
b => b.TrackedBranch = remoteBranch.CanonicalName);

Branch trackingBranch = repo.Branches["my-feature-branch"];

repo.Checkout(trackingBranch);

FWIW,有一个未决的 Pull Request 允许用户明确指定希望 checkout 的分支。

更新

merge 请求已 merge 。在 Clone() 调用成功后检查已知分支现在可以更容易地通过以下方式完成:

string clonedRepoPath = Repository.Clone(
url, targetPath,
new CloneOptions { BranchName = branchName });

关于git - 使用 LibGit2Sharp 克隆一个给定的分支,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27316652/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com