I’m currently releasing several projects as open source. Typically the complete source is provided as ZIP archive or checked in at an open source repo. This makes analysis by ohloh difficult.
In case the software has been developed in a non-public repository, the complete history is available. However, I do not want to have the full history released.
I want to use git for reaching one of the two possibilites:
(i) One commit per author:
There should be one commit per author (with the commit date the final release date). Each commit contains the lines of code, which finally made it into the final version.
(ii) Original commits with only the final code lines: In this variant, the number of commits itself are preserved. Each commit is modified in a way that only the lines, which finally made it into the final version, are preserved and all other ones are deleted.
Has anyone implemented one of the variants yet? Variant (i) seems to be doable using git-blame and some scripting.
git-oss-releaser is a solution for option (i).
git-oss-releaser converts a given git repository to a git repository only containing the files of the last commit and commits resembling
git blameoutput for each file.The original history is lost.
usage:
git-oss-releaser.py [-h] repoDir outDirPositional arguments:
repoDir: The repository to transform. May also be a subdirectory of a repo.outDir: The directory where the new repo should be created. Has to be empty.Optional arguments:
--name NAMETheuser.nameto use for committing the files. Defaults to git’s globaluser.name.--email EMAILTheuser.emailto use for committing the files. Defaults to git’s globaluser.email.--date DATEThe date to use for commits. Defaults to the date the last commit.Note that git distinguishes author and committer at a commit.
The author is taken using
git blame, the committer data is taken from the globaluser.nameanduser.emailor the given configured--nameand--email.DEBUG mode can currently only be enabled in the code.
Limitations