public void Github(GithubArgs args)
        {
            try
            {
                var userInfo              = new UserInfo(args.Username, args.Email, args.AccessToken);
                var sourceControl         = new GitSourceControlAsync(Logger, userInfo);
                var sourceControlProvider = new GithubProvider(Logger, sourceControl, args.Username, args.AccessToken);

                using (var stopwatch = new StopwatchHelper())
                {
                    var repos = new List <RepositoryInfo>();
                    using (var stopwatch2 = new StopwatchHelper())
                    {
                        repos.AddRange(sourceControlProvider.FetchRepositories(args.RepositoryMatchers)
                                       .ConfigureAwait(false)
                                       .GetAwaiter()
                                       .GetResult());

                        Logger.Information("Fetching repositories took {TotalMs}ms ({Min}:{Sec} mm:ss)",
                                           stopwatch2.Result.TotalMilliseconds, stopwatch2.Result.Minutes, stopwatch2.Result.Seconds);
                    }

                    sourceControlProvider.EnsureRepositoriesSync(repos,
                                                                 args.RepositoryPathTemplate,
                                                                 args.BranchMatchers)
                    .ConfigureAwait(false)
                    .GetAwaiter()
                    .GetResult();

                    Logger.Information("Done! Process took {TotalMs}ms ({Min}:{Sec} mm:ss)",
                                       stopwatch.Result.TotalMilliseconds, stopwatch.Result.Minutes, stopwatch.Result.Seconds);
                }
            }
            catch (Exception ex)
            {
                Logger.Error(ex, "There was an unhandled exception!");
                Console.ReadLine();
            }
        }