Desidero ottenere alcune metriche su quali file nel mio repository sono attivi più di recente, utilizzando una misurazione che non richiede alcun calcolo dopo l'archiviazione. Quindi il numero di commit fa che è stato modificato l'ultima volta.Ottenere l'età di un file nei termini di commit in git
Quindi l'idea che ho è quindi:
file_list = subprocess.Popen(['git', 'ls-files'])
(files, _) = proc.communicate()
missing_ages = files
ages = {f: -1 for f in old_ages}
commits_proc = subprocess.Popen(['git', 'ref-list', '--all', '--pretty=format:""'])
(commits, _) = commits_proc.communicate()
age = 0
for commit_sha in [s.split(' ')[1] for s in commits]
commit_list = subprocess.Popen('some', 'git', 'command')
commit_files = commit_list.communicate()
for file in commit_files
if file in missing_ages
ages[file] = age
missing_ages.remove(file)
age += 1
Quello che serve è un comando git non porcellana per ottenere l'elenco dei file in un commit data la sua sha.
Non è l'intero albero di file a cui fa riferimento ogni commit Git? Avrai bisogno di diff commit adiacenti per determinare se un file è cambiato, –
Questo è vero, tuttavia c'è, per esempio 'git show --stat' che è in grado di elencare le modifiche dei file in un commit, ma non è stabile, e include anche informazioni extra che preferirei non analizzare out –
EdJoJob
'git show' fa semplicemente un diff del commit rispetto al suo genitore (s) (combinato diff se unione con più genitori). Devi fare la stessa cosa (forse facendo git farlo per te, ad esempio 'git diff-tree --name-status') per rilevare le modifiche. – torek