LibGitSharp:签出远程分支

LibGitSharp:签出远程分支,git,c#-4.0,libgit2sharp,Git,C# 4.0,Libgit2sharp,我尝试通过LibGitSharp签出Remotebranch。在git中,您可以使用以下命令: git fetch origin git checkout -b test origin/test 在较新版本中,它只是: git fetch git checkout test 所以我尝试了以下代码: repo.Fetch("origin"); repo.Checkout("origin/" + Name); 获取和签出运行时没有任何问题,但没有Remotebranch的副本 有没有人想到用其

我尝试通过LibGitSharp签出Remotebranch。在git中,您可以使用以下命令:

git fetch origin
git checkout -b test origin/test
在较新版本中,它只是:

git fetch
git checkout test
所以我尝试了以下代码:

repo.Fetch("origin");
repo.Checkout("origin/" + Name);

获取和签出运行时没有任何问题,但没有Remotebranch的副本

有没有人想到用其他方法检查遥控器

我的备选方案是在存储库中创建分支并将其推送到远程:

Branch newBranch = repo.Branches.Add(Name, repo.Branches["master"].Commits.First());
repo.Network.Push(newBranch);
但我有一个例外:

您尝试推送的分支“Test1”(“refs/heads/Test1”)不跟踪上游分支

也许我可以将分支设置为上游分支,但我不知道如何设置


编辑:我没有正确地解释它,所以我试图更好地描述在我的程序中获取和签出的功能。Fetch命令执行正确。现在,如果我使用checkout命令,它应该是创建Remotebranch的本地分支,但是它没有。我还尝试了repo.Checkout(name),但没有“origin/”,但它引发了一个异常:
存储库中不存在由“…”标识的有效git对象。

如果我正确理解您的问题,您愿意创建一个本地分支,该分支将被配置为跟踪获取的远程跟踪分支

换句话说,获取存储库后,您的引用包含远程跟踪分支(例如,
origin/theBranch
),您希望创建具有相同名称的本地分支(例如,
theBranch

以下示例应演示如何执行此操作

const string localBranchName = "theBranch";

// The local branch doesn't exist yet
Assert.Null(repo.Branches[localBranchName]);

// Let's get a reference on the remote tracking branch...
const string trackedBranchName = "origin/theBranch";
Branch trackedBranch = repo.Branches[trackedBranchName];

// ...and create a local branch pointing at the same Commit
Branch branch = repo.CreateBranch(localBranchName, trackedBranch.Tip);

// The local branch is not configured to track anything
Assert.False(branch.IsTracking);

// So, let's configure the local branch to track the remote one.
Branch updatedBranch = repo.Branches.Update(branch,
    b => b.TrackedBranch = trackedBranch.CanonicalName);

// Bam! It's done.
Assert.True(updatedBranch.IsTracking);
Assert.Equal(trackedBranchName, updatedBranch.TrackedBranch.Name);

注意:更多示例可在测试套件中找到。

如果我正确理解您的问题,您愿意创建一个本地分支,该分支将被配置为跟踪获取的远程跟踪分支

换句话说,获取存储库后,您的引用包含远程跟踪分支(例如,
origin/theBranch
),您希望创建具有相同名称的本地分支(例如,
theBranch

以下示例应演示如何执行此操作

const string localBranchName = "theBranch";

// The local branch doesn't exist yet
Assert.Null(repo.Branches[localBranchName]);

// Let's get a reference on the remote tracking branch...
const string trackedBranchName = "origin/theBranch";
Branch trackedBranch = repo.Branches[trackedBranchName];

// ...and create a local branch pointing at the same Commit
Branch branch = repo.CreateBranch(localBranchName, trackedBranch.Tip);

// The local branch is not configured to track anything
Assert.False(branch.IsTracking);

// So, let's configure the local branch to track the remote one.
Branch updatedBranch = repo.Branches.Update(branch,
    b => b.TrackedBranch = trackedBranch.CanonicalName);

// Bam! It's done.
Assert.True(updatedBranch.IsTracking);
Assert.Equal(trackedBranchName, updatedBranch.TrackedBranch.Name);

注意:更多示例可在测试套件中找到。

“没有Remotebranch的副本。”->请更新问题以进一步解释“Remotebranch的副本”对您的期望。“提取和签出运行没有任何问题”->因此,workdir使用远程跟踪分支指向的提交内容进行了正确更新?“没有远程分支的副本。”->请更新问题以进一步解释“远程分支副本”的预期内容?“提取和签出运行没有任何问题”->那么workdir被远程跟踪分支指向的提交内容正确更新了吗?这个答案有用吗?如果我误解了你的问题,我很乐意更新。杰普,那真的很好。我以前没有注意到repo.branchs中的Updatefunction::-)最后一行写着TrackedBranch.Name的代码无法编译。名称不存在。也许应该是TrackedBranch.CanonicalName?其他属性有FriendlyName、RemoteName和UpstreamBranchCanonicalName。这个答案有用吗?如果我误解了你的问题,我很乐意更新。杰普,那真的很好。我以前没有注意到repo.branchs中的Updatefunction::-)最后一行写着TrackedBranch.Name的代码无法编译。名称不存在。也许应该是TrackedBranch.CanonicalName?其他属性包括FriendlyName、RemoteName和UpstreamBranchCanonicalName。