2016-09-24 48 views
2

我剛剛完成了http://learngitbranching.js.org/的所有練習,我現在對此非常有信心。我明白了所有這些,並且做了每個練習,而不必考慮太多。顯然,這些只是初學者練習,我現在只是一個Git新手,但理解一些東西感覺很好。現在我可以正確版本控制我的工作,而不是依賴複製工作版本的文件。基於舊提交推送更改,如何解決?

不管怎麼說,我有一個關於合併回可能引入錯誤的遠程問題/

考慮這種情況:

我檢查出的遙遠而明亮回購的最新主分支上週一和分支它在本地工作一個新功能。這個功能可以說是與自定義類中的某些類方法進行交互,

現在在週二,我的朋友檢查了master分支,並在本地分支它,並決定他有更好的方法讓同一個類運行。所以他繼續前進,對課程進行修改,可能會刪除其中的某些方法並編寫不同的方法。可以說他承諾這些改變,並在星期三把它們推回遠程的起源/主人。

現在是星期四,我剛剛花了最近三天的時間編寫與已更新的類進行交互的新功能。假設我的功能需要一些我的朋友在更新班級工作時刪除的類方法。我做了拉和推,發生了什麼?

我假設發生什麼事是,當我拉我的文件將更新與它的最新版本的類和方法,我的功能,可能是一個單獨的文件將與新的主文件合併,因此包括一個文件引用一個現在已經過時的版本。所以,當我推我推送功能將無法正常工作,並會有錯誤(甚至更糟,甚至沒有編譯),因爲它引用了不存在的方法。

這是常見的嗎?這在生產中如何解決?當特定班級發生變化時,您是否需要口頭溝通您的團隊工作,並且任何與該班級相關的功能的工作人員都需要將他們的功能建立在新班級之上?

+0

難道你的朋友完全刪除功能/你依靠的,還是他只是重構它們的功能(例如,改變函數/類的接口)? – Darthfett

回答

2

我想說,這是在你身上,以確保你的功能的作品。是的,更好的團隊溝通將有助於確定此類衝突,但最終,您會推送破碎的代碼。

在您拉出並解決合併衝突(如果有)後,請確保該功能正常工作。運行測試(你有測試,對吧?)。如果您確信它有效,請推送。

另外,從你的問題中不清楚你是否這樣做,但是,正如VonC所說:你不推動主人。您將您的分支推送到遠程回購,然後發送拉/合併請求。

如果您有某種臨時環境(即新提交不直接進入生產),那麼這個問題不會那麼嚴重。在這種情況下,即使你錯過了某些東西,當有人在分期中點擊應用程序時,也有第二次機會被發現。

+0

即使我拉下了origin/master,並且針對新的主提交測試了我的新功能,從根本上說,我將不得不重新執行所有使用從我提交的功能中刪除的任何內容的工作。 我知道Git不能爲我創造新的代碼,我只是好奇大型作品如何在所有依賴於彼此的東西上工作,如果不斷變化的作品 – user8363

+0

@ user8363:在較大的程序和系統中,找到*內部API *(應用程序編程接口):發佈的接口,其中某些代碼部分承諾特定的函數名稱,數據對象,方法或您將以某種特定方式行事,而不管什麼恰好在該API的實現。如果API被破壞,那麼這是「他們的錯」,但是如果繞過了API,則是「你的錯」。 :-)實際的API *變化*需要API客戶的大力支持。 – torek

+1

明白了,有道理。我敢肯定即使使用內部API,這些類型的衝突仍然會一直髮生 – user8363

2

我認爲發生的事情是,當我拉我的文件會與類的最新版本和方法裏面

你要做的實際上是爲更新:

git checkout yourBranch 
git fetch 
git rebase origin/master 

這將在更新的origin/master之上重播yourBranch。然後你編譯,檢查是否一切正在運行,運行你的單元測試,......
然後你只需要推回你的分支,並按順序進行pull請求(GitHub)或合併請求(GitLab)觸發代碼審查併合並回分支的遠程master

這個想法仍然存在:如果你的代碼仍在工作,那麼在本地測試然後推回去完成代碼審查(拉/合併請求):通過代碼註釋自然發生的通信。

+0

是的,這是有道理的,但就像我在我對Sergio的評論中所說的,即使我將我的代碼作爲新的origin/master的孩子重新綁定,如果我的代碼需要在之前被推送到原來的提交中被刪除的方法,那麼我需要重寫我的代碼。我知道git並不神奇,不會讓所需的方法重新出現,但我很好奇,當相互連接的東西每天都被多個人工作時,這是如何在大規模上解決的。 – user8363

+1

@ user8363通常情況下,工作是在*獨立*部分代碼上完成的。如果不是,則必須進行直接通信(Git之外),以免浪費時間不知道遠程更改。 – VonC

+0

明白了,所以它確實只是一個通信問題 – user8363

2

這是常見的嗎?這在生產中如何解決?當特定班級發生變化時,您是否需要口頭溝通您的團隊工作,並且任何與該班級相關的功能的工作人員都需要將他們的功能建立在新班級之上?

是的,這是很常見的,因爲它聽起來也不是git誰可以在這裏做任何事情。我們作爲開發者需要確保我們定期測試我們的代碼(定期如小時或每日)。

我相信這是你應該嘗試什麼:

  1. 廚師代碼並運行測試
  2. 底墊和運行測試
  3. 發送審覈底墊和運行測試
  4. 合併到主分支和再次測試
  5. 部署在dev服務器和煙霧測試功能,以及其他功能,如果可能的話
  6. 重新檢查舞臺運行測試然後準備部署
  7. 部署以刺激和快樂