Je voulais obtenir des informations de commit git au format csv Avec l'option --pretty = format de git log, je ne pouvais pas l'obtenir dans le format que je voulais, donc j'ai sorti le journal une fois, puis le formater.
OS Mac Catalina Pycharm CE python 3.7
Un fichier journal est généré lorsque vous le frappez avec une console telle que GitBash.
--date-order --date=format:'%Y/%m/%d %H:%M:%S' > git.log```
##### Journal git attendu à capturer
#### **` 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'
#Lire le fichier journal git.
array_commit_info = []
with open(path) as git_log_file:
data = git_log_file.readlines()
for item in data:
#Supprimer le code de saut de ligne à la fin.
item = item.replace('\n', '')
if COMMIT_ID in item:
#Obtenez l'ID de hachage du commit.
commit_id = item.replace(COMMIT_ID, '')
elif GIT_AUTHOR in item:
#Obtenez des informations utilisateur engagées.
author_tmp = item.replace(GIT_AUTHOR, '')
#Supprimer la partie adresse e-mail.
author = re.sub(' +<.*>', '', author_tmp)
elif GIT_DATE in item:
#Obtenir la date et l'heure de validation.
date = item.replace(GIT_DATE, '')
else:
#Obtenir l'historique des modifications de fichiers.
file_status = item[0:2]
if file_status == STATUS_ADD or file_status == STATUS_MOD or file_status == STATUS_DEL:
#Obtenir le nom du fichier sans le statut Git.
file_name = item[2:]
#Conserver les informations dans un tableau pour la sortie.
array_commit_info.append([commit_id, author, date, file_name])
print(array_commit_info)
#Sortie au format CSV.
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)
#Informations d'en-tête de sortie.
writer.writerow(['COMMIT_ID', 'AUTHOR', 'DATE', 'COMMIT_FILE_NAME'])
for line_data in array_commit_info:
#Sortie des informations de validation.
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
--Lecture et écriture (création / ajout) de fichiers avec Python https://note.nkmk.me/python-file-io-open-with/ --Maître de manipulation de chaînes en python https://qiita.com/tomotaka_ito/items/594ee1396cf982ba9887 --Supprimer une partie de la chaîne en Python (bande, etc.) https://note.nkmk.me/python-str-remove-strip/