git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* [doc][git] playing with git, and netdev/libata-dev trees
@ 2005-05-26  5:26 Jeff Garzik
  2005-05-26  8:19 ` [doc]playing " Frank Sorenson
  2005-06-04  8:40 ` Dave Airlie
  0 siblings, 2 replies; 7+ messages in thread
From: Jeff Garzik @ 2005-05-26  5:26 UTC (permalink / raw)
  To: Linux Kernel, Netdev, linux-ide@vger.kernel.org
  Cc: Andrew Morton, Git Mailing List


Hopefully, this email can quick-start some people on git.

One of the things Linus's new 'git' tool allows me to do is make public 
the 50+ repositories that were previously only available on my local 
workstation.  This should make it a lot easier for developers to see 
precisely what I have merged, and makes generating follow-up patches a 
whole lot easier.

When I merge a patch for drivers/net/forcedeth.c, I merge it into a 
brand new 'forcedeth' repository, a peer to the 40+ other such 
repository.  Under BitKeeper, I made these repositories available merged 
together into one big "netdev-2.6" repository because it was too time 
consuming to make the individual 50+ trees publicly available.  With 
git, developers have direct access to the individual trees.

I thought I would write up a quick guide describing how to mess around 
with the netdev and libata-dev trees, and with git in general.


1) installing git

git requires bootstrapping, since you must have git installed in order 
to check out git.git (git repo), and linux-2.6.git (kernel repo).  I 
have put together a bootstrap tarball of today's git repository.

Download tarball from:
http://www.kernel.org/pub/linux/kernel/people/jgarzik/git-20050526.tar.bz2

tarball build-deps:  zlib, libcurl

install tarball:  unpack && make && sudo make prefix=/usr/local install

jgarzik helper scripts, not in official git distribution:
http://www.kernel.org/pub/linux/kernel/people/jgarzik/git-switch-tree
http://www.kernel.org/pub/linux/kernel/people/jgarzik/git-new-branch
http://www.kernel.org/pub/linux/kernel/people/jgarzik/git-changes-script

After reading the rest of this document, come back and update your copy 
of git to the latest:
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/git.git


2) download a linux kernel tree for the very first time

mkdir -p linux-2.6/.git
cd linux-2.6
rsync -a --delete --verbose --stats --progress \ 
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git/ 
\          <- word-wrapped backslash; sigh
    .git/


3) download latest changes to on-disk local tree

cd linux-2.6
git-pull-script \
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git


4) check out files from the git repository into the working directory

cd linux-2.6
git-read-tree -m HEAD && git-checkout-cache -q -f -u -a


5) check in your own modifications (e.g. apply a patch)

# go to repo
cd linux-2.6

# make some modifications
patch -sp1 < /tmp/my.patch
diffstat -p1 < /tmp/my.patch

# NOTE: add '--add' and/or '--remove' if files were added or removed
git-update-cache <list of all files changed>

# commit changes
GIT_AUTHOR_NAME="John Doe"		\
    GIT_AUTHOR_EMAIL="jdoe@foo.com"	\
    GIT_COMMITTER_NAME="Jeff Garzik"	\
    GIT_COMMITTER_EMAIL="jgarzik@pobox.com"	\
    git-commit-tree `git-write-tree`	\
    -p $(cat .git/HEAD )			\
    < changelog.txt			\
    > .git/HEAD


6) List all changes in working dir, in diff format.

git-diff-cache -p HEAD


7) List all changesets (i.e. show each cset's description text) in local 
tree that are not present in remote tree.

cd my-kernel-tree-2.6
git-changes-script -L ../linux-2.6 | less


8) List all changesets:

git-whatchanged


9) apply all patches in a Berkeley mbox-format file

First, download and add to your PATH Linus's git tools:
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/git-tools.git

cd my-kernel-tree-2.6
dotest /path/to/mbox  # yes, Linus has no taste in naming useful scripts


10) don't forget to download tags from time to time.

git-pull-script only downloads sha1-indexed object data, and the 
requested remote head.  This misses updates to the .git/refs/tags/ and 
.git/refs/heads directories.  It is advisable to update your kernel .git 
directories periodically with a full rsync command, to make sure you got 
everything:

cd linux-2.6
rsync -a --delete --verbose --stats --progress \ 
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/torvalds/linux-2.6.git/ 
\          <- word-wrapped backslash; sigh
    .git/


11) [jg-specific] list all branches found in netdev-2.6 or libata-dev trees.

Download
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/jgarzik/netdev-2.6.git
	or
rsync://rsync.kernel.org/pub/scm/linux/kernel/git/jgarzik/libata-dev.git


cd netdev-2.6
ls .git/refs/heads/

