Πώς μπορώ γράφημα τις γραμμές της ιστορίας κώδικα για το git repo;

ψήφοι
40

Βασικά θέλω να πάρω τον αριθμό των γραμμών-of-κώδικα στο αποθετήριο μετά από κάθε commit.

Το μόνο (πραγματικά μίζερη) τρόποι που έχω βρεθεί είναι να χρησιμοποιήσει git filter-branchγια να τρέξει wc -l *, και ένα script που τρέχει git reset --hardσε κάθε commit, τότε τρέχειwc -l

Για να γίνει λίγο πιο σαφής, όταν εκτελείται το εργαλείο, θα εξόδου οι γραμμές του κώδικα το πρώτο δεσμευτούν, τότε το δεύτερο και ούτω καθεξής. Αυτό είναι ό, τι θέλω το εργαλείο για την έξοδο (ως παράδειγμα):

me@something:~/$ gitsloc --branch master
10
48
153
450
1734
1542

Έχω παίξει γύρω με «git» βιβλιοθήκη του ρουμπίνι, αλλά το πιο κοντινό που βρήκα ήταν με τη χρήση της .lines()μεθόδου σε μια διαφορά, η οποία φαίνεται σαν να πρέπει να δώσει την προστιθέμενη γραμμές (αλλά δεν το κάνει: επιστρέφει 0, όταν διαγράφετε γραμμές, για παράδειγμα)

require 'rubygems'
require 'git'

total = 0
g = Git.open(working_dir = '/Users/dbr/Desktop/code_projects/tvdb_api')    

last = nil
g.log.each do |cur|
  diff = g.diff(last, cur)
  total = total + diff.lines
  puts total
  last = cur
end
Δημοσιεύθηκε 23/08/2008 στις 04:00
πηγή χρήστη
Σε άλλες γλώσσες...                            


4 απαντήσεις

ψήφοι
4

Το πρώτο πράγμα που πηδά στο μυαλό είναι η δυνατότητα της ιστορίας git σας έχει μια μη γραμμική ιστορία. Μπορεί να έχουν δυσκολία προσδιορισμού μια λογική ακολουθία των commits.

Τούτου λεχθέντος, φαίνεται ότι θα μπορούσατε να κρατήσετε ένα ημερολόγιο των διαπράττουν ταυτότητες και τις αντίστοιχες γραμμές κώδικα σε ότι διαπράττουν. Σε μια μετα-διαπράττουν γάντζο, ξεκινώντας από την αναθεώρηση HEAD, εργάζονται προς τα πίσω (διακλάδωση σε πολλούς γονείς, αν είναι απαραίτητο) έως ότου όλοι οι δρόμοι να φτάσει ένα δεσμεύονται ότι έχετε ήδη δει πριν. Αυτό πρέπει να σας δώσει τις συνολικές γραμμές κώδικα για κάθε commit id.

Μήπως αυτό να βοηθήσει οποιαδήποτε; Έχω την αίσθηση ότι έχω παρανοήσει κάτι για την ερώτησή σας.

Απαντήθηκε 23/08/2008 στις 13:39
πηγή χρήστη

ψήφοι
23

Μπορείτε να πάρετε και τις δύο προστεθούν ή να αφαιρεθούν γραμμές με log git, όπως:

git log --shortstat --reverse --pretty=oneline

Από αυτό, μπορείτε να γράψετε ένα παρόμοιο σενάριο με αυτό που κάνατε χρησιμοποιώντας αυτές τις πληροφορίες. Στην python:

#!/usr/bin/python

"""
Display the per-commit size of the current git branch.
"""

import subprocess
import re
import sys

def main(argv):
  git = subprocess.Popen(["git", "log", "--shortstat", "--reverse",
                        "--pretty=oneline"], stdout=subprocess.PIPE)
  out, err = git.communicate()
  total_files, total_insertions, total_deletions = 0, 0, 0
  for line in out.split('\n'):
    if not line: continue
    if line[0] != ' ': 
      # This is a description line
      hash, desc = line.split(" ", 1)
    else:
      # This is a stat line
      data = re.findall(
        ' (\d+) files changed, (\d+) insertions\(\+\), (\d+) deletions\(-\)', 
        line)
      files, insertions, deletions = ( int(x) for x in data[0] )
      total_files += files
      total_insertions += insertions
      total_deletions += deletions
      print "%s: %d files, %d lines" % (hash, total_files,
                                        total_insertions - total_deletions)


if __name__ == '__main__':
  sys.exit(main(sys.argv))
Απαντήθηκε 30/08/2008 στις 04:55
πηγή χρήστη

ψήφοι
23

Μπορεί επίσης να εξετάσει gitstats , η οποία παράγει αυτό το γράφημα ως αρχείο HTML.

Απαντήθηκε 18/05/2010 στις 05:09
πηγή χρήστη

ψήφοι
9

http://github.com/ITikhonov/git-loc εργαστεί δεξιά από το κουτί για μένα.

Απαντήθηκε 05/07/2010 στις 17:18
πηγή χρήστη

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more