【发布时间】:2017-03-07 22:22:39
【问题描述】:
我在 c# 解决方案中使用 libgit2sharp 来切换到一个分支并引入最新的更改。这是我正在使用的代码:
public void FetchAll()
{
using (var repo = new Repository(_LocalGitPath))
{
foreach (Remote remote in repo.Network.Remotes)
{
FetchOptions options = new FetchOptions();
options.CredentialsProvider = new CredentialsHandler((url, usernameFromUrl, types) => new UsernamePasswordCredentials()
{
Username = _UserName,
Password = _Password
});
repo.Network.Fetch(remote, options);
}
}
}
public string CheckoutBranch(string branchName)
{
using (var repo = new Repository(_LocalGitPath))
{
var trackingBranch = repo.Branches[branchName];
if (trackingBranch.IsRemote)
{
branchName = branchName.Replace("origin/", string.Empty);
var branch = repo.CreateBranch(branchName, trackingBranch.Tip);
repo.Branches.Update(branch, b => b.TrackedBranch = trackingBranch.CanonicalName);
Commands.Checkout(repo, branch, new CheckoutOptions { CheckoutModifiers = CheckoutModifiers.Force });
}
else
{
Commands.Checkout(repo, trackingBranch, new CheckoutOptions { CheckoutModifiers = CheckoutModifiers.Force });
}
return branchName;
}
}
public void PullBranch(string branchName)
{
using (var repo = new Repository(_LocalGitPath))
{
PullOptions options = new PullOptions();
options.MergeOptions = new MergeOptions();
options.MergeOptions.FailOnConflict = true;
options.FetchOptions = new FetchOptions();
options.FetchOptions.CredentialsProvider = new CredentialsHandler((url, usernameFromUrl, types) => new UsernamePasswordCredentials()
{
Username = _UserName,
Password = _Password
});
repo.Network.Pull(new Signature(_UserName, _Password, new DateTimeOffset(DateTime.Now)), options);
}
}
我可以毫无问题地获取和签出一个分支。当我尝试拉最新时,我收到一条错误消息,“当前分支没有跟踪信息。”我相信这意味着本地分支不知道从哪个正确的远程存储库中提取更改,但我无法弄清楚如何告诉 libgit2sharp 远程存储库路径是什么。有人有什么建议吗?
在研究这个问题时,我发现:https://github.com/libgit2/libgit2sharp/issues/1235。本质上,libgit2sharp 开发人员描述了我看到的确切问题,但没有提供任何修复代码。
另外一点:我永远不会从这个存储库合并或推送任何更改。我将它用于自动构建,因此我们可以忽略或覆盖任何本地更改。我只需要获取最新的代码。
解决方案: 我已经用我正在工作的解决方案更新了上面的代码。您需要非常小心,以确保在签出分支时,检查要签出的分支上的 isRemote 标志是否设置为 true。如果您签出一个不是远程的分支,它会将远程设置为“。”在您的 git 配置文件中,您需要手动修复它。如果没有有效的遥控器,您将无法拉取分支更改。
不要使用 libgit2sharp wiki 上的代码示例,除非他们添加了此签入。
【问题讨论】:
标签: c# git libgit2sharp