2010-03-27 75 views
1

我有一个项目“A”,它是一个Git存储库。我希望能够制作项目A(B和C)的多个副本,并为客户修改它们。git中的父/主项目

“A”是主人,所以有时当我做新功能时,我希望能够将他们拉入B或C中。但有些提交应该保留在A中,并且只能在制作新克隆时使用。

我该怎么用Git做?那就是:

  • 如何复制A? (克隆?)
  • 如何获得特定的提交到B和C?

请记住,这一切都发生在本地 - 而不是在GitHub上。我使用OS X.

回答

1
  • 如何复制A?

git clone是这样的,这意味着你建立A和B,C之间的发布链接,允许推/它们之间拉的提交。

  • 如何获得特定的提交到B和C?

通过其在回购答:

  • ,你开发尽可能多的功能,私有分支您想要的(但这个分支从未被推其他地方)
  • 公共支路将被推以B和C
  • 合并或透过公共部门高层你的私有分支rebase --onto你的提交,然后推入公众分支B或C.

一个工作流程是,例如:

cd ~/projectA 
git checkout master 
git branch private 
# do some commits, some private, some useful to a 
git checkout master 
git branch feature_for_a 
git cherry-pick sha1_from_private 

cd ~/project_B 
git fetch project_A 
git checkout --track feature_for_a # check modifs for a 
git checkout master 
git merge feature_for_a 
# do some client specific modifications 
+0

非常感谢您的回复。你能写出典型工作流程的命令吗?例如。 1. git clone〜/ project_a〜/ project_b 2. [修改project_a] 3. [现在怎么样? :)] – jriff 2010-03-28 19:09:54

+0

@jriff:答案更新*可能的工作流程的一个例子* – VonC 2010-03-28 19:30:46

+0

顺便说一句。一些提交应该只能到一些克隆。一个提交可能是一个功能或一个错误修正,不需要去所有的克隆。此外,我认为最好拉我想要的提交,而不是从project_a推送它们。 – jriff 2010-03-28 19:37:05