git.vger.kernel.org archive mirror
 help / color / mirror / Atom feed
* Draft v1.5.0 release notes
@ 2007-01-02  0:08 Junio C Hamano
  2007-01-02  2:31 ` Steven Grimm
  2007-01-02  7:22 ` David Kågedal
  0 siblings, 2 replies; 5+ messages in thread
From: Junio C Hamano @ 2007-01-02  0:08 UTC (permalink / raw)
  To: git

The latest draft is kept as 'todo:v1.5.0.txt'.  Since I've
merged the shallow clone changes, I've added a few sentences for
the series as well.

--

GIT v1.5.0 Release Notes
========================

Old news
--------

This section is for people who are upgrading from ancient
versions of git.  Although all of the changes in this section
happened before the current v1.4.4 release, they are summarized
here in the v1.5.0 release notes for people who skipped earlier
versions.

In general, you should not have to worry about incompatibility,
and there is no need to perform "repository conversion" if you
are updating to v1.5.0.  However, some of the changes are
one-way street upgrades; once you use them your repository
can no longer be used with ancient git.

 - 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, this 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.  This is not enabled by default.

 - 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.  This is not
   enabled by default.

 - '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.

 - 'git -p' to paginate anything -- many commands do pagination
   by default on a tty.  Introduced between v1.4.1 and v1.4.2;
   this may surprise old timers.

 - 'git archive' superseded 'git tar' in v1.4.3;

 - 'git cvsserver' was new invention in v1.3.0;

 - 'git repo-config', 'git grep', 'git rebase' and 'gitk' were
   seriously enhanced during v1.4.0 timeperiod.

 - 'gitweb' became part of git.git during v1.4.0 timeperiod and
   seriously modified since then.

 - reflog is an v1.4.0 invention.  This alows you to name a
   revision that a branch used to be at (e.g. "git diff
   master@{yesterday} master" allows you to see changes since
   yesterday's tip of the branch).


Updates in v1.5.0 since v1.4.4 series
-------------------------------------

* Index manipulation

 - git-add is to add contents to the index (aka "staging area"
   for the next commit), whether the file the contents happen to
   be is an existing one or a newly created one.

 - git-add without any argument does not add everything
   anymore.  Use 'git-add .' instead.  Also you can add
   otherwise ignored files with an -f option.

 - git-add tries to be more friendly to users by offering an
   interactive mode.

 - git-commit <path> used to refuse to commit if <path> was
   different between HEAD and the index (i.e. update-index was
   used on it earlier).  This check was removed.

 - git-rm is much saner and safer.  It is used to remove paths
   from both the index file and the working tree, and makes sure
   you are not losing any local modification before doing so.

 - git-reset <tree> <paths>... can be used to revert index
   entries for selected paths.

 - git-update-index is much less visible.


* Repository layout and objects transfer

 - The data for origin repository is stored in the configuration
   file $GIT_DIR/config, not in $GIT_DIR/remotes/, for newly
   created clones.  The latter is still supported and there is
   no need to convert your existing repository if you are
   already comfortable with your workflow with the layout.

 - git-clone always uses what is known as "separate remote"
   layout for a newly created repository with a working tree;
   i.e. tracking branches in $GIT_DIR/refs/remotes/origin/ are
   used to track branches from the origin.  New branches that
   appear on the origin side after a clone is made are also
   tracked automatically.

 - git-branch and git-show-branch know remote tracking branches.

 - git-push can now be used to delete a remote branch or a tag.
   This requires the updated git on the remote side.

 - git-push more agressively keeps the transferred objects
   packed.  Earlier we recommended to monitor amount of loose
   objects and repack regularly, but you should repack when you
   accumulated too many small packs this way as well.  Updated
   git-count-objects helps you with this.


* Reflog

 - Reflog records the history of where the tip of each branch
   was at each moment.  This facility is enabled by default for
   repositories with working trees, and can be accessed with the
   "branch@{time}" and "branch@{Nth}" notation.

 - "git show-branch" learned showing the reflog data with the
   new --reflog option.

 - The commits referred to by reflog entries are now protected
   against pruning.  The new command "git reflog expire" can be
   used to truncate older reflog entries and entries that refer
   to commits that have been pruned away previously with older
   versions of git.

   Existing repositories that have been using reflog may get
   complaints from fsck-objects; please run "git reflog expire
   --all" first to remove reflog entries that refer to commits
   that are no longer in the repository before attempting to
   repack it.

 - git-branch knows how to rename branches and moves existing
   reflog data from the old branch to the new one.


* Packed refs

 - Repositories with hundreds of tags have been paying large
   overhead, both in storage and in runtime.  A new command,
   git-pack-refs, can be used to "pack" them in more efficient
   representation.

 - Clones and fetches over dumb transports are now aware of
   packed refs and can download from repositories that use
   them.


* Configuration

 - configuration related to colorize setting are consolidated
   under color.* namespace (older diff.color.*, status.color.*
   are still supported).


* Less external dependency

 - We no longer require the "merge" program from the RCS suite.
   All 3-way file-level merges are now done internally.

 - The original implementation of git-merge-recursive which was
   in Python has been removed; we have C implementation of it
   now.

 - git-shortlog is no longer a Perl script.  It no longer
   requires output piped from git-log; it can accept revision
   parameters directly on the command line.


* I18n

 - We have always encouraged the commit message to be encoded in
   UTF-8, but the users are allowed to use legacy encoding as
   appropriate for their projects.  This will continue to be the
   case.  However, a non UTF-8 commit encoding _must_ be
   explicitly set with i18n.commitencoding in the repository
   where a commit is made; otherwise git-commit-tree will
   complain if the log message does not look like a valid UTF-8
   string.

 - The value of i18n.commitencoding in the originating
   repository is recorded in the commit object on the "encoding"
   header, if it is not UTF-8.  git-log and friends notice this,
   and reencodes the message to the log output encoding when
   displaying, if they are different.  The log output encoding
   is determined by "git log --encoding=<encoding>",
   i18n.logoutputencoding configuration, or i18n.commitencoding
   configuration, in the decreasing order of preference, and
   defaults to UTF-8. 


* Foreign SCM interfaces

  - git-svn now requires the Perl SVN:: libraries, the
    command-line backend was too slow and limited.

  - the 'commit' command has been renamed to 'set-tree', and
    'dcommit' is the recommended replacement for day-to-day
    work.


* User support

 - Quite a lot of documentation updates.

 - Bash completion scripts have been updated heavily.

 - Better error messages for often used Porcelainish commands.


* Shallow clones

 - There is a partial support for 'shallow' repositories that
   keeps only recent history now.  A 'shallow clone' is created
   by specifying how deep that truncated history should be.

   Currently a shallow repository has number of limitations:

   - Cloning and fetching _from_ a shallow clone are not
     supported (nor tested -- so they might work by accident but
     they are not expected to).

   - Pushing from nor into a shallow clone are not expected to
     work.

   - Merging inside a shallow repository would work as long as a
     merge base is found in the recent history, but otherwise it
     will be like merging unrelated histories and may result in
     huge conflicts.

   but this would be more than adequate for people who want to
   look at near the tip of a big project with a deep history and
   send patches in e-mail format.

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

* Re: Draft v1.5.0 release notes
  2007-01-02  0:08 Draft v1.5.0 release notes Junio C Hamano
@ 2007-01-02  2:31 ` Steven Grimm
  2007-01-02  2:57   ` Shawn O. Pearce
  2007-01-02  7:22 ` David Kågedal
  1 sibling, 1 reply; 5+ messages in thread
From: Steven Grimm @ 2007-01-02  2:31 UTC (permalink / raw)
  To: Junio C Hamano; +Cc: git

Junio C Hamano wrote:
>  - 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, this 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.  This is not enabled by default.
>
>  - 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.  This is not
>    enabled by default.
>   

For people in non-public development environments, where there's 
absolutely no possibility of someone hitting a repo with an old client, 
presumably these options should both be enabled. I wonder if it makes 
sense to add an option to git-init-db to create a configuration file 
with all the latest stuff enabled -- or better still, something like

git-init-db --min-version=1.4.2

that would enable all the non-backward-compatible stuff in the newly 
created repository. And then a special case "--min-version=current" to 
use all the most optimal settings for the current release, useful in 
environments like corporate LANs where the tool versions are centrally 
managed.

Likewise, something like

git-repo-config --min-version=1.5.0

could be used to set all the options in an existing repo (presumably 
this would not allow you to move backwards, just upgrade) for cases 
where clients are known to have all upgraded to at least a particular 
version.

Maybe that last purpose would be better served by a "git-upgrade" 
command that, for example, could rebuild old packfiles in the new more 
efficient format and write out the appropriate configuration. Though one 
would have to take pains to point out that running that command was NOT 
a required step when upgrading to a new git release, and would in fact 
be a bad idea for projects being accessed by older clients.

-Steve

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

* Re: Draft v1.5.0 release notes
  2007-01-02  2:31 ` Steven Grimm
@ 2007-01-02  2:57   ` Shawn O. Pearce
  0 siblings, 0 replies; 5+ messages in thread
From: Shawn O. Pearce @ 2007-01-02  2:57 UTC (permalink / raw)
  To: Steven Grimm; +Cc: Junio C Hamano, git

Steven Grimm <koreth@midwinter.com> wrote:
> Junio C Hamano wrote:
> > - 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, this 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.  This is not enabled by default.
> >
> > - 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.  This is not
> >   enabled by default.
> >  
> 
> For people in non-public development environments where there's 
> absolutely no possibility of someone hitting a repo with an old client, 
> presumably these options should both be enabled.

Or even in public ones, but where access by dumb clients isn't
offered (only anonymous or ssh based git native protocol is used).

> I wonder if it makes 
> sense to add an option to git-init-db to create a configuration file 
> with all the latest stuff enabled -- or better still, something like
> 
> git-init-db --min-version=1.4.2

That's an interesting idea.  Most users don't invoke init-db directly
however, they are using clone to copy someone else's repository.
But that option could easily be offered on both commands, with
clone just passing it through to init-db.
 
> that would enable all the non-backward-compatible stuff in the newly 
> created repository. And then a special case "--min-version=current" to 
> use all the most optimal settings for the current release, useful in 
> environments like corporate LANs where the tool versions are centrally 
> managed.

Actually I wonder if "--min-version=current" shouldn't just be the
default.  Most users are going to init-db or clone locally and use
only the current version of Git (or later) against that repository.

Though that probably would break someone who runs multiple versions
of Git on the same system, because they have some strange reason
for doing so[*1*].  And it would certainly cause problems for
users who then rsync that repository (or scp it) to a webhost and
expect users with older versions of Git to be able to access it
with a commit-walker client.  But that would be less of a problem
if we could teach users to first clone their repository before
publishing it, e.g.:

    git clone --bare --min-version=1.2 . ../myproj.git


*1*: I'm not talking about Git developers here.  I think most Git
     developers run a `production` version of Git that they use for
     actual revisioning, and other versions for testing, and those
     testing versions are only used against testing repositories
     that hold non-live data.

-- 
Shawn.

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

* Re: Draft v1.5.0 release notes
  2007-01-02  0:08 Draft v1.5.0 release notes Junio C Hamano
  2007-01-02  2:31 ` Steven Grimm
@ 2007-01-02  7:22 ` David Kågedal
  2007-01-02  8:23   ` Shawn O. Pearce
  1 sibling, 1 reply; 5+ messages in thread
From: David Kågedal @ 2007-01-02  7:22 UTC (permalink / raw)
  To: git

Junio C Hamano <junkio@cox.net> writes:

> * Foreign SCM interfaces
> 
>   - git-svn now requires the Perl SVN:: libraries, the
>     command-line backend was too slow and limited.
> 
>   - the 'commit' command has been renamed to 'set-tree', and
>     'dcommit' is the recommended replacement for day-to-day
>     work.

The second item in this list is misleading.  It states that the
"comit" subcommand has been renamed.  But I don't believe it's the
"commit" subcommand of the "git" command.  So what is it a subcommand
to?

-- 
David Kågedal

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

* Re: Draft v1.5.0 release notes
  2007-01-02  7:22 ` David Kågedal
@ 2007-01-02  8:23   ` Shawn O. Pearce
  0 siblings, 0 replies; 5+ messages in thread
From: Shawn O. Pearce @ 2007-01-02  8:23 UTC (permalink / raw)
  To: David Kågedal; +Cc: git, Junio C Hamano

David K?gedal <davidk@lysator.liu.se> wrote:
> Junio C Hamano <junkio@cox.net> writes:
> 
> > * Foreign SCM interfaces
> > 
> >   - git-svn now requires the Perl SVN:: libraries, the
> >     command-line backend was too slow and limited.
> > 
> >   - the 'commit' command has been renamed to 'set-tree', and
> >     'dcommit' is the recommended replacement for day-to-day
> >     work.
> 
> The second item in this list is misleading.  It states that the
> "comit" subcommand has been renamed.  But I don't believe it's the
> "commit" subcommand of the "git" command.  So what is it a subcommand
> to?

git-svn.  As in `git svn commit` is now `git svn set-tree`.

I agree with your point though.  My early readings of the above
quoted section just assumed git-svn, as I knew that was what Junio
was talking about.  Now that I read it again, I have to agree that
it is not quite as clear as I had originally thought.

-- 
Shawn.

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

end of thread, other threads:[~2007-01-02  8:23 UTC | newest]

Thread overview: 5+ messages (download: mbox.gz follow: Atom feed
-- links below jump to the message on this page --
2007-01-02  0:08 Draft v1.5.0 release notes Junio C Hamano
2007-01-02  2:31 ` Steven Grimm
2007-01-02  2:57   ` Shawn O. Pearce
2007-01-02  7:22 ` David Kågedal
2007-01-02  8:23   ` Shawn O. Pearce

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).