使用libgit2sharp检出远程分支

时间:2017-10-05 14:49:16

标签: git github commit libgit2sharp

考虑以下内容,我在github上有两个分支:master和dev。我有一个本地存储库,它是克隆并指向远程主服务器,但我想将其切换到dev分支,以便我所做的任何更改都将提交给dev而不是master。这样做需要采取哪些步骤?我尝试了多种方法,但它们似乎从不工作,它总是承诺掌握。请简单解释一下,因为我还是Git和libgit2sharp的新手,所以我仍然试图绕过它。

编辑:我正在使用libgit2sharp库发出git命令,而不是Git shell

2 个答案:

答案 0 :(得分:4)

如果您还没有名为dev的本地分支,但您的远程 dev分支,那么运行git checkout dev将创建一个新分支dev在本地分支,设置远程跟踪信息,然后切换到新创建的分支。您可以在LibGit2Sharp中模拟此行为。

要创建跟踪远程dev分支(dev)的本地分支refs/remotes/origin/dev,请先找到远程分支:

Branch trackedBranch = repo.Branches["origin/dev"];

然后创建一个名为dev的新本地分支,指向与origin/dev分支相同的提交:

Branch localBranch = repo.CreateBranch("dev", trackedBranch.Tip);

然后在本地和远程分支之间设置跟踪:

repo.Branches.Update(localBranch, b => b.UpstreamBranch = "refs/heads/dev");

最后,切换到新分支:

LibGit2Sharp.Commands.Checkout(repo, "dev");

答案 1 :(得分:1)

如果你的dev分支存在,那么:

git checkout dev

如果您的dev分支尚不存在,那么您需要创建它,然后切换到它:

git checkout -b dev

使用libgit2sharp,无法执行git checkout -b(我知道),因此您需要使用CreateBranch 创建一个分支,然后Checkout执行分支结帐。

代码如下所示:

private void GetOrCreateThenCheckoutBranch(string myPath, string branchName)
{
    // NOTE: This code is for demo purposes only.  It is a bad idea
    // to create code that couples multiple functions/actions together

    using (var repo = new Repository("path/to/your/repo"))
    {
        var devBranch = repo.Branches["dev"];

        if (branch == null)
        {
            // Repository returns null object when branch does not exist
            // so, create a new, LOCAL branch
            repo.CreateBranch("dev");   // Or repo.Branches.Add("dev", "HEAD");
            devBranch = repo.Branches["dev"];

            // You will need more code _here_ if you want to synchronize/set 
            // an upstream branch...
        }

        // Now, checkout the branch
        Branch currentBranch = Commands.Checkout(repo , devBranch);

        // Do more stuff...
}

Git是一个分布式版本控制系统。进行更改时,您将在存储库的本地副本中对分支进行更改。在本地进行更改后,您将需要

  • 在本地添加和提交更改(可能会将它们推送到 远程存储库,如果你有一个同名的映射远程分支)
  • 将更改合并回主人
  • 将更改推送到远程主存储库(通常是origin / master)。

如果远程分支机构不允许任何人进行合并,则需要发出pull request