我应该如何向git表明变更是暂时的,不应该提交?

时间:2016-03-16 12:23:58

标签: git workflow

在维护实时系统时,我发现有时需要对文件进行临时临时更改 - 更改日志记录级别,向脚本添加跟踪选项等。

当我这样做时,我发现未提交更改和未合并分支的半自动机制通常会出现误报:

  • 如果我保留未提交的更改,或者只是暂停,那么我的检查程序脚本会将仓库标记为脏。
  • 如果我将它们作为“临时更改提交”提交,则会将其标记为“远程分支之前的更改”
  • 如果我在没有遥控器的新分支上提交它们,它们会被标记为“没有遥控器的分支”。

通常情况下,所有这些都需要找到尚未合并的更改,但这也意味着每个“隐藏”临时更改的方式也会被阻止。

请注意,我不想--assume-unchanged,因为同一个文件通常会包含临时更改(我不想提醒)和永久更改(我这样做),并查看Handling temporary changes (not to be committed) in Git没有提出满足所有这些要求的建议。

使用Mercurial,我会考虑使用Mercurial Queues来接近我想要的地方。我会用我的临时更改创建一个补丁,然后如果我的分析实用程序找到一个补丁队列,它会弹出它们,执行分析然后再推回它们。这样可以有效地仅删除临时更改,仅对我认为不是暂时的更改执行分析,然后重新应用这些更改。

更改工作目录的任何方法的问题在于这会影响实时系统的行为 - 例如,我们的日志记录系统每10秒左右检查一次日志记录配置的更新。

那么,我怎样才能最好地指出git某些变化是暂时的,不应该被提交和/或合并,而其他变化应该呢?

3 个答案:

答案 0 :(得分:2)

对于每个文件,您可以设置一个干净的脚本,该脚本将在最初检出时恢复这些文件的原始内容。
该脚本可以简单地执行git checkout -- afile,以便将其内容恢复为HEAD(丢弃任何本地更改)。

使用content filter driver通过 .gitattributes declaration 自动恢复通过该脚本恢复文件。

https://i.stack.imgur.com/tumAc.png
(来自"Customizing Git - Git Attributes"的图片来自“Pro Git book”))

在本地git配置中声明该内容文件管理器驱动程序后,它将自动在git commit上恢复该文件。
或者它会在git diff / git status上将文件视为未更改。

请参阅“Best practice - Git + Build automation - Keeping configs separate”中的完整示例。

答案 1 :(得分:2)

  

同一个文件通常包含临时更改(我不想提醒)和永久更改(我这样做)

  
      
  • 如果我将[临时更改]作为“临时更改提交”提交,则会将其标记为“远程分支之前的更改”
  •   
  • 如果我在没有遥控器的新分支上提交它们,它们会被标记为“没有遥控器的分支”。
  •   
  

如果我使用mercurial进行此操作,我会使用Mercurial Queues将无关紧要的更改放入补丁中,然后在分析之前将其弹出,然后再将其推回。

Git是你的仆人。你决定了什么意思。提交您的更改并使用Gi​​t分发这些知识,以便它们对您提交序列[s]和边界最有用。在“无关紧要的变更”提交中保持微不足道的变化,或者有一个“无关紧要的变化”分支,或者任何最佳的变化。教你的检查员识别无关紧要的变更提交。

从你在这里给出的一个普通的“本地”分支和一个专门用于配置更改的提示应该这样做,当你进行“重大”更改,提交并使用交互式或自动刷新rebase来记录后面的变化小费。告诉你的检查员忽略当地分支机构的任何内容;更新本地配置,更改它和git commit --amend --no-edit它,或者如果你单独提交它,然后用交互式rebase或等同于git reset --soft @~压缩它并执行--amend --no-edit commit你打算这样做。没有必要使用特殊设施,您可以获得完整的工具包,无论您正在做什么工作。如果有被认为特别有意义的提交,请将它们保留在具有该特定含义的提交中。

答案 2 :(得分:1)

在黑暗中拍摄几张照片,尝试在你的终极目标/用例之间阅读。这取决于您在系统或半自动化" repo health"中的确切能力/愿意改变的内容。你有系统。

  1. 修改系统,以便您需要更改的配置项同时具有" master / default"配置文件和未跟踪的本地/用户配置文件。用户配置中的任何设置都会覆盖默认值。

    • 优势:您可以更新您的" repo health"用于警告现有临时设置(无需采取行动)的脚本,无论是一直或在一定时间后等等。
    • 优势:无需在Git中做任何事情。
    • 缺点:不跟踪这些设置随时间的变化情况。
  2. 使用特殊分支名称/扩展名,或使用特殊标记来捕获临时设置提交,并更新您的" repo health"脚本忽略那些分支/标签(或让它警告你,而不是强迫某些东西?)。

    • 示例 - 使用特殊内容命名捕获这些分支的分支(始终以&#34开始; tempsetting - ",以" .tmp"等结束),或者使用tmp分支,然后标记它们(再次,可能有一些特殊的命名约定)。
    • 优势:如果需要,您的临时设置将在回购中捕获
    • 缺点:此处有更多工作 - 需要主动管理的不仅仅是配置文件或用户设置等。