I have a project with nearly 200 active repositories. I have been tasked with pulling the full commit history for all repositories. The resulting file will be audited by an accounting team. At minimum the information they are requesting is repository name, commit date, commit message, and person responsible but have stated that more information is better.
Hello! You can do this by running the git log command with custom parameters. To run it for all your repos you'll have to write a script to go through each folder and run this command:
git log --branches --tags --remotes --full-history --date-order --format='%ai %an <%ae> %h %f'
Note the --format part: this allows you to specify a custom output format for the log:
--format='%ai %an <%ae> %h %f'
%ai: author date
%an: author name
%ae: author email
%h: commit hash (small)
%f: commit subject (sanitized)
Yeah, you can use the %d as part of the format string (it will add refs when it encounters a commit that has one), but be aware that each commit will not have the branch it is part of marked with the name.
This is because git doesn't actually know which commit a branch belongs to. It's confusing, but think of branches as a chain of commits where the name of the branch is just a pointer to the latest commit in the chain. So in order to figure out which commit is in a branch you'll need to "walk" all commits from your starting commit until you reach the latest commit which is the branch pointer reference.