{ these are the current netdev-2.6 branches }
> 8139cp       forcedeth    master     qeth           smc91x         we18
> 8139too-iomap  for-linus    natsemi      r8169      smc91x-eeprom  wifi
> airo           hdlc         ns83820      register-netdev  starfire
> atmel          ieee80211    orinoco      remove-drivers   tlan
> chelsio        iff-running  orinoco-hch  sis900           veth
> dm9000         janitor      ppp          skge             viro



12) [jg-specific] make desired branch current in working directory

git-switch-tree $branch


13) [jg-specific] create a new branch, and make it current

git-new-branch $branch


14) [jg-specific] examine which branch is current

ls -l .git/HEAD


15) undo all local modifications (same as checkout):

git-read-tree -m HEAD && git-checkout-cache -q -f -u -a




^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [doc]playing with git, and netdev/libata-dev trees
  2005-05-26  5:26 [doc][git] playing with git, and netdev/libata-dev trees Jeff Garzik
@ 2005-05-26  8:19 ` Frank Sorenson
  2005-05-26 11:54   ` James Purser
  2005-06-04  8:40 ` Dave Airlie
  1 sibling, 1 reply; 7+ messages in thread
From: Frank Sorenson @ 2005-05-26  8:19 UTC (permalink / raw)
  To: Git Mailing List; +Cc: jgarzik

-----BEGIN PGP SIGNED MESSAGE-----
Hash: SHA1

Jeff Garzik wrote:
> Hopefully, this email can quick-start some people on git.

I think the quick-start is great.  Definitely needed to get people
up-to-speed with git.

> 1) installing git
> 
> git requires bootstrapping, since you must have git installed in order
> to check out git.git (git repo), and linux-2.6.git (kernel repo).  I
> have put together a bootstrap tarball of today's git repository.
> 
> Download tarball from:
> http://www.kernel.org/pub/linux/kernel/people/jgarzik/git-20050526.tar.bz2

A tarball of git will work, but it's a big bootstrap, and will need
periodic updating.

I'm curious whether we couldn't make a git-bootstrap that contained a
significantly stripped-down version that did nothing other than
bootstrap git.  A single program/file (perl script perhaps?) that...

mkdir git
cd git
rsync -rl rsync://rsync.kernel.org/pub/scm/git/git.git/ .git
echo rsync://rsync.kernel.org/pub/scm/git/git.git > .git/branches/origin
beginning with .git/HEAD, start extracting files

...and nothing more.  Then, we could tell people to just download
git-bootstrap and run it to create an up-to-date git repo.

Frank
- --
Frank Sorenson - KD7TZK
Systems Manager, Computer Science Department
Brigham Young University
frank@tuxrocks.com
-----BEGIN PGP SIGNATURE-----
Version: GnuPG v1.2.6 (GNU/Linux)
Comment: Using GnuPG with Thunderbird - http://enigmail.mozdev.org

iD8DBQFClYaKaI0dwg4A47wRAp1MAKCcGK8vTWtw1gnTCjFbMFpbZkSO8QCff5RE
NC8Z7RVHFP4qcbKRMSJ2rzg=
=fXsr
-----END PGP SIGNATURE-----

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [doc]playing with git, and netdev/libata-dev trees
  2005-05-26  8:19 ` [doc]playing " Frank Sorenson
@ 2005-05-26 11:54   ` James Purser
  0 siblings, 0 replies; 7+ messages in thread
From: James Purser @ 2005-05-26 11:54 UTC (permalink / raw)
  To: Frank Sorenson; +Cc: git

On Thu, 2005-05-26 at 18:19, Frank Sorenson wrote:

> A tarball of git will work, but it's a big bootstrap, and will need
> periodic updating.
> 

I don't really see the problem with an initial install from a tarball.
If the tarball is a direct pull of the git.git tree .git/ and all then
all anyone has to do to keep it up to date is either grab a copy of
cogito, or set up their own git based scripts.


-- 
James Purser
http://k-sit.com


^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [doc]playing with git, and netdev/libata-dev trees
  2005-05-26  5:26 [doc][git] playing with git, and netdev/libata-dev trees Jeff Garzik
  2005-05-26  8:19 ` [doc]playing " Frank Sorenson
@ 2005-06-04  8:40 ` Dave Airlie
  2005-06-04 10:26   ` Jeff Garzik
  1 sibling, 1 reply; 7+ messages in thread
From: Dave Airlie @ 2005-06-04  8:40 UTC (permalink / raw)
  To: Linux Kernel; +Cc: Andrew Morton, Git Mailing List

> 
> When I merge a patch for drivers/net/forcedeth.c, I merge it into a
> brand new 'forcedeth' repository, a peer to the 40+ other such
> repository.  Under BitKeeper, I made these repositories available merged
> together into one big "netdev-2.6" repository because it was too time
> consuming to make the individual 50+ trees publicly available.  With
> git, developers have direct access to the individual trees.
> 
> I thought I would write up a quick guide describing how to mess around
> with the netdev and libata-dev trees, and with git in general.
> 

