2012-03-01 32 views
2

我正在开发一个Android应用程序,并且在整个开发周期中一直使用Git。我现在已经到了想要构建和发布实验性功能的地步,供人们试用和安装,同时仍然在设备上安装了原始的稳定应用程序。Git实验分支或单独的实验库?

现在,这意味着我需要使用不同的软件包名称,这会改变开发项目中的一些基本文件。我还想有一个单独的图标来清楚区分应用程序。

我不习惯Git足以知道该采取何种方式:我是否应该创建一个实验分支,当我想要做一些实验工作或者将该实验工作作为单独的混帐回购?

我遇到了一些问题,无论哪种方式的实际流程。

  • 如果我做了一个实验分支,我不想(错误地?)将包名称的变化和明确分离的实验细节与主分支合并;我只想合并代码的工作部分,而无需额外添加修改。
  • 如果我制作单独的回购,我如何合并从实验回购到主回购的变化,考虑到同样的愿望不能取代即。包名称和图标?

回答

3

这正是分支机构的用途。一个限制是git真的看到提交,而不是文件。所以你通常会使用cherry-pick命令将不同分支中的一个或几个提交合并到master中。

git branch branchx 
git checkout branchx 
... do work, commit (into branchx), repeat... 
git checkout master # return to master 
git log branchx # to find out the ID of the commit to merge back 
git cherry-pick <commit ID from branchx> 

这是首选方法。这意味着你在实验分支工作时应该记住这一点。您的提交应该足够小,只包含修复/功能中涉及的文件。

替代,你可以挑选一些文件合并回用

# from branch master do 
git checkout branchx file1 file2 file3 

看到这个相关答案 How do you merge selective files with git-merge?

+0

只是为了澄清和一种最佳实践的方法问题:创建实验分支来自master并且我所做的第一件事是创建一个包含特定于实验的修改(包和图标更改)的提交,然后继续提交代码更改,以便实验性功能。这是否会在以后的某个时间回归主人? – 2012-03-01 09:18:40

+0

是的。将提交看作是对文件执行的指令,而不是文件本身。您可以在主人的任何时候应用这些说明。 – Alkaline 2012-03-01 11:44:24

+0

整洁明确的答案。你在这一个上得到我接受的答案。 – 2012-03-01 11:53:58

1

我肯定会去分支。你必须在承诺中练习一些规则,使它们足够小,以便只挑选需要的部分并留下其他部分。但我不认为这是一个问题,当然不是合并两个独立存储库之间的更改。