【问题标题】:Only push some changes to remote仅将一些更改推送到远程
【发布时间】:2018-10-10 16:38:39
【问题描述】:

我正在本地开发一个代码库,我必须进行大量配置更改才能在本地机器上运行。

基本上,我正在修复这个应用程序的零碎部分,并将修复上传到远程分支,在那里它们被审查并推送到主开发分支。

我需要在本地更改我的配置以使应用程序运行,但不想将它们包含在对远程分支的任何推送中。

有没有一种好方法可以将我的配置更改保存在本地(可能在本地分支中)但在推送其他修复时不上传它们?

【问题讨论】:

标签: git


【解决方案1】:

处理特定于环境的参数有多种策略。最好的解决方案包括修改构建过程,以便“本地”配置文件不存储在源代码管理中。

例如,您可以为配置文件存储一个模板,并让您的构建过程读取一个属性文件以确定要插入到模板中的最终值。共享环境(prod、qa、dev)的值可以存储在构建服务器和/或与模板分开的源代码控制中。您的本地值将在您维护的属性文件中,尽管为此目的的“默认”文件当然可以保存在源代码管理中(目的是您复制和修改它,以避免意外将您的本地更改发布到默认文件)。

如果您无法实施这种更改?嗯,人们总是想出基于存储的解决方案,或者索引中的修改标志(跳过工作树,假设不变)。我通常建议不要使用这些,因为它们都存在“有时可能会起作用”的缺点。但如果无法解决这个构建问题,那可能是你能做的最好的事情了。

【讨论】:

  • 最好的答案可能是不存在需要同时对文件进行版本控制而不是版本控制的情况 +1。每当我看到这类问题时,首先想到的就是这个。
【解决方案2】:

git stash 可能在这里工作得很好。在给定的分支中,您可以对必要的文件进行配置更改,进行测试,然后git stash 您的工作。这将擦除您的工作目录和阶段,但稍后您可以在想要恢复这些配置更改时应用存储。

您可能想要命名存储,以便稍后可以轻松引用它:

git stash save "testing configuration"
git stash apply stash^{/testing}

如果您希望配置中涉及的代码随着时间的推移发生巨大变化,那么这种方法不会很好地工作。在这种情况下,应用您的存储会产生许多冲突,或者只是不会给您留下可用的代码。您可以通过在每次应用时刷新存储来部分缓解此问题。

【讨论】:

    【解决方案3】:

    您可以只提交对您修改的文件的更改。或者你可以使用 .gitignore 文件:https://help.github.com/articles/ignoring-files/

    【讨论】:

    • .gitignore 将无助于更改已在 repo 中的文件
    • @MarkAdelsberger 我发布了一个答案,我也在等待我的反对票。是的,我要求它:-)
    • @TimBiegeleisen - 你的态度问题就是你的问题。你的回答至少有一个好处是没有事实错误
    • @MarkAdelsberger 只是开玩笑的兄弟。
    猜你喜欢
    • 2020-06-15
    • 2011-06-09
    • 1970-01-01
    • 1970-01-01
    • 2020-04-21
    • 1970-01-01
    • 2014-07-29
    • 2011-12-23
    • 1970-01-01
    相关资源
    最近更新 更多