我想使用 LibGit2Sharp 将给定分支克隆到本地存储库。
var repoPath = LibGit2Sharp.Repository.Clone("https://something", localpath, cloneOptions);
using (var repo = new LibGit2Sharp.Repository(repoPath))
{
var branches = repo.Branches.GetEnumerator();
}
Run Code Online (Sandbox Code Playgroud)
使用 repo.Branches.GetEnumerator() 我可以看到每个远程分支,但是使用 Clone 命令我只能从 GitHub 克隆 master 分支?我如何克隆“testBranch”或其他东西?
实际上,默认情况下,Clone()它负责在本地检索所有分支的所有提交。默认情况下,只有远程 HEAD 分支(通常origin/master)会获取自动创建的本地分支副本,然后将其检出。
因此,一旦执行克隆,您所要做的就是从您想要执行此操作的远程分支创建一个本地分支,并检查这个新创建的分支。
例如,假设您对分支感兴趣my-feature-branch并且您的远程名称为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);
Run Code Online (Sandbox Code Playgroud)
FWIW,有一个待处理的拉取请求,允许用户明确指定希望查看签出的分支。
编辑
我根据您的建议更新了我的代码,但它仍然无法正常工作。我的本地存储库的内容与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);
Run Code Online (Sandbox Code Playgroud)
实际上,默认情况下,Clone()它负责在本地检索所有分支的所有提交。默认情况下,只有远程 HEAD 分支(通常origin/master)会获取自动创建的本地分支副本,然后将其检出。
因此,一旦执行克隆,您所要做的就是从您想要执行此操作的远程分支创建一个本地分支,并检查这个新创建的分支。
例如,假设您对分支感兴趣my-feature-branch并且您的远程名称为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);
Run Code Online (Sandbox Code Playgroud)
FWIW,有一个待处理的拉取请求,允许用户明确指定希望查看签出的分支。
Pull 请求已被合并。现在可以通过以下方式更轻松地在 Clone() 调用成功后检查已知分支:
string clonedRepoPath = Repository.Clone(
url, targetPath,
new CloneOptions { BranchName = branchName });
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4529 次 |
| 最近记录: |