Giter Site home page Giter Site logo

linquize / git-stats Goto Github PK

View Code? Open in Web Editor NEW

This project forked from ionicabizau/git-stats

0.0 3.0 0.0 164 KB

:four_leaf_clover: A GitHub-like contributions calendar, but locally, with all your git commits.

License: MIT License

JavaScript 86.32% Shell 13.68%

git-stats's Introduction

$ git-stats

A GitHub-like contributions calendar, but locally, with all your git commits.

I'd be curious to see your calendar with all your commits. Ping me on Twitter (@IonicaBizau). ๐Ÿ˜„ Until then, here's my calendar:

Contents

Installation

$ npm install -g git-stats

Catching the git commit command

Would you like to catch and automatically store the commits when you do git commit? If so, try one of the following solutions.

Using git hooks

The way I recommend to track your git commits is to use git hooks. Run the following command to initialize the post-commit git hook.

# Using curl
curl -s https://raw.githubusercontent.com/IonicaBizau/git-stats/master/scripts/init-git-post-commit | bash

# ...or wget
wget -qO- https://raw.githubusercontent.com/IonicaBizau/git-stats/master/scripts/init-git-post-commit | bash

Then, you have to run git init into your existing git repositories from your local machine (that's because the post-commit should be updated). This step will not be needed after cloning a repository (the git hooks will be added automatically from ~/.git-templates).

Overriding the git command

One of the solutions is becoming a mad scientist, overriding the git command with a function. However, this may not work for you if you're using zsh.

Add the following lines in your ~/.bashrc (or ~/.bash_profile on OS X) file:

# Override the Git command
git() {
  cmd=$1
  shift
  extra=""

  quoted_args=""
  whitespace="[[:space:]]"
  for i in "$@"
  do
      quoted_args="$quoted_args \"$i\""
  done

  cmdToRun="`which git` "$cmd" $quoted_args"
  cmdToRun=`echo $cmdToRun | sed -e 's/^ *//' -e 's/ *$//'`
  bash -c "$cmdToRun"
  if [ $? -eq 0 ]; then
    # Commit stats
    if [ "$cmd" == "commit" ]; then
      commit_hash=`git rev-parse HEAD`
      repo_url=`git config --get remote.origin.url`
      commit_date=`git log -1 --format=%cd`
      commit_data="\"{ \"date\": \"$commit_date\", \"url\": \"$repo_url\", \"hash\": \"$commit_hash\" }\""
      git-stats --record "$commit_data"
    fi
  fi
}

Usage

$ git-stats --help
git-stats --help
A GitHub-like contributions calendar, but locally, with all your git commits.

usage: git-stats [start] [end] [options] [data]

start:                    Optional start date
end:                      Optional end date

options:
  -v                      Displays version information.
  -h --help               Displays this help.
  --no-ansi               Doesn't use ANSI colors in the squares.
  --record <data>         Records a new commit. Don't use this unless you are
                          a mad scientist. If you are a developer, just use this
                          option as part of the module.
  --light                 Enable the light theme.

examples:
   git-stats # Displays your commit calendar
   git-stats -v
   git-stats -h
   git-stats --light # Light mode
   git-stats '1 January 2012' # All the commits from 1 January 2012, to now
   git-stats '1 January 2012' '31 December 2012' # All the commits from 2012

Your commit history is kept in the .git-stats, in your $HOME directory (~/)

Documentation can be found at https://github.com/IonicaBizau/git-stats

If you override the git command with a function, then your commits will be automatically recorded.

Importing and deleting commits

I know it's not nice to start your git commit calendar from scratch. That's why I created a git-stats-importer that imports or deletes the commits from a repository.

Check it out here: https://github.com/IonicaBizau/git-stats-importer

The usage is simple:

# Install the importer tool
$ npm install -g git-stats-importer

# Go to the repository you want to import
$ cd path/to/my-repository

# Import the commits
$ git-stats-importer

# ...or delete them if that's a dummy repository
$ git-stats-importer --delete

Importing all the commits from GitHub and BitBucket

Yes, you read correctly! That's also possible. I built a tool for that too!

# Download the repository downloader
$ git clone https://github.com/IonicaBizau/repository-downloader.git

# Go to repository downloader
$ cd repository-downloader

# Install the dependencies
$ npm install

# Start downloading and importing
$ ./start

See the GitHub Contributions calendar

There is a solution for that, too! ๐Ÿ˜„ It's called ghcal.

# Install ghcal
$ npm install -g ghcal

# Checkout my contributions
$ ghcal ionicabizau

For more detailed documentation, check out the repository: https://github.com/IonicaBizau/ghcal.

Documentation Inline docs

If you want to use this as a module, that is possible. See the content below.

record(data, callback)

Records a new commit.

Params

  • Object data: The commit data containing:

  • date (String|Date): The date object or a string in a format that can be parsed.

  • url (String): The repository remote url.

  • hash (String): The commit hash.

  • Function callback: The callback function.

Return

  • GitStats The GitStats object.

get(callback)

Gets the git stats.

Params

  • Function callback: The callback function.

Return

  • GitStats The GitStats object.

save(stats, callback)

Saves the provided stats.

Params

  • Object stats: The stats to be saved.
  • Function callback: The callback function.

Return

  • GitStats The GitStats object.

iterateDays(data, callback)

Iterate through the days, calling the callback function on each day.

Params

  • Object data: An object containing the following fields:

  • start (Moment): A Moment date object representing the start date (default: an year ago).

  • end (Moment): A Moment date object representing the end date (default: now).

  • format (String): The format of the date (default: "MMM D, YYYY").

  • Function callback: The callback function called with the current day formatted (type: string) and the Moment date object.

Return

  • GitStats The GitStats object.

graph(data, callback)

Creates an object with the stats on the provided period (default: last year).

Params

  • Object data: The object passed to the iterateDays method.
  • Function callback: The callback function.

Return

  • GitStats The GitStats object.

calendar(data, callback)

Creates the calendar data for the provided period (default: last year).

Params

  • Object data: The object passed to the graph method.
  • Function callback: The callback function.

Return

  • GitStats The GitStats object.

ansiCalendar(data, callback)

Creates the ANSI contributions calendar.

Params

  • Object data: The object passed to the calendar method.
  • Function callback: The callback function.

Return

  • GitStats The GitStats object.

How to contribute

  1. File an issue in the repository, using the bug tracker, describing the contribution you'd like to make. This will help us to get you started on the right foot.
  2. Fork the project in your account and create a new branch: your-great-feature.
  3. Commit your changes in that branch.
  4. Open a pull request, and reference the initial issue in the pull request message.

License

See the LICENSE file.

git-stats's People

Contributors

flavioribeiro avatar ionicabizau avatar jatenate avatar rrrene avatar ryanseys avatar tyler-h avatar williamboman avatar

Watchers

 avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.