gpt4 book ai didi

c# - 如何在不需要提供用户详细信息的情况下从特定的远程分支中提取最新信息?

转载 作者:太空狗 更新时间:2023-10-29 13:37:04 25 4
gpt4 key购买 nike

要求:

使用 libgit2sharp我想从 特定的 git 远程分支 pull (获取 + merge )最新到我的当前 checkout 的本地分支,而不必传递任何其他参数,例如用户凭据等. 基本上我正在尝试复制 git pull origin my-remote-branch

详情:

我想通过 C# 自动执行某些 Git 操作。我可以通过调用 git.exe(如果我知道路径)来简单地做我想做的事,比如 git.exe --git-dir=my-repo-directory pull origin my-remote -分支。请注意,这里我必须提供的唯一外部参数是 my-repo-directorymy-remote-branch。 Git 得到一切正确的东西,比如名称、密码、电子邮件、当前工作分支(即使它没有远程连接)并且 git pull 简单地工作。我不必手动传递任何这些参数。我假设 Git 从存储库的当前 Git 设置中获取它们(从 %HOME% 文件夹?)。

有没有办法在 LibGit2Sharp 中模拟它?

我尝试了什么:

using (var repo = new Repository("my-repo-directory"))
{
PullOptions pullOptions = new PullOptions()
{
MergeOptions = new MergeOptions()
{
FastForwardStrategy = FastForwardStrategy.Default
}
};

MergeResult mergeResult = Commands.Pull(
repo,
new Signature("my name", "my email", DateTimeOffset.Now), // I dont want to provide these
pullOptions
);
}

失败,因为它说没有跟踪分支。我不一定需要跟踪远程分支。我只想从特定的随机远程存储库中获取最新信息,并在可能的情况下执行自动 merge 。

只是为了看看它是否有效我试过了:

using (var repo = new Repository("my-repo-directory"))
{
var trackingBranch = repo.Branches["remotes/origin/my-remote-branch"];

if (trackingBranch.IsRemote) // even though I dont want to set tracking branch like this
{
var branch = repo.Head;
repo.Branches.Update(branch, b => b.TrackedBranch = trackingBranch.CanonicalName);
}

PullOptions pullOptions = new PullOptions()
{
MergeOptions = new MergeOptions()
{
FastForwardStrategy = FastForwardStrategy.Default
}
};

MergeResult mergeResult = Commands.Pull(
repo,
new Signature("my name", "my email", DateTimeOffset.Now),
pullOptions
);
}

这失败了

request failed with status code: 401

附加信息:

我不想直接调用 git.exe,因为我不能硬编码 git exe 路径。此外,由于我无法在运行时传递用户名、电子邮件等,libgit2sharp 是否有办法从存储库设置中自行获取它们,就像 git.exe 一样?

最佳答案

I assume Git gets them from current Git settings for the repo (from %HOME% folder?).

这完全取决于远程“来源”是什么:

See here对于 UsernamePasswordCredentials例子。
另见 LibGit2Sharp.Tests/TestHelpers/Constants.cs other occurrences .


关于pull操作,涉及一个Command Fetch ,其中涉及 refspec 。如在“Git pull/fetch with refspec differences ”中,您可以传递 source:destination pull 的分支名称(即使没有跟踪信息)。

这就是 LibGit2Sharp.Tests/FetchFixture.cs 中使用的内容.

string refSpec = string.Format("refs/heads/{2}:refs/remotes/{0}/{1}", remoteName, localBranchName, remoteBranchName);
Commands.Fetch(repo, remoteName, new string[] { refSpec }, new FetchOptions {
TagFetchMode = TagFetchMode.None,
OnUpdateTips = expectedFetchState.RemoteUpdateTipsHandler
}, null);

关于c# - 如何在不需要提供用户详细信息的情况下从特定的远程分支中提取最新信息?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46833568/

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