分支是管理同一项目的两个(或更多)版本的正确方法吗?

时间:2013-01-29 22:42:55

标签: git github

我很好奇git是否会执行以下操作。

我有一个已经提交的项目,其中包含了Mt.Rushmore的JPG a,b,c。

我现在创建了一个项目的新分支(2),并将文件a,b,c替换为具有相同名称但属于Yellowstone Park并提交的新文件。

我的意图是将两个项目彼此独立地发展,即使它们本质上是相同的(除了与每个项目相关联的创意JPG文件之外,它们很可能永远不会改变)。

我是否正确假设在切换分支时我可以期望文件来回切换?如果是这样,当我在分支机构之间移动时,什么是git特定命令从repo中删除/下载相关文件?

如果这不是处理这个的正确方法,那是什么?

具体来说,我有一个Android项目,其中java代码库可能永远不会改变,但布局将根据不同的标准具有不同的艺术,我宁愿不将它们分成两个单独的项目,因为它们具有相同的包名和所有这些都会变得非常混乱。

2 个答案:

答案 0 :(得分:2)

分支可能是管理此问题的好方法。

Git会根据您所在的分支为您更改图像。只要它们名称相同。

你所要做的就是:

git checkout <branch-name>

如果底层包是相同的,只有一些部分不同。我认为使用子模块会更好。

http://git-scm.com/book/en/Git-Tools-Submodules

这样,当您对底层包进行更改时,可以更轻松地在两个项目之间共享该常见更改。而不是必须解析您正在进行的布局更改。

答案 1 :(得分:1)

您需要的工作流程如下所示:

$ git checkout -b rushmore
$ git add a.jpg b.jpg c.jpg
$ git commit -m "Mt.Rushmore"

$ git checkout -b yellowstone"
$ git add a.jpg b.jpg c.jpg  //modified files
$ git commit -m "Yellowstone Park"

到目前为止,您拥有包含Mt.Rushmore照片的rushmore分支和yellowstone分支,这些分支会覆盖黄石公园的照片。您可以随时使用checkout -b rushmore来回切换。

此解决方案有一个缺点:如果您对rushmore分支进行其他一些更改,则可以将它们合并到yellowstone分支,只需说:

$ git checkout yellowstone
$ git merge rushmore

然而反向操作将失败,因为黄石照片将覆盖Mt.拉什莫尔。因此,我认为更好的方法是将这些照片外部化或将两个集合提交到单独的目录中。只有一个分支并且在运行时(可能使用一些配置选项)决定应该使用哪个照片集。