我想使用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克隆主分支?我怎样才能克隆" 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);
FWIW,还有一个待处理的 Pull Request ,允许用户明确指定想要查看的分支。
修改
我根据您的建议更新了我的代码,但仍然无法正常运行。我的本地存储库的内容与trackingBranch不相同,它仍然代表主分支的内容。
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);
答案 0 :(得分:3)
实际上,默认情况下,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);
FWIW,还有一个待处理的 Pull Request ,允许用户明确指定想要查看的分支。
Pull请求已合并。克隆()调用成功后检出已知分支现在可以通过以下方式更轻松地完成:
string clonedRepoPath = Repository.Clone(
url, targetPath,
new CloneOptions { BranchName = branchName });