自动SVN同步Eclipse

时间:2011-07-14 13:09:31

标签: java eclipse subclipse

我是从SVN开始的。有没有办法配置subclipse自动与repo同步,以便知道文件何时被尽快修改?

5 个答案:

答案 0 :(得分:5)

如果是Subversive(我相信,在Subclipse的情况下也应该提供相同的选项),Synchronize视图允许自动同步。

使用某些项目的上下文菜单中的Team / Synchronize初始化同步,或打开Team Synchronizing透视图,然后使用Synchronize视图的Synchronize按钮选择同步项目集(该按钮是该按钮的第一个按钮)查看工具栏)。

然后执行同步,并在那里显示更改。此时,您可以从视图菜单中选择Schedule ...选项(Synchronize视图右上角附近的向下三角形图标),然后您可以设置同步。

AFAIK此同步不会自动更新您的工作区(这是一个好主意,例如必须手动进行冲突解决),但至少您可以在需要时查看更改。

答案 1 :(得分:3)

真的不想这样做。与存储库同步是一项繁重的操作,有很多副作用。例如,您可以立即更改存储库中正在更改的文件。您不希望在工作时与您和其他人的更改不匹配。您希望工作,然后一起更新所有文件并解决冲突(如果有)

答案 2 :(得分:2)

在上下文菜单中(右键单击项目),应该有一个选项“Team>与存储库同步”。

我确实发现this tutorial很有用。

答案 3 :(得分:2)

据我所知,subclipse没有提供这样的选项。您可以编写一个使用SVN命令行工具定期执行更新的cron作业,但我不建议这样做。您无法自动与SVN同步,因为更新可能会导致无法自动合并的冲突。

答案 4 :(得分:0)

虽然我同意在某些情况下拥有自动提交功能可能是一个坏主意,但可能有一些原因导致您无论如何都希望拥有此选项。

我创建了一个小的EASE脚本,取代了我的常规保存键绑定(ctrl + s)。它首先保存文件,尝试更新文件(如果可能还会自动合并版本,或者在脚本终止的情况下产生冲突)并最后提交文件。

// ********************************************************************************
// name                 : SaveUpdateCommit
// keyboard             : CTRL+S
// toolbar              : PHP Explorer
// script-type          : JavaScript
// description          : Save a file, update from the repository and commit automatically
// ********************************************************************************

var UI = loadModule("/System/UI");


UI.executeUI(function(){
var editor = UI.getActiveEditor();
editor.doSave(null);

var site = editor.getSite();
var commandService = site.getService(org.eclipse.ui.commands.ICommandService);
var handlerService = site.getService(org.eclipse.ui.handlers.IHandlerService);

var subclipse = org.tigris.subversion.subclipse.core.SVNProviderPlugin.getPlugin();

try
{
var file = editor.getEditorInput().getFile();
}
catch(e)
{
    return;
}
var filePath = file.getFullPath();
var project = file.getProject();
var projectPath = project.getWorkingLocation(subclipse.toString());
var workspace = project.getWorkspace();

var localFile = org.tigris.subversion.subclipse.core.resources.SVNWorkspaceRoot.getSVNFileFor(file);
localFile.refreshStatus();
if(localFile.isDirty()){
    var remoteFile = localFile.getBaseResource();

    var empty = java.lang.reflect.Array.newInstance(org.eclipse.core.resources.IResource, 0);
    var commitFiles = java.lang.reflect.Array.newInstance(org.eclipse.core.resources.IResource, 1); 
    commitFiles[0] = remoteFile.getResource();

    var update = new org.tigris.subversion.subclipse.ui.operations.UpdateOperation(editor, remoteFile.getResource(), org.tigris.subversion.svnclientadapter.SVNRevision.HEAD);
    update.run(null);

    var commit = new org.tigris.subversion.subclipse.ui.operations.CommitOperation(editor, empty, empty, empty, commitFiles, "AutoCommit", false);
    commit.run(null);
}

为此,您需要安装Eclipse EASE(http://download.eclipse.org/ease/update/release)并通过设置使此脚本可用。此外,脚本需要UI访问,同样需要在设置中配置。

因此,根据您的需求,您可能希望将此行为更改为频繁更新。我从未在日食中玩过计时器,但我想这是可能的。