Eclipse plugin 从Eclipose RCP项目中删除版本控制

Eclipse plugin 从Eclipose RCP项目中删除版本控制,eclipse-plugin,eclipse-rcp,egit,jgit,Eclipse Plugin,Eclipse Rcp,Egit,Jgit,我有一个EclipseRCP应用程序,它使用EGit和JGit实现项目的版本控制 在某些情况下,我希望使项目不再受版本控制。这意味着删除文件系统上项目的.git目录,并使我的应用程序知道项目不受版本控制 我试图通过jgitapi寻找解决方案,但找不到任何有用的东西。仅仅使用文件操作API删除.git目录是不够的,因为其中的一些文件似乎被锁定(很可能是JGit锁定的)。对不起,我不是100%确定,因为我对您的场景不够清楚,但是您说您的应用程序也基于EGit,因此,我假设您正在使用标准的Eclips

我有一个EclipseRCP应用程序,它使用EGit和JGit实现项目的版本控制

在某些情况下,我希望使项目不再受版本控制。这意味着删除文件系统上项目的.git目录,并使我的应用程序知道项目不受版本控制


我试图通过jgitapi寻找解决方案,但找不到任何有用的东西。仅仅使用文件操作API删除.git目录是不够的,因为其中的一些文件似乎被锁定(很可能是JGit锁定的)。

对不起,我不是100%确定,因为我对您的场景不够清楚,但是您说您的应用程序也基于EGit,因此,我假设您正在使用标准的EclipseAPI来管理项目。如果是这种情况,您需要的是:
org.eclipse.team.core.RepositoryProvider

这是一个例子:

public class UntrackProject extends AbstractHandler implements IHandler {

    @Override
    public Object execute(ExecutionEvent event) throws ExecutionException {

        IProject project = getProject(); // get the project, for example using the selection service

        try {
            RepositoryProvider.unmap(project);

            //TODO Refresh your viewer to show changes

        } catch (TeamException e) {
            // TODO Auto-generated catch block
            e.printStackTrace();
        }

        return null;
    }

}
作为参考,您可以检查上下文菜单“Disconnect”的处理程序,该处理程序正是您要查找的:
org.eclipse.egit.ui.internal.actions.DisconnectActionHandler

它使用了大量的egit内部类,但最终使用了RepositoryProvider的API

请注意,方法
RepositoryProvider.unmap(project)
不会删除存储库,它只是断开项目的连接


我希望这有帮助

谢谢你的提示-我不知道unmap(project)方法。但是,调用此方法似乎不会释放.git目录上的文件系统锁。因此,仍然无法从我的应用程序中以编程方式删除此目录。我应该补充一点,如果未删除.git目录,EGit在重新启动应用程序后仍会将项目视为处于版本控制之下。这听起来有点奇怪。我想知道是什么锁定了.git目录!