是否有一个工具可以在编码时自动保存文件的增量更改?

时间:2010-03-16 20:42:25

标签: ruby-on-rails ruby git

我最喜欢的Google文档功能之一是它在我工作时不断自动保存文档的版本。这意味着即使我在进行关键更改之前忘记保存在某个点,也很可能会自动创建保存点。至少,我可以将文档返回到错误更改之前的状态,并从那时起继续工作。

是否有一个工具具有在Mac OS(或UNIX)上运行的Ruby编码器的等效功能?

例如,一个工具将每隔几分钟自动Git签入我的本地存储库以获取我正在处理的文件。也许我是偏执狂,但这一点保险可以让我在日常工作中放心。

6 个答案:

答案 0 :(得分:5)

VIM

有些人可能讨厌我对此的回应,但我在编码时经常使用VIM并且它具有自动保存功能,尽管是自动保存到交换文件。它也是可扩展的,因此可以进行自动提交。

要了解VIM的可扩展性,请查看以下帖子:How can I script vim to run perltidy on a buffer?

答案 1 :(得分:3)

Netbeans IDE具有本地历史记录,默认情况下已启用。每次保存文件(ctrl-s)时,都会在文件的历史记录中添加一个条目。对于其他支持的VCS,您可以浏览历史记录,查看差异,然后恢复到以前的状态。

另外,Netbeans因对Ruby开发有很好的支持而闻名。

答案 2 :(得分:1)

RubyMine会在您键入时自动保存,并自动保存本地更改的历史记录。据我所知,它不会自动提交给Git,但它确实与Git集成。 RubyMine在Mac OS X上运行良好。

答案 3 :(得分:1)

如果你沿着这条“自动提出”的道路走下去,一定要把这样的历史留在当地。正如Russell Steen所述,自动检查点不属于任何类型的已发布广告分支。保留当地参考是好的,但除此之外它只是一个不适合出版的无耻混乱。

simple script that will ‘autocommit’ to an specified branch并不难。链接的脚本不是我使用的脚本,只是我找到的脚本。它有点难看,它强行改变分支,所以如果你手动做东西,你必须确保它不会运行。此外,它使用'瓷'Git命令,而不是坚持较低级别(但相应地,更接口稳定)'管道'命令。

您可能也有兴趣审核涵盖其中一些内容的recent thread on the Git mailing list

特别是,它引用了不会“窃取当前分支”的another script并更好地使用管道命令(但莫名其妙地,仍使用git add代替git ls-filesgit update-index)。

总而言之,编写一个脚本来做你想做的事并不是非常困难。做得对(使用管道,而不是在活动分支上踩踏(这在使用管道时很容易)等等)需要更多的努力,但是对于你将要学习的Git的一些内容是值得的。

您甚至可以使用the old shell implementation of git-commit作为起点(以及管道的一个很好的例子以及如何使用它)。

要定期获取一个检查点,只需在 crontab 中添加一个像这样的棒脚本。

答案 4 :(得分:0)

Vim :)但我使用的内容与kzh wrote的内容大不相同。

我不会为我的自动备份文件使用版本控制系统 想要查看~/vim_backup目录中所有文件的所有版本。 (注意: 当然我使用git来控制我的源文件,但现在我们是 谈论自动备份。)我的.vimrc中的以下几行 每次保存文件时,Vim都会创建一个备份文件。备份的名称 file是普通文件的名称加上当前日期和时间。

我的.vimrc文件中包含以下行:

if v:version >= 700
    " If I have a ~/vim_backup directory, let that be the backup          "
    " directory; otherwise do not back up.                                "
    " (Vim version earlier than 7.0 do not have the finddir function.)    "
    if finddir("~/vim_backup") != ""
        set bdir=~/vim_backup/
        set backup
    else
        set nobackup
    endif
endif

" We set the 'backupext' option to contain the current date and time, so  "
" that the name of the backup file will be the concatenation of the name  "
" of the normal file and the current date and time.                       "
function! HRefreshBackup()
    execute ":set backupext=" . strftime(".%y%m%d_%H%M")
    " You may want to have %H%M%S instead of %H%M if you want to have the "
    " possibility of having multiple backups in a minute.                 "
endfunction

" Refresh the backup file name before each "save"                         "
au BufWritePre * call HRefreshBackup()

我的~/vim_backup目录的示例:

$ ls -ltr ~/vim_backup | head                                  
total 105692                                                
-rwx--x--x 1 hcs hcs     252 2009-12-19 06:49 Sync_flash.091222_0902
-rwxr-xr-x 1 hcs hcs     819 2009-12-19 06:49 hk.091229_1637        
-rwxr-xr-x 1 hcs hcs     507 2009-12-19 06:49 FOLLOW_LINK.091220_0802
-rwx--x--x 1 hcs hcs     212 2009-12-19 06:49 Cut.091230_2113        
-rwxr-xr-x 1 hcs hcs  275320 2009-12-19 06:51 margitka.100116_1949   
-rw-r--r-- 1 hcs hcs      80 2009-12-19 06:51 localrc_dorsu.vim.100101_1112
-rwx--x--x 1 hcs hcs   10335 2009-12-19 06:51 Video.091222_1754            
-rwxr-xr-x 1 hcs hcs    1255 2009-12-19 06:51 Update.091222_1754           
-rwxr-xr-x 1 hcs hcs     716 2009-12-19 06:51 SshMaker.091222_1754  

这会浪费一些磁盘空间,因为存储了所有文件的所有版本 。因此,定期存档和压缩它们可能是值得的。我尝了几个 用于压缩备份文件集的工具,以及带有“-s”选项的“rar” 最好的。在过去三个月内创建了100兆字节的备份文件, 并且“rar -s”将其压缩为3 MB。

答案 5 :(得分:0)

我将Eclipse IDE用于多种语言以及所有没有GUI的项目。一个很好的奖励是本地历史记录以及将当前版本与任何先前版本进行比较的能力,要么完全用任何给定的先前版本替换当前版本,要么复制一些更改而忽略其他版本。

在Eclipse中使用Ruby看看这个 - http://www.ibm.com/developerworks/opensource/library/os-rubyeclipse/

相关问题