2014-09-24 44 views
2

我在git服務器上有兩個分支,都是master和development。我使用下面的代碼將存儲庫克隆到我的機器上。相當於git checkout branch_name在LibGit2Sharp上

var options = 
    new CloneOptions() 
    { 
     CredentialsProvider = this.credentialsHandler, 
    }; 

return 
    Repository.Clone(
     gitHttpUrl, 
     localPath, 
     options); 

默認分支是主設備。我想用下面的代碼切換到開發分支。

using (var repo = new Repository(localPath)) 
{ 
    var branch = repo.Branches[branchName]; 

    repo.Checkout(branch); 
} 

但分支爲空。

如何使用LibGit2Sharp切換分支?

更新
默認分支是master以下是重現該問題的步驟。

  1. 結帳develop分支
  2. 拉,在這裏拋出異常。

這是代碼:

private void Checkout(string localPath, string branchName) 
{ 
    using (var repo = new Repository(localPath)) 
    { 
     var branch = repo.Branches[branchName]; 

     if (branch == null) 
     { 
      branch = repo.CreateBranch(branchName, "origin/" + branchName); 
     } 

     repo.Checkout(branch); 
    } 
} 

private MergeResult Pull(string path) 
{ 
    const string NAME = "test-user"; 
    const string EMAIL = "[email protected]"; 

    using (var repo = new Repository(path)) 
    { 
     var merger = 
      new Signature(
       NAME, 
       EMAIL, 
       DateTimeOffset.UtcNow); 

     var options = 
      new PullOptions 
      { 
       FetchOptions = new FetchOptions() 
       { 
        CredentialsProvider = this.credentialsHandler 
       } 
      }; 

     return repo.Network.Pull(merger, options); 
    } 
} 

回答

3

類似於Git裏,克隆時,LibGit2sharp只會創建一個本地分行遠程端

所有其他分支也將被拿來和訪問作爲遠程跟蹤分支,但不會爲其自動創建本地分支。

因此,爲了實現您的目標,您可以檢出遠程追蹤分支(例如,origin/master)。請注意,在這種情況下,HEAD將自動設置爲分離模式。

repo.Checkout["origin/my_branch"]; 

或者,從遠程追蹤器創建本地分支,然後檢出本地分支。

var branch = repo.CreateBranch("my_branch", "origin/my_branch"); 

repo.Checkout(branch); 
+0

repo.CreateBranch方法的第二個參數接受'Commit'或'committish'。我如何傳遞遠程分支名稱? – Anonymous 2014-09-30 11:47:53

+0

'committish'是任何可以指向'commit'的東西。此方法支持** [擴展SHA1語法](https://www.kernel.org/pub/software/scm/git/docs/gitrevisions.html)**。因此,傳遞'origin/your_branch_name''將起作用。' – nulltoken 2014-09-30 11:58:19

+0

我更新了我的問題以包含代碼示例。我嘗試傳遞''origin /「+ branchName',但它沒有幫助。 – Anonymous 2014-09-30 12:14:16