2017-06-03 84 views
1

我在我的第一個軟件工程類。 這是我們第一次在團隊中工作並使用git和github。 在課堂上,我們的老師告訴我們,在完成新功能後,通常應將主分支出去,並將其合併回主。 這就是我一直在做的事情。 但是我的團隊的其他成員沒有分支。 他們從github上的主人拉到他們的本地機器上,進行編輯,在他們的本地主人上完成他們的功能,然後在github上推送給主人。我們真的需要在Git中分支嗎?

我試圖說服他們分支,但現在我想到它,我覺得它更混亂。 我被告知該分支的目的是製作代碼的副本,而不用擔心無意中將不可運行的代碼毀掉。

但是,他們的本地主人是不是真的就像一個分支本身?當他們進行編輯時,他們不會改變github上的主人,所以其他人可以自由地從github中提取工作代碼。然後他們合併,類似於一個分支。

我很困惑,爲什麼我們應該分支,如果他們在做什麼似乎在工作?

謝謝!

+0

在真實的項目中,人們在功能上進行協作,團隊成員在合併前檢查其他人的代碼,人們在同一時間處理不同的功能或修復,功能可以持續很長時間,因此必須保存開發人員的機器等等等。所有這些都可以通過分支和pushng分支到github來實現。 –

回答

1

但是,他們的本地主人是不是真的就像一個分支本身?

是的!

我很困惑,爲什麼我們應該分支,如果他們在做什麼似乎工作?

這取決於您的工作流程。你似乎要描述的是這個工作流程:

Alice創建一個分支alice跟蹤master並且Bob做出bob分支,該分支也跟蹤master。愛麗絲總是承諾alice和鮑勃總是承諾bob。然後,當他們對自己的變化感到滿意時,他們會融入master

當然,這與Alice和Bob在當地的master分支上工作幾乎沒有任何區別!

當同一人同時在多個功能上工作時,問題經常出現。例如,

愛麗絲正在從事Feature A,鮑勃正在致力於Feature B。愛麗絲已經完成了Feature A,並且在alice中做了幾次提交。然而,Feature A很難實現,所以愛麗絲決定她應該在Feature C上工作,並且在alice上做了一些提交。 Bob完成了Feature B並決定他想要解決Feature A並且因此將alice拉成bob

在Bob完成Feature A後,他想將bob合併到master中。但是,bob現在包含Feature A,Feature B和部分Feature C,但Feature C尚未準備好合併!很容易看到,像這樣的工作流可能會導致許多令人困惑的合併衝突。

訣竅是,而不是有個人分支應該有功能分支機構。 Alice應該有一個分支Feature AFeature C,Bob應該有一個分支Feature BFeature A。這樣一來,他們都可以在不同的功能上工作,而不會踩在對方的腳趾上。

+0

好的,謝謝!我認爲我的團隊計劃一次和獨立完成一項功能。但是現在我可以看到,如果人們通過其他成員的協作同時處理多個功能,則分支非常重要。 – seal308

+0

創建功能分支時看起來可能有些過分,但是如果由於無法預料的問題,許多人不得不使用相同的功能,或者某些功能花費太長時間才能合併,開發人員想繼續處理其他問題。 – Moyamo

0

這個想法是,你有一個主分支代碼是穩定和合並。

比方說,我有一個應用程序,以刮擦網站。

我將創建一個名爲develop/pulldata的新分支。在這個分支中,我將致力於提取數據。我的一個團隊成員可以在數據上運用一些邏輯,所以他可以創建自己的分支開發/應用邏輯。

一旦他有一些提交併且他的代碼是穩定的,他可以打開一個pull request來將他的代碼合併到master,你可以在github UI中查看它,看看他改變了什麼代碼並決定是否改變你想合併,或者如果需要更改。

現在,過了一段時間,我的代碼完成了,我打開了一個拉取請求,以便我的同事可以查看我的代碼並批准或建議更改。這很容易查看,團隊中的每個人都知道主分支是穩定的。但是,其他分支不一定是。當他們合併成主人時他們必須是。

0

保持較短。主人你在機器中擁有的是當地的主人。您將所有更改推送到origin/master服務器。

爲什麼不鼓勵在master分支上工作的主要原因是有幾個人在項目中工作,其中一個分支需要成爲所有創建分支的共同基礎。


例如,你有你想要的藍牙模塊添加到它的產品,然後創建從主分支add_blueetooth當你沒有那麼合併是掌握。另一個人正在研究wifi,他可以將他的分支合併到主人手中。這只是常見的CVS工作流程,創建分支會導致並行工作。


克隆時會發生什麼?

實際上,git clone取得所有遠程分支,它會爲你創建一個本地分支,即master。只需鍵入此命令git branch -a

git branch -a 
* master 
    remotes/origin/HEAD 

他們一些其他的命令,你可以看到自定義g it branch -r遠程分支。

您可以檢查本地分支機構通過操縱此位置創建的參考。 refs/remotes/origin

相關問題