我尝试通过 LibGit2Sharp 签出远程分支。在 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 的副本。
有谁知道用其他方法检查遥控器吗?
我的替代方案是在存储库中创建分支并将其推送到远程:
Branch newBranch = repo.Branches.Add(Name, repo.Branches["master"].Commits.First());
repo.Network.Push(newBranch);
但我得到这个异常:
您尝试推送的分支“Test1”(“refs/heads/Test1”)不跟踪上游分支。
也许我可以将分支设置为上游分支,但我不知道如何。
Edit:我没有正确解释它,所以我尝试更好地描述 Fetch 和 Checkout 在我的程序中的作用。 Fetch 命令正确执行。现在,如果我使用 checkout 命令,它应该创建远程分支的本地分支,但事实并非如此。我也尝试过 repo.Checkout(name) ,没有 "origin/" ,但它抛出了异常:No valid git object identified by '...' exists in the repository.
如果我正确理解您的问题,您愿意创建一个本地分支,该分支将配置为跟踪获取的远程跟踪分支。
换句话说,一旦您获取存储库,您的引用就包含远程跟踪分支(例如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);
Note:更多示例可以在BranchFixture.cs测试套件。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)