【问题标题】:How to exclude a particular commit from git merge (forever)如何从 git merge 中排除特定的提交(永远)
【发布时间】:2014-04-19 17:42:57
【问题描述】:

我正在开发一些网络应用程序(php、codeigniter)。今天推送到github的时间到了,但是遇到了一个我处理不了的问题。

我有 2 个分支:

  • master - 这个分支应该用于github推送,不包含凭据或任何其他敏感数据(只是公共代码)
  • dev - 这是主人的孩子,用于开发,确实包含凭据(我的私有应用程序实例)

我的凭据是指:数据库登录名、密码、主机、用户; oauth 服务 ID/秘密;加密密钥。凭据存储在 /application/config 文件夹中的 2 个单独文件中。

我的想法是我将在 dev 上进行所有更改,而不是将 dev 合并到 master,并将 master 内容拉到 github(但 master 不能包含我的私人凭据)。

这是我到目前为止所做的:

  1. 从 /application/config/config.php 和 /applications/config/database.php 中删除了所有凭据(因为我不希望它们在 github 上公开)它们变成了一个空字符串,例如: $db['default']['hostname'] = '';
  2. 已启动 git 存储库并进行了初始提交 - 创建的默认分支名为“master”
  3. 将master拉入github

到目前为止,它非常酷 - 我在 github 上获得了我的项目代码,其中没有凭据。接下来我需要对我的项目进行一些更改,所以我:

  1. 创建了新分支“dev”
  2. 将我的凭据存储到 dev 中,并进行提交 - 我需要 dev 实例来获得凭据,因为我每次更改代码中的某些内容时都将其上传到 ftp 服务器(我不使用本地 LAMP 或类似的东西在这个项目中)

所以现在我需要在 dev 中进行一些更改,上传并拉到 github,所以我:

  1. 对开发进行更改(比如说添加新功能)
  2. 结帐给大师
  3. 将 dev 合并到 master。

我预期会发生什么: Git 会问我应该在“master”中使用哪个版本的配置,因为它在两个分支中是不同的。我将使用 diff 来选择文件的“主”版本(不包含凭据)。 Git 会记住我的选择,以后我将 dev 合并到 master 时就不用再选择了。 Git 在我的其他一个项目中就是这样工作的,其中 dev 是一个主分支,实例是它的子分支(在这种情况下,dev 是一个子分支,我将子分支合并到父分支中)。

发生了什么: Git 只是将凭证从 dev 复制到 master,并没有问我这个问题。所以现在我的主分支被凭据“污染”了,我不能再把它推送到 github。

我的问题是:

  1. 为什么会发生这种情况,我该如何避免这种情况?
  2. 还有其他(更好的)方法来处理此类问题。

如果有任何不清楚的地方请告诉我,我们将不胜感激。

【问题讨论】:

    标签: php git codeigniter github


    【解决方案1】:

    如果你的 master 分支中的文件在你原来的分支到 dev 之后被更改,那么 Git 只会标记冲突,然后在 dev 中更改了相同的文件。

    我建议您为您的凭据添加一个 .gitignore 条目,或者使用 ENVIRONMENT 变量将它们分开,在 codeigniter 中这很容易,您所要做的就是在您的 apache 配置(如果您使用它们,则为虚拟主机)添加 @ 987654321@ 然后你可以在application/configs 中添加一个文件夹development,现在当你在开发环境中运行时,这些配置将优先于基本配置目录中的配置。

    这与 gitignoring 文件或删除提交无关,而是一个良好的文件结构和环境设置以区分不同的环境,您可以使用 developmentstagingproduction(其中是默认的)

    否则添加一个 .gitignore 行来告诉 git 忽略那些特定文件。

    【讨论】:

      【解决方案2】:

      Git ingore 会有所帮助。 阅读这篇博文以获得解决方案。

      http://blog.pagebakers.nl/2009/01/29/git-ignoring-changes-in-tracked-files/

      【讨论】:

        【解决方案3】:

        您可以包含配置文件中的凭据并将该文件添加到.gitignore

        配置文件可以包含开发、预生产和生产环境的设置。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2014-11-20
          • 2016-07-06
          • 2018-04-16
          • 2018-03-25
          • 2015-01-10
          • 1970-01-01
          • 2012-11-09
          • 2021-02-24
          相关资源
          最近更新 更多