Ich wollte Git Commit-Informationen im CSV-Format erhalten Mit der Option --pretty = format von git log konnte ich es nicht in das gewünschte Format bringen, also gebe ich das Protokoll einmal aus und formatiere es dann.
OS Mac Catalina Pycharm CE python 3.7
Eine Protokolldatei wird ausgegeben, wenn Sie sie mit einer Konsole wie GitBash aufrufen.
--date-order --date=format:'%Y/%m/%d %H:%M:%S' > git.log```
##### Erwartete Erfassung des Git-Protokolls
#### **` git.log`**
```log
commit f36da445d06d2db7b4f08a508be835f5464ded
Author: nomori<[email protected]>
Date: 2020/10/10 23:50:29
first commit.
A .gitignore
A perse_git_log.py
perse_git_log.py
import re
import csv
import os
COMMIT_ID = 'commit '
STATUS_ADD = 'A '
STATUS_MOD = 'M '
STATUS_DEL = 'D '
GIT_AUTHOR = 'Author: '
GIT_DATE = 'Date: '
path = './input/git.log'
#Git-Protokolldatei lesen.
array_commit_info = []
with open(path) as git_log_file:
data = git_log_file.readlines()
for item in data:
#Entfernen Sie den Zeilenvorschubcode am Ende.
item = item.replace('\n', '')
if COMMIT_ID in item:
#Holen Sie sich die Hash-ID des Commits.
commit_id = item.replace(COMMIT_ID, '')
elif GIT_AUTHOR in item:
#Erhalten Sie festgeschriebene Benutzerinformationen.
author_tmp = item.replace(GIT_AUTHOR, '')
#Löschen Sie den Teil der E-Mail-Adresse.
author = re.sub(' +<.*>', '', author_tmp)
elif GIT_DATE in item:
#Datum und Uhrzeit des Commits abrufen.
date = item.replace(GIT_DATE, '')
else:
#Abrufen des Änderungsverlaufs.
file_status = item[0:2]
if file_status == STATUS_ADD or file_status == STATUS_MOD or file_status == STATUS_DEL:
#Dateinamen ohne Git-Status abrufen.
file_name = item[2:]
#Halten Sie Informationen in einem Array für die Ausgabe.
array_commit_info.append([commit_id, author, date, file_name])
print(array_commit_info)
#Ausgabe im CSV-Format.
file_path = './output/'
if not os.path.exists(file_path):
os.mkdir(file_path)
output_filename = file_path + 'git_output.csv'
with open(output_filename, 'w') as f:
writer = csv.writer(f)
#Header-Informationen ausgeben.
writer.writerow(['COMMIT_ID', 'AUTHOR', 'DATE', 'COMMIT_FILE_NAME'])
for line_data in array_commit_info:
#Commit-Informationen ausgeben.
writer.writerow(line_data)
git_output.csv
f36da445d06d2db7b4f08a508be835f5464ded,nomori,2020/10/10 23:50:29,.gitignore
f36da445d06d2db7b4f08a508be835f5464ded,nomori,2020/10/10 23:50:29,perse_git_log.py