Thanks for this, I'm starting to get up to speed on git now...

Two questions,

1. when you want to publish your tree what do you do? just rsync it
onto kernel.org?
2. When you are taking things from your queue for Linus do you create
another tree and merge your branches into it or what?

Dave.

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [doc]playing with git, and netdev/libata-dev trees
  2005-06-04  8:40 ` Dave Airlie
@ 2005-06-04 10:26   ` Jeff Garzik
  2005-06-04 10:31     ` Dave Airlie
  0 siblings, 1 reply; 7+ messages in thread
From: Jeff Garzik @ 2005-06-04 10:26 UTC (permalink / raw)
  To: Dave Airlie; +Cc: Linux Kernel, Andrew Morton, Git Mailing List, Linus Torvalds

[-- Attachment #1: Type: text/plain, Size: 2660 bytes --]

Dave Airlie wrote:
>>When I merge a patch for drivers/net/forcedeth.c, I merge it into a
>>brand new 'forcedeth' repository, a peer to the 40+ other such
>>repository.  Under BitKeeper, I made these repositories available merged
>>together into one big "netdev-2.6" repository because it was too time
>>consuming to make the individual 50+ trees publicly available.  With
>>git, developers have direct access to the individual trees.
>>
>>I thought I would write up a quick guide describing how to mess around
>>with the netdev and libata-dev trees, and with git in general.
>>
> 
> 
> Thanks for this, I'm starting to get up to speed on git now...
> 
> Two questions,
> 
> 1. when you want to publish your tree what do you do? just rsync it
> onto kernel.org?

Basically.  I copy the attached script into each repo, customize the 
script for the upload destination.

When I publish the tree, I just cd to the toplevel dir on my local 
workstation, and run "./push"


> 2. When you are taking things from your queue for Linus do you create
> another tree and merge your branches into it or what?

Not quite sure what you're asking, but I'll attempt to answer anyway :)

When I prepare a submission for Linus, I will pull several branches into 
a single 'for-linus' conglomeration branch.  I do this with the 
following incantation, for each branch I am pushing upstream:

git-resolve-script $(cat .git/HEAD) $(cat .git/refs/heads/$branch) \
	`pwd` $branch

(Note that I modified my git-resolve-script to take an additional $4 
argument, which causes the string " branch $4" to be added to the merge 
cset's commit msg)

After I take care of all the merge conflicts[1] from the 
git-resolve-script run, I give the big pile of mush a final build and 
test, and then run "./push".

For the "please pull" email, I use diffstat, git-diff-tree, 
git-changes-script and the newly written git-shortlog.

	Jeff



[1] I'm still scared of conflicts in the merge process.  Simple and 
automatic merging works just fine, like it did under BitKeeper.  But if 
there are conflicts that cause git-pull-script/git-resolve-script to 
bail, then I bail as well:  I export a patch, run patch(1), and then 
handle the merge the Old Fashioned Way(tm) by looking at .rej files.

I really wish somebody would write a merge helper for git that places 
the conflicts side-by-side in the code [in the working dir].  BitKeeper 
and CVS both presented conflicts to you in this manner.

The "I resolved this conflict, now let's continue where we left off" 
process is still quite raw in git.  I suppose this is something that is 
left for others to script, above the plumbing, but hey...


[-- Attachment #2: push --]
[-- Type: text/plain, Size: 137 bytes --]

#!/bin/sh

rsync -e ssh --verbose --delete --stats --progress -az .git/ master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/misc-2.6.git

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [doc]playing with git, and netdev/libata-dev trees
  2005-06-04 10:26   ` Jeff Garzik
@ 2005-06-04 10:31     ` Dave Airlie
  2005-06-04 18:16       ` Jeff Garzik
  0 siblings, 1 reply; 7+ messages in thread
From: Dave Airlie @ 2005-06-04 10:31 UTC (permalink / raw)
  To: Jeff Garzik; +Cc: Linux Kernel, Andrew Morton, Git Mailing List, Linus Torvalds

> > 1. when you want to publish your tree what do you do? just rsync it
> > onto kernel.org?
> 
> Basically.  I copy the attached script into each repo, customize the
> script for the upload destination.
> 
> When I publish the tree, I just cd to the toplevel dir on my local
> workstation, and run "./push"
> 
> 
> > 2. When you are taking things from your queue for Linus do you create
> > another tree and merge your branches into it or what?
> 
> Not quite sure what you're asking, but I'll attempt to answer anyway :)

Yes that's what I'm asking, mainly the pulling of multiple trees into
one tree for giving to Linus, for Andrew I'm quite happy to have him
pull multiple HEADs from the one tree assuming I don't have many
interdependencies between trees...

Say I want something like this one tree with

