From: Junio C Hamano <gitster@pobox.com>
To: Nicolas Pitre <nico@cam.org>
Cc: Joel Becker <Joel.Becker@oracle.com>,
Jakub Narebski <jnareb@gmail.com>,
git@vger.kernel.org
Subject: Re: [PATCH] provide advance warning of some future pack default changes
Date: Fri, 14 Dec 2007 17:43:13 -0800 [thread overview]
Message-ID: <7vr6hoohqm.fsf@gitster.siamese.dyndns.org> (raw)
In-Reply-To: <alpine.LFD.0.999999.0712142004480.8467@xanadu.home> (Nicolas Pitre's message of "Fri, 14 Dec 2007 20:08:05 -0500 (EST)")
Nicolas Pitre <nico@cam.org> writes:
> On Fri, 14 Dec 2007, Joel Becker wrote:
>
>> > Could you please give me a reference to such message, so to verify that
>> > we're actually talking about the same thing?
>>
>> The relevant message is:
>>
>> Message-ID: <7vveaindgp.fsf@gitster.siamese.dyndns.org>
>>
>> See the paragraphs at the bottom. The thread, started by me, begins
>> with:
>>
>> Message-ID: <20070910205429.GE27837@tasint.org>
>
> I don't have such emails in my mail folders anymore.
-- >8 --
Date: Mon, 10 Sep 2007 13:54:29 -0700
From: Joel Becker <Joel.Becker@oracle.com>
To: git@vger.kernel.org
Subject: Remote branches and better documentation
Message-ID: <20070910205429.GE27837@tasint.org>
Sender: git-owner@vger.kernel.org
Junio et al,
Git is a fast moving target, so some of this obviously needs a
grain of salt. However, I'd like to make a couple of humble suggestions
and ask one simple question.
First, the question: Is there a syntax to git clone that
creates the old-style branches? That is, you get all the branches
locally, for people that either haven't learned "git branch -r" or have
existing scripts that expect the branch to exist? I can't find anything
in the git clone manpage.
The suggestions are pretty simple. First, when behavior is
changed invisibly (as the remote branch stuff was), can we note it in
the documentation? I don't mean the ChangeLog, I mean the manpage. I
personally already knew about "branch -r" because I read this list. A
coworker of mine, who just uses git, spent an hour trying to find his
branches after a clone with git 1.5. He thought his clone had failed.
He read the manpage, and there was no big "Hey, those of you used to
the old behavior, it changed!". The single sentence about "remote
tracking branches" clearly isn't enough for folks that don't follow the
development side. If we're going to take the liberty of changing
expected behavior silently, we should be giving it its own section in
the manpage.
The second suggestion is related. When an invisible change has
made the repository incompatible with older versions, we should make
sure that things behave. We had some repositories cloned via 1.4.2. Do
some work with 1.5.0.6 (on a different machine), then go back to the
machine with 1.4.2, and 1.4.2 doesn't work. In fact, it can mess things
up. He was doing simple things: pull from Linus, switch branches, etc.
If this is going to be incompatible, then the newer stuff should at
least warn about it, if not outright prevent 1.4 from running.
These sorts of things make fast-moving changes workable.
Joel
-- >8 --
Date: Mon, 10 Sep 2007 19:27:34 -0700
Message-ID: <7vveaindgp.fsf@gitster.siamese.dyndns.org>
Sender: git-owner@vger.kernel.org
Joel Becker <Joel.Becker@oracle.com> writes:
> On Tue, Sep 11, 2007 at 02:05:34AM +0200, Wincent Colaiuta wrote:
>> But that's precisely the group release notes are for; existing users who
>> need to be informed of any changes to the way things work.
>
> No one reads the changelogs of 100 packages updated via "yum
> update". Heck, they don't even see the list of packages. They just
> switch to a different desktop while it runs.
Distros are not something under my control, so I cannot help you
much there.
> Then there's the user that doesn't administer the system. They
> don't even know the version changed. It Just Breaks, and they don't
> know why.
That's a valid concern, but I am not sure how you would want to
address that issue. Design constraints are:
- you cannot change the old software that is not updated on the
user's box;
- you cannot afford to write something to the repository to
mark the latest version that mucked with the repository every
time any operation happens;
We _could_ check presence of $HOME/.knows-git-version-X.Y.Z file
every time we run (that's just a single stat(2) call that cannot
be too expensive) and if there isn't one, ask the user if he has
read the release notes and understood the backward compatibility
issues if there is any, and refuse to run until getting a
satisfactory answer.
But I personally do not think that would be an improvement.
After reviewing Release Notes for v1.5.0, I do not think we
could have done much better, unfortunately.
As of git v1.5.0 there are some optional features that changes
the repository to allow data to be stored and transferred more
efficiently. These features are not enabled by default, as they
will make the repository unusable with older versions of git.
Specifically, the available options are:
- There is a configuration variable core.legacyheaders that
changes the format of loose objects so that they are more
efficient to pack and to send out of the repository over git
native protocol, since v1.4.2. However, loose objects
written in the new format cannot be read by git older than
that version; people fetching from your repository using
older clients over dumb transports (e.g. http) using older
versions of git will also be affected.
To let git use the new loose object format, you have to
set core.legacyheaders to false.
- Since v1.4.3, configuration repack.usedeltabaseoffset allows
packfile to be created in more space efficient format, which
cannot be read by git older than that version.
To let git use the new format for packfiles, you have to
set repack.usedeltabaseoffset to true.
The above two new features are not enabled by default and you
have to explicitly ask for them, because they make repositories
unreadable by older versions of git, and in v1.5.0 we still do
not enable them by default for the same reason. We will change
this default probably 1 year after 1.4.2's release, when it is
reasonable to expect everybody to have new enough version of
git.
- 'git pack-refs' appeared in v1.4.4; this command allows tags
to be accessed much more efficiently than the traditional
'one-file-per-tag' format. Older git-native clients can
still fetch from a repository that packed and pruned refs
(the server side needs to run the up-to-date version of git),
but older dumb transports cannot. Packing of refs is done by
an explicit user action, either by use of "git pack-refs
--prune" command or by use of "git gc" command.
So everything was opt in and clearly marked as such. You may
not have read it, distros may not have shown it, but then that
is something we cannot do much about, unfortunately.
I think there was _one_ honest slippage though. Fetching from
1.5.0 peer by 1.5.0 client could (after doing content
negotiation between both ends as a protection measure) create a
packfile that cannot be read by older 1.4 clients. Obviously
you cannot expect that kind of "protection" to work across set
of machines with mixed versions sharing a repository over NFS,
and that probably is a mistake we can learn from.
next prev parent reply other threads:[~2007-12-15 1:43 UTC|newest]
Thread overview: 66+ messages / expand[flat|nested] mbox.gz Atom feed top
2007-12-02 22:04 v1.5.4 plans Junio C Hamano
2007-12-02 22:33 ` Jakub Narebski
2007-12-02 22:41 ` Junio C Hamano
2007-12-02 23:39 ` David Symonds
2007-12-03 2:32 ` Junio C Hamano
2007-12-03 10:00 ` Many things pushed out to 'master' Junio C Hamano
2007-12-03 11:12 ` Johannes Schindelin
2007-12-03 18:19 ` Junio C Hamano
2007-12-03 18:39 ` Johannes Schindelin
2007-12-03 20:58 ` Junio C Hamano
2007-12-03 22:44 ` [PATCH] fast-export: rename the signed tag mode 'ignore' to 'verbatim' Johannes Schindelin
2007-12-03 22:56 ` Johannes Schindelin
2007-12-03 9:06 ` [PATCH] Fix quote_path when called with negative length Pierre Habouzit
2007-12-03 17:18 ` Jeff King
2007-12-03 18:06 ` v1.5.4 plans Nicolas Pitre
2007-12-03 21:23 ` Junio C Hamano
2007-12-14 3:32 ` [PATCH] provide advance warning of some future pack default changes Nicolas Pitre
2007-12-14 5:19 ` Junio C Hamano
2007-12-14 13:14 ` Nicolas Pitre
2007-12-14 12:45 ` Jakub Narebski
2007-12-14 13:38 ` Nicolas Pitre
2007-12-14 21:52 ` Joel Becker
2007-12-14 22:34 ` Nicolas Pitre
2007-12-14 22:39 ` Joel Becker
2007-12-14 22:46 ` Nicolas Pitre
2007-12-15 0:42 ` Joel Becker
2007-12-15 1:08 ` Nicolas Pitre
2007-12-15 1:21 ` Johannes Schindelin
2007-12-15 1:43 ` Junio C Hamano [this message]
2007-12-15 2:23 ` Nicolas Pitre
2007-12-17 20:09 ` Joel Becker
2007-12-17 20:41 ` Nicolas Pitre
2007-12-17 21:13 ` Joel Becker
2007-12-17 21:30 ` J. Bruce Fields
2007-12-17 21:52 ` Nicolas Pitre
2007-12-17 21:57 ` J. Bruce Fields
2007-12-17 22:15 ` Nicolas Pitre
2007-12-17 22:17 ` Junio C Hamano
2007-12-17 22:30 ` J. Bruce Fields
2007-12-17 22:55 ` Junio C Hamano
2007-12-18 0:04 ` J. Bruce Fields
2007-12-17 23:13 ` Nicolas Pitre
2007-12-17 21:16 ` Junio C Hamano
2007-12-17 21:45 ` Nicolas Pitre
2007-12-18 0:41 ` Junio C Hamano
2007-12-18 2:23 ` Mark Fasheh
2007-12-18 3:23 ` Nicolas Pitre
2007-12-18 3:52 ` Martin Langhoff
2007-12-18 4:09 ` Nicolas Pitre
2007-12-18 5:01 ` Junio C Hamano
2007-12-18 9:24 ` Jakub Narebski
2007-12-18 12:03 ` Johannes Schindelin
2007-12-18 14:16 ` Nicolas Pitre
2007-12-18 11:11 ` Jeff King
2007-12-18 12:06 ` Johannes Schindelin
2007-12-18 12:48 ` Jeff King
2007-12-18 13:30 ` Johannes Schindelin
2007-12-18 19:30 ` Jeff King
2007-12-18 20:12 ` Nicolas Pitre
2007-12-18 13:47 ` Jakub Narebski
2007-12-18 20:24 ` Junio C Hamano
2007-12-18 2:15 ` Mark Fasheh
2007-12-18 3:34 ` Nicolas Pitre
2007-12-04 0:48 ` v1.5.4 plans Russell
-- strict thread matches above, loose matches on Subject: below --
2007-12-14 11:28 [PATCH] provide advance warning of some future pack default changes linux
2007-12-14 15:20 ` Nicolas Pitre
Reply instructions:
You may reply publicly to this message via plain-text email
using any one of the following methods:
* Save the following mbox file, import it into your mail client,
and reply-to-all from there: mbox
Avoid top-posting and favor interleaved quoting:
https://en.wikipedia.org/wiki/Posting_style#Interleaved_style
* Reply using the --to, --cc, and --in-reply-to
switches of git-send-email(1):
git send-email \
--in-reply-to=7vr6hoohqm.fsf@gitster.siamese.dyndns.org \
--to=gitster@pobox.com \
--cc=Joel.Becker@oracle.com \
--cc=git@vger.kernel.org \
--cc=jnareb@gmail.com \
--cc=nico@cam.org \
/path/to/YOUR_REPLY
https://kernel.org/pub/software/scm/git/docs/git-send-email.html
* If your mail client supports setting the In-Reply-To header
via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line
before the message body.
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).