2012-10-30 41 views
3

說有遺留的Java項目A.無論出於何種原因,該項目都有一些保密的內容(例如密碼,加密密鑰,電子郵件)和/或環境特定(例如硬編碼路徑,服務器名稱,電子郵件)。由於涉及的複雜性,似乎不可能將項目更改爲不包含源代碼中的信息。同一項目的多個不同變體的Git流程

在某個時候,一個新的外包團隊加入了這個開發。鑑於上述情況,外包團隊無法逐字訪問項目來源。他們有一個獨立的開發環境,因此可以在他們的VCS中製作一個單獨的項目副本,以解決問題(即所需的所有內容都根據需要進行清理/更新,以便在其環境中工作)。我們稱之爲A2版本。

的工作流程一般包括涉及A和A2兩件事情:

  • 的代碼可以在雙方發生變化(即A和A2可以改變,由最初的團隊和A2改變由外包團隊),包括有源代碼更改衝突
  • 需要保持兩個項目同步。不需要讓它們始終保持同步,但重要的是要有一種相對無痛的方式來做到這一點。假設有衝突需要解決時,這必須是手動過程

這個工作流可以通過手動保存兩個項目並在它們之間合併來實現。

相關的問題:

  • 一個會如何使用Git管理兩個版本,即有什麼選擇比手動合併?
  • 這是最好的設置還是有更好的選擇?
  • 對於新項目,首選方法是什麼(從某種意義上說 - 如果您有類似的情況,您會採取什麼措施?)保持機密/特定環境的事情不受源代碼控制?無論如何,這是一件好事嗎?

回答

1

這種方法會給你帶來痛苦。你需要做的是使用git filter-branch消除服務器名稱,密碼,並用非工作的通用表格替換 - 即它不應該運行 - 在任何地方!

接下來,設置smudge/clean腳本來更改包含該信息的文件,以便將值填充爲解決方案在本地系統上運行所需的值。與您的開發環境相比,您的生產環境中會有不同的參數。關鍵是要抽象這些信息。

現在你應該沒有問題與外包團隊共享同一個存儲庫。在一個回購中管理分支與清理回收之間的交付比較容易。

1

@ icyrock.com:這似乎是一場災難的祕訣。

我的建議是將源代碼與感性數據分開。
請注意,這是一個更一般的建議,您可能希望保持這些合理的數據的安全存儲和有限的訪問權限。

步驟:
1。從源代碼中移除所有明智的數據
2.創建一個新的包含合理數據的git存儲庫
3.從原始源代碼中引用敏感數據(這取決於編程語言,Java不是我的專業領域)

在這一點上,「清理」的源代碼可以與外包團隊安全地共享,他們將無法訪問「明智的數據」回購,但他們可能有一個類似的回購與他們自己的版本數據(即「演示」或「試用」或「非生產」路徑,服務器名稱,電子郵件)。
當然,如果外包團隊應該在一個測試環境中測試他們的變化,我強烈認爲這是一個必須具備的條件。他們正在做測試,不是嗎?

這將大大降低,如果不能整體消除任何問題,並行地積極開發相同的東西2副本之間的大混亂合併。

相關問題