@Override
  protected void activate() {
    Disposable disposable = Disposer.newDisposable();
    // do not leak Project if 'deactivate' is never called
    Disposer.register(GitDisposable.getInstance(myProject), disposable);
    // workaround the race between 'activate' and 'deactivate'
    Disposable oldDisposable = myDisposable.getAndSet(disposable);
    if (oldDisposable != null) Disposer.dispose(oldDisposable);

    BackgroundTaskUtil.executeOnPooledThread(disposable, ()
      -> GitExecutableManager.getInstance().testGitExecutableVersionValid(myProject));

    myVFSListener = GitVFSListener.createInstance(this, disposable);
    // make sure to read the registry before opening commit dialog
    myProject.getService(VcsUserRegistry.class);

    GitAnnotationsListener.registerListener(myProject, disposable);
    GitAdvancedSettingsListener.registerListener(myProject, disposable);

    GitUserRegistry.getInstance(myProject).activate();
    GitBranchIncomingOutgoingManager.getInstance(myProject).activate();
  }
@Override
  protected void activate()