2017-10-05 93 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