Date:   Fri, 12 Aug 2005 22:39:48 -0700 (PDT)
From: Linus Torvalds <torvalds@osdl.org>
To: Dave Jones <davej@redhat.com>
cc: git@vger.kernel.org
Subject: Re: Fwd: Re: git checkout -f branch doesn't remove extra files
Abstract: In this article, Linus talks about building a tarball,
 incremental patch, and ChangeLog, given a base release and two
 rc releases, following the convention of giving the patch from
 the base release and the latest rc, with ChangeLog between the
 last rc and the latest rc.

On Sat, 13 Aug 2005, Dave Jones wrote:
>
>  > Git actually has a _lot_ of nifty tools. I didn't realize that people
>  > didn't know about such basic stuff as "git-tar-tree" and "git-ls-files".
>
> Maybe its because things are moving so fast :)  Or maybe I just wasn't
> paying attention on that day. (I even read the git changes via RSS,
> so I should have no excuse).

Well, git-tar-tree has been there since late April - it's actually one of
those really early commands. I'm pretty sure the RSS feed came later ;)

I use it all the time in doing releases, it's a lot faster than creating a
tar tree by reading the filesystem (even if you don't have to check things
out). A hidden pearl.

This is my crappy "release-script":

        [torvalds@g5 ~]$ cat bin/release-script
        #!/bin/sh
        stable="$1"
        last="$2"
        new="$3"
        echo "# git-tag v$new"
        echo "git-tar-tree v$new linux-$new | gzip -9 > ../linux-$new.tar.gz"
        echo "git-diff-tree -p v$stable v$new | gzip -9 > ../patch-$new.gz"
        echo "git-rev-list --pretty v$new ^v$last > ../ChangeLog-$new"
        echo "git-rev-list --pretty=short v$new ^v$last | git-shortlog > ../ShortLog"
        echo "git-diff-tree -p v$last v$new | git-apply --stat > ../diffstat-$new"

and when I want to do a new kernel release I literally first tag it, and
then do

        release-script 2.6.12 2.6.13-rc6 2.6.13-rc7

and check that things look sane, and then just cut-and-paste the commands.

Yeah, it's stupid.

                Linus

