我有一个Eclipse RCP应用程序,它使用EGit和JGit来实现项目的版本控制。
在某些情况下,我想这样做,以便项目不再受版本控制。这意味着删除文件系统上项目的.git目录,并使我的应用程序意识到项目不受版本控制。
我尝试通过JGit API查找解决方案,但找不到任何有用的东西。简单地使用文件操作API删除.git目录是不够的,因为其中的某些文件似乎被锁定(很可能是由JGit)。
答案 0 :(得分:2)
抱歉,我不是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;
}
}
作为参考,您可以检查上下文菜单的处理程序"断开连接",它完全符合您的要求:org.eclipse.egit.ui.internal.actions.DisconnectActionHandler
https://git.eclipse.org/c/egit/egit.git/tree/org.eclipse.egit.ui/src/org/eclipse/egit/ui/internal/actions/DisconnectActionHandler.java
它使用了很多内部类的egit,但最后它使用了RepositoryProvider的API。
请注意,方法RepositoryProvider.unmap(project)
不会删除存储库,只是断开项目。
我希望这有帮助!