LibGit2Sharp:Checkout Remote Branch

时间:2014-04-28 09:44:13

标签: git c#-4.0 libgit2sharp

我尝试通过LibGitSharp检出远程分支。在git中你使用这个命令:

git fetch origin
git checkout -b test origin/test

在较新的版本中它只是:

git fetch
git checkout test

所以我尝试了这段代码:

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

Fetch和Checkout运行没有任何问题,但没有Remotebranch的副本。

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

我的另一种方法是在Repository中创建Branch并将其推送到Remote:

Branch newBranch = repo.Branches.Add(Name, repo.Branches["master"].Commits.First());
repo.Network.Push(newBranch);

但是我得到了这个例外:

  

分支' Test1'您尝试推送的(" refs / heads / Test1")不会跟踪上游分支。

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

编辑:我还没有正确解释它,所以我尝试更好地描述Fetch和Checkout在我的程序中的作用。 Fetch命令正确执行。现在,如果我使用checkout命令,它应该创建一个Remotebranch的本地分支,但它不是。我也试过repo.Checkout(名字),没有"起源/" ,但它产生了例外:No valid git object identified by '...' exists in the repository.

1 个答案:

答案 0 :(得分:20)

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

换句话说,一旦你获取存储库,你的引用包含远程跟踪分支(例如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);

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