2012-01-16 33 views
1

我將git用於類項目,所以我可以與我的團隊合作。我上個學期使用了mercurial,但是由於msysgit有一個便攜版本,所以已經切換到了git。git中的多個用戶來自使用mercurial

在mercurial中,當2個用戶從同一個變更集中進行更改時,其中一個人推送,而其他提交人將成爲一個單獨的分支,即使他們從未明確地創建單獨的分支也必須合併到主分支中因爲兩個主分支都沒有創建其他分支,但第一個用戶提交的不同提交的存在使得其他用戶的提交看起來像bitbucket中提交樹上的另一個分支)。

在git中會發生同樣的事情嗎?多個用戶可以只在一個主分支上工作,然後在他們拉動時像mercurial一樣在新的變化中合併?或者你必須製作分支?或者我只是想着這個錯誤?

+0

您能解釋「2個用戶是否從同一個變更集中進行了更改」? – fge 2012-01-16 19:15:44

+0

基本上我們都在本地機器上具有相同的變更集。一個添加完成的功能和推送,然後另一個添加完成其他功能,並且必須進行合併。但是,他們都沒有創建一個新的分支,並且在主分支上工作。 – Portaljacker 2012-01-16 19:25:01

+0

好的,我已經做出了答案,我希望它已經足夠清楚了...... – fge 2012-01-16 19:35:33

回答

2

根據你的解釋,你必須用git以相同的方式操作。

隨着git的mercurial,你的兩個開發者開始從同一點開發功能。開發者1通過他/她的變化創建M1,開發者2創建M2。

基本上,推動勝利的第一個開發者。如果是DEV1,當DEV2嘗試和推動M-> M2,因爲遠程的觀點實際上是M1,而不是M.

這意味着dev2上推就會失敗有兩種選擇:

  • 要麼(S )他從遠端拉出來,在這種情況下會創建一個合併提交,這個合併提交會被推出;
  • 或(s)他提取並在M1之上重新設置他/她的變更集,創建M2'並推送。

在第一種情況,命令的順序是:

git pull origin master 
git push origin master 

請注意,在一個偶然的設置中,起源和主是默認的遠程和分支機構默認的,這意味着這些參數可選...這些命令是因此可能是矯枉過正,但我​​不一樣的驚喜:第

和樹將是:

M---...---M1--C # C is a merge commit 
\   /
    \---.....M2 

在第二種情況下,命令的順序是:

git fetch origin 
git rebase origin/master 
git push origin master 

和樹將是:

M ---...M1---...----M2' # M2 rebased on top of M1 

現在,選擇哪種溶液實際上是關於政治。有些項目更喜歡解決方案1,其他一些更喜歡解決方案2. Git不關心政治;)

+0

'origin/master'是隱含的,太多的工作:-) – Reactormonk 2012-01-16 19:36:48

+0

是的,是的,我知道這些是默認值...至少在第一種情況下。儘管如此,你還是需要指定它。 – fge 2012-01-16 19:40:43

+0

因此,在第一種情況下,拉動操作會自動導致合併? (當然,任何衝突都會導致kdiff,我認爲它是建立在msysgit中的)。這很好,它使我向團隊解釋的步驟少於上一學期不得不爲的水平。 – Portaljacker 2012-01-16 21:46:08