我想使用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);
值得一提的是,目前有一个未决的拉取请求,允许用户明确指定要检出的分支。
编辑
我根据您的建议更新了代码,但仍然不能很好地工作。我的本地存储库的内容与跟踪分支不相等,仍代表主分支的内容。
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);
repo.Branches.Add(branchName, commit, true);
->commit
是从哪里来的?我建议使用IRepository.CreateBranch()
扩展方法或repo.Branches.Add(branchName, remoteBranch.Tip);
。 - nulltoken