在git merge上保持一些变化

时间:2016-07-08 10:35:36

标签: git github merge branch git-merge

我对git机制有点困惑。

我的作品有3个分支master develpublic。我使用master将我的Node.js应用程序部署到OpenShift(或heroku)中; devel是我开发我的功能的地方,我使用public在GitHub上推送我的开源代码。

每次我必须在OpenShift上部署我的应用程序时,我只需从devel合并到master然后再推送。 同样适用于git,我从develpublic

问题:示例。我有一个文件,index.html在巫婆中有一段代码用于私人Google分析。或者前。我需要一些文件在master中部署,但不能在public

中部署

问题:如何在master中保留这段代码和文件,而不是public

我想到了2个(非工作)策略:

1)代码段\文件不在devel中,但存在于master - >我合并devel中的master - >片段\文件将从主

中删除

通过这种方式我可以使用public(因为不包含私人代码段\文件)但我对master不适用

2)Snippet \ files存在于devel - >如果我将devel合并到master我在OpenShift上的部署很好,因为包含了片段\文件。

但在devel合并public - >现在public有我的私人档案。

Gitignore文件无法帮助我,因为在分支机构之间共享,如果我忽略了我的私人文件,它们也会在我的master部署中被忽略。即使如此,这也无法解决代码片段问题。

TL.TR 即可。如何合并2个分支保持一些文件\部分代码未合并?可能是以一种简单的方式,因为我必须为很多文件执行此操作。

或者,我怎样才能改变我的分支策略来实现这个目标?

2 个答案:

答案 0 :(得分:1)

我找到了一个知道如何做到这一点的网站。您可以将excludesfile用于不同的分支。

以下是如何操作:

$ git branch public_viewing
$ cd .git
$ touch info/exclude_from_public_viewing
$ echo "path/to/secret/file" > info/exclude_from_public_viewing

然后编辑.git / config文件并添加:

[core]
excludefile = +info/exclude

[branch "public_viewing"]
excludefile = +info/exclude_from_public_viewing

使用此方法,所有公共文件都在info/exclude_from_public_viewing中,而个人在info/exclude中。

可在此处找到该网站:http://cogniton-mind.tumblr.com/post/1423976659/howto-gitignore-for-different-branches

答案 1 :(得分:1)

您可以更改分支策略以实现此目的。我假设所有公共代码也应该存在于您的主分支中。

你可以有4个分支(而不是3个),例如。 master, dev-master, public and devel

  • 您应该在devel分支上执行大部分开发(私有文件除外),并在需要时将其合并到dev-masterpublic。由于它没有任何私有文件,因此不会合并到public分支。
  • 当您想要编写私人代码时,只需将分支从devel切换到dev-master,然后再开始编写私有代码,然后在此处测试您的功能。一切正确后,将dev-master合并到mater分支。

使用此策略,您还可以使用/不使用私有文件来测试代码,这有助于维护代码库。

我不确定这是否是最好的策略。我希望这可以帮助你!!!