2010-05-04 186 views
2

我爲一個名爲'A'的客戶做了一個應用程序(不是真的)。Git和克隆

我發現它非常酷,我想賣給其他客戶。目錄'A'是一個Git倉庫。我想我克隆它有一個問題。據我所見,我需要複製'A'目錄並將其命名爲'Generic_A'。然後刪除目錄'A'並執行「git clone Generic_A A」然後,我可以開始使用通用設計更改'Generic_A'-repo,並刪除所有客戶端引用。但這是另一種方式。我應該開始進行通用設計,然後克隆回購以更改爲客戶特定設計。

我可以:

  1. 做出一個新的分支
  2. 做所有的變化,使設計通用
  3. 創建反映了兩個
  4. 之間的變化補丁刪除客戶端專用分支
  5. 將目錄重命名爲'Generic_A'
  6. 將回購克隆到新的目錄'A'
  7. 將修補程序應用於獲取客戶端特定內容

如果是 - 我如何製作修補程序並應用它?

問候,

雅各

回答

0

可以工作,但6至7之間。我會補丁應用之前進行「client_A」分支。
缺點是你失去了特定於客戶端A的提交歷史記錄,因爲你在一個大的提交中應用了該補丁。

在你的情況,補丁可以git diff進行,見 patching with git diff

git diff --no-prefix > patchfile 

然後應用補丁:

patch -p0 < patchfile 

如果你有一個現有的「 git diff「創建時沒有」--no-prefix「選項的補丁文件離子,可以通過應用該補丁:

patch -p1 < patchfile 

這將忽略默認的A/B /源前綴。

+0

非常感謝您的回覆。你爲什麼要創建'client_A'分支?爲什麼不直接在主分支上應用補丁?畢竟是通用的克隆。 – jriff 2010-05-04 06:32:10

+0

順便說一句 - 我知道失去歷史,但我可以忍受這種情況。 – jriff 2010-05-04 06:37:43

+0

@jriff:一個''client_A'分支允許你獨立地離開主分支,隨時準備由你的'Generic_A'主分支進行更新,當你做出下一個'git pull' – VonC 2010-05-04 06:54:43

1

這裏可能的工作流程:

  • 在DIR:
    • 創建一個新的分支 '通用',從分公司的 '客戶A'。
    • 在'Generic'分支上使用'git rebase -i'來刪除所有客戶A的東西。
    • 使用'git rebase client-A generic'重新綁定您的客戶端 - 通用分支。
  • 重命名一個目錄到通用目錄
  • 克隆你的通用目錄到一個新的客戶端-A DIR
  • 刪除客戶端-A從通用目錄分支。

這樣,您將保留client-A分支的歷史記錄。