2010-05-04 182 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分支的历史记录。