2017-10-05 179 views
0

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

编辑:我使用的libgit2sharp库发出git的命令,而不是Git的外壳

回答

0

如果那么你的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是一个分布式版本控制系统。当您进行更改时,您正在对存储库本地副本中的分支进行更改。一旦你在本地做出更改,您将需要

  • 添加和本地提交的变化(可能拉高到 远程仓库,如果你有相同名称的映射,远程分支)
  • 将更改合并回主模块
  • 将更改推送到远程主数据库(通常为起源/主模块)。

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

+0

嗯,但有一个libgit2sharp相当于结帐-b? –

+0

我的理解(也许是不正确的)是你正在/正在GitHub上的libgit2sharp项目上工作,并且你正在使用git。你使用libgit2sharp来发出git命令吗? – jhenderson2099

+0

是的,我。如果不是很清楚,我很抱歉。我正在使用libgit2sharp发出git命令 –

1

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

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

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

然后创建一个新的本地分支称为dev指向同一个commit为origin/dev分支:

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

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

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

最后,切换到新的分支:

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

您不应该在'repo.Branches.Update(...)'部分中设置'Remote'来真正模拟'git checkout '? – yorah

+0

设置'UpstreamBranch'属性设置'remote'和'merge'配置选项。 –

+0

只需再次检查主人的代码,但我认为它没有。设置'TrackedBranch' *不会*设置'remote'和'merge'配置选项,但我认为直接设置'UpstreamBranch'只会设置'remote'配置选项。 – yorah