2017-04-19 49 views
3

有时我需要(为了使我的开发更快)在我的代码中编码一些东西。这可能是证书,或者可能只是一个黑客,让我测试某些功能。出于很多原因,我从来不想将这些代码推送到主代码库甚至开发分支。一段时间以来,我一直在使用'git-assume-unchaged'命令,但是在合并,rebase等可能混淆后,你可能会推动你不想要的东西。有没有一个很酷的干净方式来实现这一目标?也许有些命令提醒我必须记得在推送之前签出一些文件或类似的东西?有任何想法吗?Git推提醒/助手?

+0

为什么要把这种配置文件放到Git中? 他们应该在.gitignore,从不承诺。 替代方案: 您可以构建一个“模板”文件,其中包含您想永久提交的常见内容,但您希望在git不知道的文件中具有具体的env配置。 – Mik378

回答

4

在许多情况下(比如证书),我会建议考虑如何避免将这些 - 甚至是暂时的 - 放到源代码控制的文件中。 (这可能最终会以其他方式帮助你。)但是可能有些情况下临时代码是最直接的工作流程,所以...

一种解决方案是使用pre-commit钩子。您可以用注释标记临时代码(类似// xxxTEMPxxx,类似于C语言),然后拒绝任何可以在diff中找到标记的提交。请参阅.git/hooks/pre-commit.sample中的示例。

然后,您可以在工作,承诺或做任何事情时保持您的更改,但如果您更改了此变更,则系统会提醒您它已停用并可取消该更改。 (如果您正在使用同一个文件中的其他代码,则可以使用git add -p选择性地将您打算提交的更改分阶段执行,同时保留临时代码。)

当然,您的临时更改仍然存在为未跟踪更改,这可能妨碍某些操作;但在这种情况下,你可以把它们藏起来。至少比尝试使用assume-unchanged要好。

+0

我使用了一个类似的方法,除了我检查'pre-push'钩子中的tmp-marker(在我自己的repo中提交是可以的,但我不应该将tmp代码推送到远程)。 另外我定义了一个vim宏来插入tmp标记。这样,我可以肯定,我从不拼错tmp-marker,导致'pre-push'挂钩错过它。 – Alderath

+0

@Alderath - 避免拼写错误的好处。使用哪个钩子是我想要的偏好问题,但我更喜欢在它放入* any * repo之前捕获它,以便在结束之后我不必将分离提交和/或将好的更改分离出来。事实。 –

+0

@MarkAdelsberger'pre-commit hook'完全是我正在寻找的,一个简单的脚本来检查给定的标签!谢谢 –

0

如果你想看到你修改过的文件,你可以使用git gui。有了这个,你可以选择修改后的文件来推送。