drm-2.6 - HEAD <- linus tree
            - drm-via < a via driver
            - drm-initmap 
                      - drm-savage <- a savage driver that depends on
the drm-initmap tree

How would I construct such a beast, how does it work out from where to
branch, can I branch a branch for something like drm-savage so I can
say send Linus the initmap branch and then have -mm pulling the savage
one...

if that makes any sense :-)

Dave.
> 
> 
> [1] I'm still scared of conflicts in the merge process.  Simple and
> automatic merging works just fine, like it did under BitKeeper.  But if
> there are conflicts that cause git-pull-script/git-resolve-script to
> bail, then I bail as well:  I export a patch, run patch(1), and then
> handle the merge the Old Fashioned Way(tm) by looking at .rej files.
> 
> I really wish somebody would write a merge helper for git that places
> the conflicts side-by-side in the code [in the working dir].  BitKeeper
> and CVS both presented conflicts to you in this manner.
> 
> The "I resolved this conflict, now let's continue where we left off"
> process is still quite raw in git.  I suppose this is something that is
> left for others to script, above the plumbing, but hey...
> 
> 
> 
> #!/bin/sh
> 
> rsync -e ssh --verbose --delete --stats --progress -az .git/ master.kernel.org:/pub/scm/linux/kernel/git/jgarzik/misc-2.6.git
> 
> 
>

^ permalink raw reply	[flat|nested] 7+ messages in thread

* Re: [doc]playing with git, and netdev/libata-dev trees
  2005-06-04 10:31     ` Dave Airlie
@ 2005-06-04 18:16       ` Jeff Garzik
  0 siblings, 0 replies; 7+ messages in thread
From: Jeff Garzik @ 2005-06-04 18:16 UTC (permalink / raw)
  To: Dave Airlie; +Cc: Linux Kernel, Andrew Morton, Git Mailing List, Linus Torvalds

Dave Airlie wrote:
>>>1. when you want to publish your tree what do you do? just rsync it
>>>onto kernel.org?
>>
>>Basically.  I copy the attached script into each repo, customize the
>>script for the upload destination.
>>
>>When I publish the tree, I just cd to the toplevel dir on my local
>>workstation, and run "./push"
>>
>>
>>
>>>2. When you are taking things from your queue for Linus do you create
>>>another tree and merge your branches into it or what?
>>
>>Not quite sure what you're asking, but I'll attempt to answer anyway :)
> 
> 
> Yes that's what I'm asking, mainly the pulling of multiple trees into
> one tree for giving to Linus, for Andrew I'm quite happy to have him
> pull multiple HEADs from the one tree assuming I don't have many
> interdependencies between trees...
> 
> Say I want something like this one tree with
> 
> drm-2.6 - HEAD <- linus tree
>             - drm-via < a via driver
>             - drm-initmap 
>                       - drm-savage <- a savage driver that depends on
> the drm-initmap tree
> 
> How would I construct such a beast, how does it work out from where to
> branch, can I branch a branch for something like drm-savage so I can
> say send Linus the initmap branch and then have -mm pulling the savage
> one...

You used to use BitKeeper, right?

Well, git works just fine for creating and maintaining separate repos, 
where each repo is its own branch.  Dependent branches are handled 
simply by pulling new changes from the parent (drm-initmap) repo into 
the child (drm-savage) repo.

If you just have a few branches, such as your example above, rather than 
the 50+ branches I have, then I would recommend _ignoring_ the advice in 
my git howto, and instead create a new branch by cloning:

	cd /repos
	mkdir drm-via
	cp -a linux-2.6/.git drm-via
	rm -rf drm-via/.git/objects
	cp -al linux-2.6/.git/objects drm-via/.git

Once created by the above recipes, or similar, the directory will 
function as a repo just like with BK.  When you wish to update it from 
upstream, update your local linux-2.6 repo and then

	cd /repos/drm-via
	git-pull-script /repos/linux-2.6/.git

or to pull new changes from initmap into savage:

	cd /repos/drm-initmap
	# { check in some changes }
	cd /repos/drm-savage
	git-pull-script /repos/drm-initmap/.git

Does all that make sense?  It's really quite similar to BK, if you 
ignore the "[jg-specific]" portions of the git howto I wrote.

	Jeff



^ permalink raw reply	[flat|nested] 7+ messages in thread

end of thread, other threads:[~2005-06-04 18:13 UTC | newest]

Thread overview: 7+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2005-05-26  5:26 [doc][git] playing with git, and netdev/libata-dev trees Jeff Garzik
2005-05-26  8:19 ` [doc]playing " Frank Sorenson
2005-05-26 11:54   ` James Purser
2005-06-04  8:40 ` Dave Airlie
2005-06-04 10:26   ` Jeff Garzik
2005-06-04 10:31     ` Dave Airlie
2005-06-04 18:16       ` Jeff Garzik

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for NNTP newsgroup(s).