Удалить контроль версий из проекта Eclipose RCP

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

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

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


person Epicurus    schedule 16.06.2016    source источник


Ответы (1)


Извините, я не уверен на 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) НЕ удаляет репозиторий, он просто отключает проект.

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

person Lorenzo Murrocu    schedule 17.06.2016
comment
Спасибо за подсказку - я не знал о методе unmap(project). Однако похоже, что вызов этого метода не снимает блокировку файловой системы в каталоге .git. Таким образом, программно удалить этот каталог из моего приложения по-прежнему невозможно. - person Epicurus; 20.06.2016
comment
Я должен добавить, что если каталог .git не удален, EGit по-прежнему видит проект как находящийся под контролем версий после перезапуска приложения. - person Epicurus; 20.06.2016
comment
Это звучит немного странно. Интересно, что блокирует каталог .git! - person Lorenzo Murrocu; 20.06.2016