2016-06-16 3 views
2

У меня есть приложение RCP Eclipse, которое использует EGit и JGit для реализации контроля версий проектов.Удалить контроль версий из проекта Eclipose RCP

В некоторых случаях я хочу сделать так, чтобы проект больше не контролировался версией. Это подразумевает как удаление каталога проекта .git в файловой системе, так и подтверждение моего приложения о том, что проект не находится под управлением версиями.

Я пробовал просматривать API JGit для решения этой проблемы, но не нашел ничего полезного. Простое удаление каталога .git с помощью API обработки файлов недостаточно, так как некоторые файлы в нем, похоже, заблокированы (очень вероятно, JGit).

ответ

2

Извините, я не уверен на 100%, потому что ваш сценарий для меня недостаточно ясен, однако вы сказали, что ваше приложение также основано на EGit, поэтому я предполагаю, что вы используете стандартные API eclipse для управления проектами , Если это так, то, что вы ищете: 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, но в конце концов он использует API в RepositoryProvider в.

Обратите внимание, что метод RepositoryProvider.unmap(project) НЕ удаляет репозиторий, он просто отключает проект.

Надеюсь, это поможет!

+1

Благодарим за подсказку - я не знал о методе unmap (project). Однако похоже, что вызов этого метода не освобождает блокировку файловой системы в каталоге .git. Таким образом, по-прежнему невозможно удалить этот каталог программно из моего приложения. – Epicurus

+1

Я должен добавить, что если каталог .git не удаляется, EGit все еще видит, что проект находится под контролем версий после перезапуска приложения. – Epicurus

+0

Это звучит немного странно. Интересно, что блокирует каталог .git! –