Base for iterating over git history
Great, glad you got rid of that loop: some more things I'd like to point out. As this is essentially another question now I'll add another answer


I don't think a function should call sys.exit(). I'd rather you raised an exception instead and call sys.exit() in __main__

I.e. instead of:

try:
    repo = git.Repo(args.path)
except:
    sys.exit("no such repo")


I would prefer:

from git import Repo, InvalidGitRepositoryError
#...

try:
    repo = git.Repo(args.path)
except InvalidGitRepositoryError, e:
    raise InvalidGitRepositoryError("%s is not a git repository" % (str(e)))


This enables other Python classes to use your main function (which is a terrible name) in a more predictable way (Python doesn't close calling your function).
I would also rather you check for the branch than assume if rev-list gives an error that the branch doesn't exist. There may be some other case that causes it to throw an exception.

class InvalidBranchError(Exception):
    pass

if args.branch not in repo.branches:
   raise InvalidBranchError("Branch does not exist: %s" % (args.branch))

Instead of main taking an arguments parser, I would prefer you used regular arguments (again so other python modules can use your code more readily):

def main(path=".", branch="master"):
   pass

main(path=args.path, branch=args.branch)