在维护实时系统时,我发现有时需要对文件进行临时临时更改 - 更改日志记录级别,向脚本添加跟踪选项等。
当我这样做时,我发现未提交更改和未合并分支的半自动机制通常会出现误报:
通常情况下,所有这些都需要找到尚未合并的更改,但这也意味着每个“隐藏”临时更改的方式也会被阻止。
请注意,我不想--assume-unchanged,因为同一个文件通常会包含临时更改(我不想提醒)和永久更改(我这样做),并查看Handling temporary changes (not to be committed) in Git没有提出满足所有这些要求的建议。
使用Mercurial,我会考虑使用Mercurial Queues来接近我想要的地方。我会用我的临时更改创建一个补丁,然后如果我的分析实用程序找到一个补丁队列,它会弹出它们,执行分析然后再推回它们。这样可以有效地仅删除临时更改,仅对我认为不是暂时的更改执行分析,然后重新应用这些更改。
更改工作目录的任何方法的问题在于这会影响实时系统的行为 - 例如,我们的日志记录系统每10秒左右检查一次日志记录配置的更新。
那么,我怎样才能最好地指出git某些变化是暂时的,不应该被提交和/或合并,而其他变化应该呢?
答案 0 :(得分:2)
对于每个文件,您可以设置一个干净的脚本,该脚本将在最初检出时恢复这些文件的原始内容。
该脚本可以简单地执行git checkout -- afile
,以便将其内容恢复为HEAD(丢弃任何本地更改)。
使用content filter driver通过 .gitattributes
declaration 自动恢复通过该脚本恢复文件。
(来自"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是你的仆人。你决定了什么意思。提交您的更改并使用Git分发这些知识,以便它们对您提交序列[s]和边界最有用。在“无关紧要的变更”提交中保持微不足道的变化,或者有一个“无关紧要的变化”分支,或者任何最佳的变化。教你的检查员识别无关紧要的变更提交。
从你在这里给出的一个普通的“本地”分支和一个专门用于配置更改的提示应该这样做,当你进行“重大”更改,提交并使用交互式或自动刷新rebase来记录后面的变化小费。告诉你的检查员忽略当地分支机构的任何内容;更新本地配置,更改它和git commit --amend --no-edit
它,或者如果你单独提交它,然后用交互式rebase或等同于git reset --soft @~
压缩它并执行--amend --no-edit commit你打算这样做。没有必要使用特殊设施,您可以获得完整的工具包,无论您正在做什么工作。如果有被认为特别有意义的提交,请将它们保留在具有该特定含义的提交中。
答案 2 :(得分:1)
在黑暗中拍摄几张照片,尝试在你的终极目标/用例之间阅读。这取决于您在系统或半自动化" repo health"中的确切能力/愿意改变的内容。你有系统。
修改系统,以便您需要更改的配置项同时具有" master / default"配置文件和未跟踪的本地/用户配置文件。用户配置中的任何设置都会覆盖默认值。
使用特殊分支名称/扩展名,或使用特殊标记来捕获临时设置提交,并更新您的" repo health"脚本忽略那些分支/标签(或让它警告你,而不是强迫某些东西?)。
tmp
分支,然后标记它们(再次,可能有一些特殊的命名约定)。