code: def initialize(
      plugins,
      exclude_files_regex=None,
      exclude_lines_regex=None,
      path='.',
      scan_all_files=False,
  ):
      
      output = SecretsCollection(
          plugins,
          exclude_files=exclude_files_regex,
          exclude_lines=exclude_lines_regex,
      )
  
      if os.path.isfile(path):
          # This option allows for much easier adhoc usage.
          files_to_scan = [path]
      elif scan_all_files:
          files_to_scan = _get_files_recursively(path)
      else:
          files_to_scan = _get_git_tracked_files(path)
  
      if not files_to_scan:
          return output
  
      if exclude_files_regex:
          exclude_files_regex = re.compile(exclude_files_regex, re.IGNORECASE)
          files_to_scan = filter(
              lambda file: (
                  not exclude_files_regex.search(file)
              ),
              files_to_scan,
          )
  
      for file in files_to_scan:
          output.scan_file(file)
  
      return output
docs: Scans the entire codebase for secrets, and returns a
      SecretsCollection object.
  
      :type plugins: tuple of detect_secrets.plugins.base.BasePlugin
      :param plugins: rules to initialize the SecretsCollection with.
  
      :type exclude_files_regex: str|None
      :type exclude_lines_regex: str|None
      :type path: str
      :type scan_all_files: bool
  
      :rtype: SecretsCollection