[Date Prev][Date Next] [Thread Prev][Thread Next] [Date Index] [Thread Index]

Bzr lightweight checkout, bzr shallow branches, and git



* Ondrej Certik [Mon, 02 Mar 2009 11:07:25 -0500]:

> >> I have never used stacked branches, but are you sure you can only
> >> branch the repository data related to a subset of the working tree
> >> only ? My understanding is that bzr stacked branches are useful to
> >> avoid downloading the whole history, but that you still need to get
> >> the whole project. I think it would be very difficult to support the
> >> usual features of DVCS without it ?

> > If you don't want the project history, then you can use lightweight
> > checkouts, which are essentially equivalent to SVN checkouts (you get a
> > local working copy, but no local branch or repository).

> Ah, so you basically only get the local working copy, but *no* bzr
> repository, right? Well, with git, you can get this over the web
> interface, so we may write a simple (Python:) script to download this
> for you from the commandline. Maybe someone did this already.

No, that interpretation is not correct.

I'm going to explain the three involved concepts, in hopes that it will
be useful for this discussion, or for future instances of this discussion.
I'll (concisely) explain Bazaar's lightweight checkouts, Bazaar's stacked
branches, and what Git has to offer in this area.

1. Lightweight checkouts
========================

A Bazaar lightweight checkout is conceptually the same as a SVN
checkout: you get a working copy with the latest version of the project,
you can use `log` and `diff` to examine history (over the network), you
can use `diff` and `status` to see your changes, and you can use
`commit`, but comitting commits directly to the remote repo, rather than
locally.

You can also create a lightweight checkout of a read-only location (most
likely http://), the same as you can create a read-only SVN checkout (most
likely svn://).

Lightweight checkouts are useful for people who don't want to download
the whole history, *and* do not want/need to make commits offline.

2. Stacked branches
===================

A stacked branch in Bazaar is a mechanism to create a full-fledged
working copy (meaning, a copy where you can perform all Bazaar
operations, including offline commits), but without the need to download
all history.

The difference with a lightweight checkout is that the lightweight
checkout keeps *no* local state, and always acts directly in the remote
location (like SVN). A stacked branch is a regular branch, and can keep
local commits; it just know to fetch data from the network *on demand*
(I have no idea if the fetched data is cached or not, but my guess would
be that it is not).

Stacked branches are useful for people who want to use Bazaar as a DVCS,
but who prefer not to download the whole history of the project, paying
network trips as a price.

I can confirm that stacked branches *are not* about doing checkouts of
parts of a project. That's called "partial checkout", and it's a completely
different beast altogether.

3. Git
======

Git has shallow clones, created with the --depth option for git-clone.
This cut-offs the history of the project past a certain point, but the
result is lacking: mainly, you cannot push your changes back. (You can
do local commits however, and you can create patches for this in the
normal Git workflow.)

As far as I know, Git doesn't have a mechanism to create full-fledged
repositories with only part of the history, referencing other remote
repositories for missing data. With my Git user hat on, this is clearly
a technically inferiority of Git vs Bazaar.

HTH,

-- 
Adeodato Simó                                     dato at net.com.org.es
Debian Developer                                  adeodato at debian.org
 
In my opinion, the most fruitful and natural play of the mind is in
conversation. I find it sweeter than any other action in life; and if I
were forced to choose, I think I would rather lose my sight than my
hearing and voice.
                -- Michel de Montaigne


Reply to: