我有一个Eclipse RCP应用程序,该应用程序使用EGIT和JGIT来实现项目的版本控件。
在某些情况下,我想做到这一点,以便项目不再受版本控制。这意味着既删除了文件系统上的项目.git目录,又使我的应用程序意识到该项目不在版本控制下。
我试图浏览JGIT API以寻求解决方案,但找不到任何有用的东西。只需使用文件操作API删除.git目录是不够的,因为其中某些文件似乎已锁定(很可能由JGIT锁定)。
对不起,我不是100%确定的,因为您的情况对我来说还不够清楚,但是您说您的申请也基于EGIT,所以我认为您正在使用标准Eclipse API管理项目。如果是这种情况,您要寻找的是: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
https://git.eclipse.org/c/egit/egit.git.git/tree/org.eclipse.egit.ui/src/org/org/eclipse/egit/egit/egit/iinternal/internal/ternal/actions/disconnectaction handler.java
它使用了许多内部类EGIT,但最终使用了RepositoryProvider的API。
请注意,方法RepositoryProvider.unmap(project)
不会删除存储库,它只是断开项目。
我希望这会有所帮助!