Linux kernel "historical" git repository with full history
I think many developers like to investigate sources with the help of git gui blame
. As explained in the commit for Linux-2.6.12-rc2 (also mirrored at Github), it needs to have special historical Linux repository for this purpose.
Linux-2.6.12-rc2
Initial git repository build. I’m not bothering with the full history, even though we have it. We can create a separate “historical” git archive of that later if we want to, and in the meantime it’s about 3.2GB when imported into git — space that would just make the early git days unnecessarily complicated, when we don’t have a lot of good infrastructure for it.
Let it rip!
I have looked at a lot of the prepared historical repositories but I didn’t find one containing changes going back to version zero, so I gave up and am asking this question here.
Solution 1:
Here is my setup.
I have a repository with a clone of the following remotes:
- https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git
- https://git.kernel.org/pub/scm/linux/kernel/git/stable/linux-stable.git
- https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git
- https://git.kernel.org/pub/scm/linux/kernel/git/davej/history.git
And the following grafts (info/grafts
):
1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 e7e173af42dbf37b1d946f9ee00219cb3b2bea6a
7a2deb32924142696b8174cdf9b38cd72a11fc96 379a6be1eedb84ae0d476afbc4b4070383681178
With these grafts, I have an unbroken view of the kernel history since 0.01. The first graft glues together the very first release in Linus' repository with the corresponding release of tglx/history.git
. The second graft glues together tglx/history.git
and davej/history.git
.
There are a few older versions missing, and the older versions have release granularity instead of patch granularity, but this is the best setup I know of.
Edit: Dave Jones pointed me to http://www.archive.org/details/git-history-of-linux, which seems to be exactly what you want.
Solution 2:
Here is a review of available 2018 options with a focus on tag availability and date correctness.
https://archive.org/download/git-history-of-linux/full-history-linux.git.tar
Developed by Dave Jones, and made available on archive.org
.
- Covers early versions to 2010.
- 244,464 commits
- Just 184 tags, covering versions in 2.6. The tags that should have been created for all versions seem to be missing.
- Early commits have realistic dates, but incorrect times (
11:00:00 199X -0600
). - Some dates seem to be incorrect. For example, both
2.1.110
and2.1.111
are datedWed May 20 11:00:00 1998 -0600
, although the latest file in the2.1.111
snapshot is dated1998-07-25 09:17
. - The creation process is documented on GitHub and seems very thorough.
https://git.kernel.org/pub/scm/linux/kernel/git/tglx/history.git/
Created by Thomas Gleixner.
- Covers 2.4.0 to 2.6.12-rc2.
- Contains 170 tags covering 2.5.X and 2.6.X.
- 63,428 commits
- Dates are correct.
- Contains patches converted into commits.
https://github.com/mpe/linux-fullhistory
Created by Michael Ellerman, derived from work by Yoann Padioleau, based on historical trees reconstructed by Dave Jones and Thomas Gleixner, and Linus' mainline tree.
- Covers full history
- Provides only 558 tags, mostly starting at 2.0.0.
- 790,471 commits
- Same issues with dates as in Dave Jones's repo.
- Uses replace objects instead of grafts.
https://git.kernel.org/pub/scm/linux/kernel/git/history/history.git/
Owned by the Linux history team.
- Covers early versions to 2.6.33-rc5.
- 1710 tags, starting with 0.10, covering most early versions.
- 244,774 commits
- Most historic versions are incorrectly dated
Fri Nov 23 15:09:04 2007 -0500
.
https://git.kernel.org/pub/scm/linux/kernel/git/torvalds/linux.git/
Modern Linux development.
- Covers 2.6.12-rc2 (2005) until today
- 569 tags
- 777,419 commits (August 2018)
- Proper commits
Solution 3:
the referenced repos no longer exist. the new one is here: https://git.kernel.org/cgit/linux/kernel/git/history/history.git/
if you're like me and want to keep some repos sep, you can leverage alternates with the graft to do so:
# Same dir as main linux
$ git clone --bare git://git.kernel.org/pub/scm/linux/kernel/git/history/history.git
$ cd linux/.git/
$ echo ../../../history.git/objects >> objects/info/alternates
$ echo 1da177e4c3f41524e886b7f1b8a0c1fc7321cac2 e7e173af42dbf37b1d946f9ee00219cb3b2bea6a >> info/grafts
$ echo 7a2deb32924142696b8174cdf9b38cd72a11fc96 379a6be1eedb84ae0d476afbc4b4070383681178 >> info/grafts
Solution 4:
The best what I've found is git://git.kernel.org/pub/scm/linux/kernel/git/davej/history.git. History tracking there starts from Linux-0.01 but many comments are poor something like "Import 2.1.38pre1".
Anyway there is a lot of knowledge.
Thanks for help!