不提交的情况下记录Tortoise SVN日志

3

我通常会对我的源代码进行多次小的编辑,但是由于这些更改相当微不足道,所以我不想立即提交。我目前使用的方法是将更改记录在文本文件中,然后在提交时将其复制到日志中。

在使用Tortoise SVN(或任何其他SVN工具)时,是否可以在我编辑时将日志消息附加到我当前正在使用的副本上,然后在提交时自动附加日志消息,以便我不必记住到目前为止所做的所有更改?


有趣的问题。我认为这是不可能的。但是可能会有一种解决方法,使用元属性和一个预提交钩子将它们转换为提交消息。 - Pekka
3个回答

1

当您提交失败时,tortoiseSVN会为您存储提交消息以便在重试时使用。找到该文件并追加内容是我的建议。

vanilla svn是commit.tmp,这可能是一个好的起点。

编辑:

编辑编辑:您正在使用tortoise,这意味着您需要在Windows上运行。因此,您可能需要使用适用于Windows的工具。我已经快速地用Python重新编写了它,因为我不擅长cmd脚本。

或者,创建一个名为logs的目录,将所有笔记存储在其中,然后为提交脚本执行以下操作:

for i in `ls logs`; do
    echo -n "$i: "
    cat logs/$i >> commitFile
done
svn commit -F commitFile

或者在Python中

#!/usr/bin/python
import os
dirlisting = os.listdir('logs')
commitFile = open("commitfile.tmp", "w")
for i in dirlisting:
    log = open(i, 'r')
    commitFile.write(log.read())
    log.close()
os.execlp("svn", "svn", "commit", "-F", "commitfile.tmp")

你需要修复最后一行,以便调用tortoise。不过我没有测试过这两个脚本。

显然,你可能想稍微整理一下并使其更加智能化,但你可以看到我的意图。


如果取消提交,TortoiseSVN历史记录中仍会保留日志消息,因此您无需执行提交操作。但我认为这并不能完全解决问题,因为每个历史记录项都需要合并。 - si618
我建议你可以把它用作存储笔记的地方。 - richo
请看我写的两个脚本。它们从名为logs的目录中提取消息。 - richo
好主意,但是这样会不会记录整个历史直到被清除?历史在提交后并没有被清除(除非你手动清除),我认为你只想保留从上次成功提交开始的历史记录。 - si618
在脚本中添加清除日志目录的代码,然后我猜呢?我真的没有时间或动力为他编写整个程序,但我很乐意提供一个可用的框架 :) 在这种情况下,他会想要使用os.system并检查返回值。 - richo
显示剩余4条评论

1

在提交之前使用差异工具并审查更改有什么问题吗?

如果您无法记住更改的原因或从代码中解决它们,那么这不是您需要更频繁地提交的线索吗?提交是便宜且快速的,如果更改在修订中逻辑相关,则在将来进行还原和合并会更加容易。


我会点赞并提交很多次。我会将相关的更改分组(并确保如果更改彼此依赖,则将它们包含在单个提交中!),但不认为有很多次提交会有问题。 - richo

0

有趣的问题。

这个答案可能与上下文无关,但如果您可以灵活地转向另一个版本控制系统,我建议您转向Git(允许您进行本地提交)。我并不是说SVN有什么不好,它很棒,只是根据使用情况,Git可能更适合您。


Mercurial(http://mercurial.selenic.com/)与Git类似。本地副本带有相关的消息。然后进行大规模推送,包括您所有的注释。 - Ben Jones
1
-1 我并不是想对 Git 说些什么,我确定它很棒,只是这个问题是关于 SVN 的。;-) - si618

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接