static GitAutoVersion CalculateVersion(GitAutoVersion baseVersion, GitAutoVersionGitSubData data, Config config)
            {
                var branch = data.GitBranch;

                if (config.Branches.ContainsKey(branch))
                {
                    var configBranch      = config.Branches[branch];
                    var firstParentNumber = GitTool.GetCommitNumberCurrentBranchFirstParent(configBranch.ParentSha);
                    var sem           = SemVersion.Parse(configBranch.Version);
                    var patchNewValue = sem.Patch + firstParentNumber - 1;
                    var pathNewValue2 = patchNewValue < 0 ? 0 : patchNewValue;
                    var simple        = new GitAutoVersionSimple(sem.Major, sem.Minor,
                                                                 pathNewValue2,
                                                                 baseVersion.Special, baseVersion.BuildCounter, baseVersion.DateTime, baseVersion.Env);
                    return(new GitAutoVersion(data, simple));
                }
                else
                {
                    var firstParentNumber = data.GitCommitsCurrentBranchFirstParent;
                    var simple            = new GitAutoVersionSimple(baseVersion.Major, baseVersion.Minor,
                                                                     firstParentNumber, baseVersion.Special, baseVersion.BuildCounter, baseVersion.DateTime,
                                                                     baseVersion.Env);

                    return(new GitAutoVersion(data, simple));
                }
            }
            static GitAutoVersion GetBaseGitAutoVersion(string special, int buildCounter, DateTime dateTime, string env)
            {
                var data        = GitTool.GetAllGitData();
                var simple      = new GitAutoVersionSimple(0, 0, 0, special, buildCounter, dateTime, env);
                var baseVersion = new GitAutoVersion(data, simple);

                return(baseVersion);
            }
            public static GitAutoVersion CreateInternal(int buildCounter, DateTime dateTime)
            {
                var config      = Read();
                var data        = GitTool.GetAllGitData();
                var baseVersion = GetBaseGitAutoVersion("", buildCounter, dateTime, _env);
                var ver         = CalculateVersion(baseVersion, data, config);

                return(ver);
            }
            public static GitAutoVersion CreateLegacyInternal(int major, int minor, int buildCounter, DateTime date)
            {
                var simple = new GitAutoVersionSimple(major,
                                                      minor,
                                                      buildCounter,
                                                      "", buildCounter, date, _env);

                var data = GitTool.GetAllGitData();

                return(new GitAutoVersion(data, simple));
            }