2015-07-03 185 views
9

我明白,分叉是克隆服務器端的存儲庫。但我不明白爲什麼我會這麼做。GitHub:爲什麼要分叉?

爲什麼不將原始存儲庫克隆到我的機器上,添加我的代碼,而不是將新分支推送到GitHub併發出拉取請求?

+10

因爲你沒有權限推到別人GitHub庫 – Kos

+0

你失去了我在推新的分支Github上 – TheGeorgeous

+0

@Kos因此,如何能我後,我的分叉庫「合併」成原來的? –

回答

10

從Github文檔

fork是存儲庫的副本。分揀存儲庫允許您在不影響原始項目的情況下自由嘗試更改。

最常見的情況是,叉子可以用來改變別人的項目,或者用別人的項目作爲自己想法的起點。

https://help.github.com/articles/fork-a-repo/

+1

那麼爲什麼不克隆庫,作爲一個新的分支實現我的新功能,推動分支(你可以這麼說?),併發出拉請求? –

+2

通常情況下,除非您已添加爲該回購協議的協作者,否則無法推送新分支。分叉和創建拉請求是提議變更的禮貌方式。這取決於原作者的作者是否需要添加更改 – TheGeorgeous

+0

爲了能夠在存儲庫上進行拉取請求,我必須進行分叉嗎? –

3

的分岔清楚地表明你的資料庫與其他派生,通過標記信息庫爲「從分叉......」更重要的是,它會列出你的倉庫在原有項目的叉名單。

這樣做的好處之一是,如果原始項目在您還在使用時停止運行,那麼人們仍然可以在主存儲庫的叉點列表中找到您的存儲庫。

從GitHub的角度來看,他們可以知道你和原來的存儲庫之間的Git對象是相同的,可以而且共享

節省一些磁盤空間,我覺得你不能從拉入請求一個不是原始分支的存儲庫。至少我無法做到這一點,我不得不叉起來,推到叉子上,要求一個拉動要求。

+0

您可以在分支機構之間創建請求 – TheGeorgeous

+0

@TheGeorgeous我認爲OP打算在自己的GitHub帳戶中推入一個新的存儲庫,並且如果兩個不同存儲庫之間沒有分叉關係,則無法在兩個不同存儲庫之間進行請求 – pqnet

+0

@ TheGeorgeous他沒有指定他想推動分支的地方。它可能是同一個存儲庫中的另一個分支,您可能沒有權限,或者他擁有寫入權限的另一個存儲庫,因此他可能無法發出拉取請求。我認爲,假設你猜對了,我猜錯了。 – pqnet

11

據我所知,分叉被克隆在服務器端存儲庫[...]

這是對的。在GitHub上,分叉是其他一些GitHub倉庫的副本,並引用了它從中複製的倉庫。

enter image description here

備註:叉子的概念起源於GitHub上;它是而不是一個Git的概念。

[...]但我不明白爲什麼我會那樣做。爲什麼不將原始存儲庫克隆到我的機器上,添加我的代碼,然後將新分支推送到GitHub併發出拉取請求?

除非你有到有問題的版本庫的寫訪問,你不能簡單地推什麼吧;你推將服務器與形式

remote: Permission to bos/text.git denied to Jubobs. 
fatal: unable to access 'https://github.com/bos/text/': The requested URL returned error: 403 

這就是一個進場的錯誤消息被拒絕。通過分流別人的回購,您可以獲得副本,您可以將其寫入,即您可以向其推送您的文稿。整個工作流程如下所示:

  1. 確定Bob可以改進的區域。
  2. 叉回購。
  3. 在您的本地計算機上創建分支的克隆。可選地,一旦您對Bob的代碼的修改感到滿意,就可以讓您的工作更加簡潔:tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy/tidy /壓縮你的提交,寫出尊重Bob回購風格的良好提交信息。你也可能想要將你的分支重新分配給Bob的回購。
  4. 推到你的叉子。
  5. 向Bob發出拉取請求,並等待他回顧。
  6. 將更多承諾推送至您的貨叉,直至Bob對您的工作感到滿意爲止。
  7. Bob合併您的拉取請求;你的工作被整合到他的GitHub倉庫中。
  8. 香檳!你的工作不是徒勞的。
  9. 爲了節省GitHub服務器上的空間,並且如果您不打算在短時間內爲Bob的回購貢獻力量,可以安全地刪除您的分支。
+1

真棒操作方法@Jubobs。 Github應該有同樣的方式! – Ufos