2016-07-08 63 views
1

我对git机制有点困惑。保持git合并的一些变化

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

每次我必须在OpenShift上部署我的应用程序,我只需从devel合并到master然后按下即可。 同为GIT中,我玛吉从develpublic

问题是:例子。我有一个文件,index.html女巫有一小段代码用于私人Google分析。或者前。我需要部署masterpublic

问题是一些文件,但我怎么能保持的代码和文件这一片段在master但不是在public

我想过2(非工作)策略:

1)摘录\文件中不存在的devel但存在于master - >我合并develmaster - >片断\文件从被删除掌握

以这种方式我很好public(因为将不包括私人片段\文件),但我不精与master

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

但合并develpublic - >现在public有我的私人文件。

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

TL.TR。我怎样才能合并2分支保持一些文件\代码的一部分未合并?可能以一种简单的方式,因为我必须为许多文件做这个。

或者,我如何改变我的分支策略来实现这个目标?

+0

我想我达到了解决方案。在使用git系统时是个错误。 'devel'最初有'master'部署中使用的seme code \文件。现在,删除干净的'devel'分支的这些信息,'master'中的mergin也会删除这些信息。解决方案(非常愚蠢,我知道)重写了'master'中的文件和有用的片段。直到现在,即使这些信息不再出现在'devel'中,即使从'devel'合并,master也会继续拥有它们。我是新来的混帐,我有点困惑:)我只是认为snippets \文件将总是删除合并! – rEDSAMK

回答

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

+0

我在另一篇文章中发现了这种方法,但似乎不工作(也许版本问题,该文章是2010年)。问题是,即使这项工作(无论如何都不错)不会完全解决问题,因为我想更新我的index.html(不要忽略它),只是让一部分代码在合并时不受影响。但非常感谢,无论如何,赞赏:) – rEDSAMK

1

你可以改变你的分支策略,以实现这一目标。我假设你们所有的公共代码也应该出现在你的主分支中。

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

  • 你应该做的大部分的开发(除私人文件)对devel分支,只要你想将它合并到dev-masterpublic。由于它没有任何私人文件,因此不会合并到public分支。
  • 当你想写你的私人代码时,只需将你从devel转到dev-master,然后开始写你的私人代码,然后在这里测试你的功能。一旦一切正常,合并dev-mastermater分支。

通过这种策略,您还可以测试代码是否带有私有文件,这将有助于维护代码库。

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

+0

您的分支机构的战略是非常好的,我现在切换到您的建议!这实际上有利于更好地将代码库与生产部分分开。但我想我找到了解决我的问题,只是使用git rm和commit的错误。我会在我的第一篇文章中更好地解释它(可能对某个人来说是有用的) – rEDSAMK

+0

忘记非常感谢你的建议,赞赏 – rEDSAMK

+0

我很高兴它帮助你决定你的分支策略。请将此答案标记为已接受:) – Vinay