public ObjectRepositoryCherryPick(IObjectRepository repository, ObjectId cherryPickCommitId,
                                          MigrationScaffolderFactory migrationScaffolderFactory, CherryPickProcessor.Factory cherryPickProcessorFactory)
        {
            Repository         = repository ?? throw new ArgumentNullException(nameof(repository));
            HeadCommitId       = repository.CommitId ?? throw new GitObjectDbException("Repository instance is not linked to any commit.");
            CherryPickCommitId = cherryPickCommitId ?? throw new ArgumentNullException(nameof(cherryPickCommitId));

            _migrationScaffolderFactory = migrationScaffolderFactory ?? throw new ArgumentNullException(nameof(migrationScaffolderFactory));
            _cherryPickProcessorFactory = cherryPickProcessorFactory ?? throw new ArgumentNullException(nameof(cherryPickProcessorFactory));

            Initialize();
        }
        public ObjectRepositoryRebase(IObjectRepository repository, ObjectId rebaseCommitId, string branchName,
                                      IObjectRepositoryLoader repositoryLoader, MigrationScaffolderFactory migrationScaffolderFactory,
                                      RebaseProcessor.Factory rebaseProcessorFactory)
        {
            Repository     = repository ?? throw new ArgumentNullException(nameof(repository));
            HeadCommitId   = repository.CommitId ?? throw new GitObjectDbException("Repository instance is not linked to any commit.");
            RebaseCommitId = rebaseCommitId ?? throw new ArgumentNullException(nameof(rebaseCommitId));
            BranchName     = branchName ?? throw new ArgumentNullException(nameof(branchName));

            _repositoryLoader           = repositoryLoader ?? throw new ArgumentNullException(nameof(repositoryLoader));
            _migrationScaffolderFactory = migrationScaffolderFactory ?? throw new ArgumentNullException(nameof(migrationScaffolderFactory));
            _rebaseProcessorFactory     = rebaseProcessorFactory ?? throw new ArgumentNullException(nameof(rebaseProcessorFactory));

            Initialize();
        }
        public ObjectRepositoryMerge(IObjectRepository repository, ObjectId mergeCommitId, string branchName,
                                     MigrationScaffolderFactory migrationScaffolderFactory, MergeProcessor.Factory mergeProcessorFactory,
                                     ObjectRepositorySerializerFactory serializerFactory)
        {
            if (serializerFactory == null)
            {
                throw new ArgumentNullException(nameof(serializerFactory));
            }

            Repository    = repository ?? throw new ArgumentNullException(nameof(repository));
            HeadCommitId  = repository.CommitId ?? throw new GitObjectDbException("Repository instance is not linked to any commit.");
            MergeCommitId = mergeCommitId ?? throw new ArgumentNullException(nameof(mergeCommitId));
            BranchName    = branchName ?? throw new ArgumentNullException(nameof(branchName));

            _migrationScaffolderFactory = migrationScaffolderFactory ?? throw new ArgumentNullException(nameof(migrationScaffolderFactory));
            _mergeProcessorFactory      = mergeProcessorFactory ?? throw new ArgumentNullException(nameof(mergeProcessorFactory));
            Serializer = serializerFactory(new ModelObjectSerializationContext(Repository.Container));

            Initialize();
        }