Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/github/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
在git merge上维护一些更改_Git_Github_Merge_Branch_Git Merge - Fatal编程技术网

在git merge上维护一些更改

在git merge上维护一些更改,git,github,merge,branch,git-merge,Git,Github,Merge,Branch,Git Merge,我对git机械学有点困惑 我的工作有三个分支masterdevel和public。我使用master将我的Node.js应用程序部署到OpenShift(或heroku)中devel是我开发功能的地方,我使用public在GitHub上推送我的开源代码 每次我必须在OpenShift上部署我的应用程序时,我只是从devel合并到master,然后推送。 git也是如此,我将从devel添加到public 问题是:示例。我有一个文件,index.html,里面有一段用于私有谷歌分析的代码。或者例如

我对git机械学有点困惑

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

每次我必须在OpenShift上部署我的应用程序时,我只是从
devel
合并到
master
,然后推送。 git也是如此,我将从
devel
添加到
public

问题是:示例。我有一个文件,
index.html
,里面有一段用于私有谷歌分析的代码。或者例如,我需要一些文件,以便在
master
中部署,而不是在
public

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

我考虑了两种(非工作)策略:

1) Snippet\文件不存在于
devel
中,但存在于
master
-->i merge
devel
master
-->从master中删除Snippet\文件

以这种方式,我可以使用
public
(因为不包括私有代码段\文件),但我不可以使用
master

2) 如果我将
devel
->合并到
master
中,Snippet\files将出现在
devel
中,我可以在OpenShift上部署,因为包含Snippet\files

但是在
public
-->中合并
devel
现在
public
有了我的私人文件

Gitignore文件不能帮助我,因为它们在分支之间共享,如果我忽略我的私有文件,它们也将在我的
master
deploy中被忽略。即使如此,这也不能解决代码片段的问题

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


或者,我怎样才能改变我的分支策略来实现这一点呢?

我发现了一个知道如何做到这一点的网站。您可以对不同的分支使用
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\u中,不在公共视图中查看
,个人文件在
info/exclude


您可以在此处找到该网站:

您可以更改您的分支机构战略以实现这一目标。我假设你们所有的公共代码都应该出现在你们的主分支中

您可以有4个分支(而不是3个),例如
master、dev-master、public和devel

  • 您应该在
    devel
    分支上进行大部分开发(私人文件除外),并随时将其合并到
    dev master
    public
    。因为它没有任何私有文件,所以不会合并到
    public
    branch
  • 当您想要编写您的私有代码时,只需在开始编写您的私有代码之前将分支从
    devel
    切换到
    dev master
    ,然后在此处测试您的功能。一切正常后,将
    dev master
    合并到
    mater
    分支
使用此策略,您还可以使用/不使用私有文件测试代码,这将有助于维护代码库


我不确定这是否是最好的策略。我希望这对你有帮助

我很久以前在另一篇文章中发现了这种方法,但似乎不起作用(可能是版本问题,这篇文章的日期是2010年)。问题是,即使这项工作(无论如何都会很好)不能完全解决问题,因为我想更新index.html(而不是忽略它),只是让部分代码在合并时不受影响。但真的很感谢,谢谢:)你的分支机构战略非常好,我现在就转向你的建议!这实际上有助于更好地将代码库与生产部分分开。但我认为我找到了解决问题的方法,只是在使用git-rm和commit时犯了一个错误。我会在我的第一篇文章中更好地解释它(也许有人会有用)忘记了非常感谢你的建议,特别是我很高兴它帮助你决定了你的分公司战略。请将此答案标记为已接受:)我想我找到了解决方案。是git系统使用中的一个错误
devel
最初在部署
master
时使用了seme code\文件。现在,为clean
devel
branch删除这些信息,
master
中的mergin也会删除这些信息。解决方案(我知道这很愚蠢)是在
master
中重写文件和有用的代码片段。到目前为止,即使这些信息不再出现在
devel
中,即使从
devel
合并,master也将继续拥有它们。我是git新手,我有点困惑:)我只是觉得代码片段\文件总是会随着合并而被删除!