t4119: test autocomputing -p<n> for traditional diff input.
[git/haiku.git] / Documentation / RelNotes-1.5.0.txt
blob84e7eaf3c879213b2d3ab169217f93f5c3154882
1 GIT v1.5.0 Release Notes
2 ========================
4 Old news
5 --------
7 This section is for people who are upgrading from ancient
8 versions of git.  Although all of the changes in this section
9 happened before the current v1.4.4 release, they are summarized
10 here in the v1.5.0 release notes for people who skipped earlier
11 versions.
13 As of git v1.5.0 there are some optional features that changes
14 the repository to allow data to be stored and transferred more
15 efficiently.  These features are not enabled by default, as they
16 will make the repository unusable with older versions of git.
17 Specifically, the available options are:
19  - There is a configuration variable core.legacyheaders that
20    changes the format of loose objects so that they are more
21    efficient to pack and to send out of the repository over git
22    native protocol, since v1.4.2.  However, loose objects
23    written in the new format cannot be read by git older than
24    that version; people fetching from your repository using
25    older clients over dumb transports (e.g. http) using older
26    versions of git will also be affected.
28  - Since v1.4.3, configuration repack.usedeltabaseoffset allows
29    packfile to be created in more space efficient format, which
30    cannot be read by git older than that version.
32 The above two are not enabled by default and you explicitly have
33 to ask for them, because these two features make repositories
34 unreadable by older versions of git, and in v1.5.0 we still do
35 not enable them by default for the same reason.  We will change
36 this default probably 1 year after 1.4.2's release, when it is
37 reasonable to expect everybody to have new enough version of
38 git.
40  - 'git pack-refs' appeared in v1.4.4; this command allows tags
41    to be accessed much more efficiently than the traditional
42    'one-file-per-tag' format.  Older git-native clients can
43    still fetch from a repository that packed and pruned refs
44    (the server side needs to run the up-to-date version of git),
45    but older dumb transports cannot.  Packing of refs is done by
46    an explicit user action, either by use of "git pack-refs
47    --prune" command or by use of "git gc" command.
49  - 'git -p' to paginate anything -- many commands do pagination
50    by default on a tty.  Introduced between v1.4.1 and v1.4.2;
51    this may surprise old timers.
53  - 'git archive' superseded 'git tar-tree' in v1.4.3;
55  - 'git cvsserver' was new invention in v1.3.0;
57  - 'git repo-config', 'git grep', 'git rebase' and 'gitk' were
58    seriously enhanced during v1.4.0 timeperiod.
60  - 'gitweb' became part of git.git during v1.4.0 timeperiod and
61    seriously modified since then.
63  - reflog is an v1.4.0 invention.  This allows you to name a
64    revision that a branch used to be at (e.g. "git diff
65    master@{yesterday} master" allows you to see changes since
66    yesterday's tip of the branch).
69 Updates in v1.5.0 since v1.4.4 series
70 -------------------------------------
72 * Index manipulation
74  - git-add is to add contents to the index (aka "staging area"
75    for the next commit), whether the file the contents happen to
76    be is an existing one or a newly created one.
78  - git-add without any argument does not add everything
79    anymore.  Use 'git-add .' instead.  Also you can add
80    otherwise ignored files with an -f option.
82  - git-add tries to be more friendly to users by offering an
83    interactive mode ("git-add -i").
85  - git-commit <path> used to refuse to commit if <path> was
86    different between HEAD and the index (i.e. update-index was
87    used on it earlier).  This check was removed.
89  - git-rm is much saner and safer.  It is used to remove paths
90    from both the index file and the working tree, and makes sure
91    you are not losing any local modification before doing so.
93  - git-reset <tree> <paths>... can be used to revert index
94    entries for selected paths.
96  - git-update-index is much less visible.  Many suggestions to
97   use the command in git output and documentation have now been
98   replaced by simpler commands such as "git add" or "git rm".
101 * Repository layout and objects transfer
103  - The data for origin repository is stored in the configuration
104    file $GIT_DIR/config, not in $GIT_DIR/remotes/, for newly
105    created clones.  The latter is still supported and there is
106    no need to convert your existing repository if you are
107    already comfortable with your workflow with the layout.
109  - git-clone always uses what is known as "separate remote"
110    layout for a newly created repository with a working tree.
112    A repository with the separate remote layout starts with only
113    one default branch, 'master', to be used for your own
114    development.  Unlike the traditional layout that copied all
115    the upstream branches into your branch namespace (while
116    renaming their 'master' to your 'origin'), the new layout
117    puts upstream branches into local "remote-tracking branches"
118    with their own namespace. These can be referenced with names
119    such as "origin/$upstream_branch_name" and are stored in
120    .git/refs/remotes rather than .git/refs/heads where normal
121    branches are stored.
123    This layout keeps your own branch namespace less cluttered,
124    avoids name collision with your upstream, makes it possible
125    to automatically track new branches created at the remote
126    after you clone from it, and makes it easier to interact with
127    more than one remote repository (you can use "git remote" to
128    add other repositories to track).  There might be some
129    surprises:
131    * 'git branch' does not show the remote tracking branches.
132      It only lists your own branches.  Use '-r' option to view
133      the tracking branches.
135    * If you are forking off of a branch obtained from the
136      upstream, you would have done something like 'git branch
137      my-next next', because traditional layout dropped the
138      tracking branch 'next' into your own branch namespace.
139      With the separate remote layout, you say 'git branch next
140      origin/next', which allows you to use the matching name
141      'next' for your own branch.  It also allows you to track a
142      remote other than 'origin' (i.e. where you initially cloned
143      from) and fork off of a branch from there the same way
144      (e.g. "git branch mingw j6t/master").
146    Repositories initialized with the traditional layout continue
147    to work.
149  - New branches that appear on the origin side after a clone is
150    made are also tracked automatically.  This is done with an
151    wildcard refspec "refs/heads/*:refs/remotes/origin/*", which
152    older git does not understand, so if you clone with 1.5.0,
153    you would need to downgrade remote.*.fetch in the
154    configuration file to specify each branch you are interested
155    in individually if you plan to fetch into the repository with
156    older versions of git (but why would you?).
158  - Similarly, wildcard refspec "refs/heads/*:refs/remotes/me/*"
159    can be given to "git-push" command to update the tracking
160    branches that is used to track the repository you are pushing
161    from on the remote side.
163  - git-branch and git-show-branch know remote tracking branches
164    (use the command line switch "-r" to list only tracked branches).
166  - git-push can now be used to delete a remote branch or a tag.
167    This requires the updated git on the remote side (use "git
168    push <remote> :refs/heads/<branch>" to delete "branch").
170  - git-push more aggressively keeps the transferred objects
171    packed.  Earlier we recommended to monitor amount of loose
172    objects and repack regularly, but you should repack when you
173    accumulated too many small packs this way as well.  Updated
174    git-count-objects helps you with this.
176  - git-fetch also more aggressively keeps the transferred objects
177    packed.  This behavior of git-push and git-fetch can be
178    tweaked with a single configuration transfer.unpacklimit (but
179    usually there should not be any need for a user to tweak it).
181  - A new command, git-remote, can help you manage your remote
182    tracking branch definitions.
184  - You may need to specify explicit paths for upload-pack and/or
185    receive-pack due to your ssh daemon configuration on the
186    other end.  This can now be done via remote.*.uploadpack and
187    remote.*.receivepack configuration.
190 * Bare repositories
192  - Certain commands change their behavior in a bare repository
193    (i.e. a repository without associated working tree).  We use
194    a fairly conservative heuristic (if $GIT_DIR is ".git", or
195    ends with "/.git", the repository is not bare) to decide if a
196    repository is bare, but "core.bare" configuration variable
197    can be used to override the heuristic when it misidentifies
198    your repository.
200  - git-fetch used to complain updating the current branch but
201    this is now allowed for a bare repository.  So is the use of
202    'git-branch -f' to update the current branch.
204  - Porcelain-ish commands that require a working tree refuses to
205    work in a bare repository.
208 * Reflog
210  - Reflog records the history from the view point of the local
211    repository. In other words, regardless of the real history,
212    the reflog shows the history as seen by one particular
213    repository (this enables you to ask "what was the current
214    revision in _this_ repository, yesterday at 1pm?").  This
215    facility is enabled by default for repositories with working
216    trees, and can be accessed with the "branch@{time}" and
217    "branch@{Nth}" notation.
219  - "git show-branch" learned showing the reflog data with the
220    new -g option.  "git log" has -s option to view reflog
221    entries in a more verbose manner.
223  - git-branch knows how to rename branches and moves existing
224    reflog data from the old branch to the new one.
226  - In addition to the reflog support in v1.4.4 series, HEAD
227    reference maintains its own log.  "HEAD@{5.minutes.ago}"
228    means the commit you were at 5 minutes ago, which takes
229    branch switching into account.  If you want to know where the
230    tip of your current branch was at 5 minutes ago, you need to
231    explicitly say its name (e.g. "master@{5.minutes.ago}") or
232    omit the refname altogether i.e. "@{5.minutes.ago}".
234  - The commits referred to by reflog entries are now protected
235    against pruning.  The new command "git reflog expire" can be
236    used to truncate older reflog entries and entries that refer
237    to commits that have been pruned away previously with older
238    versions of git.
240    Existing repositories that have been using reflog may get
241    complaints from fsck-objects and may not be able to run
242    git-repack, if you had run git-prune from older git; please
243    run "git reflog expire --stale-fix --all" first to remove
244    reflog entries that refer to commits that are no longer in
245    the repository when that happens.
248 * Crufts removal
250  - We used to say "old commits are retrievable using reflog and
251    'master@{yesterday}' syntax as long as you haven't run
252    git-prune".  We no longer have to say the latter half of the
253    above sentence, as git-prune does not remove things reachable
254    from reflog entries.
256  - 'git-prune' by default does not remove _everything_
257    unreachable, as there is a one-day grace period built-in.
259  - There is a toplevel garbage collector script, 'git-gc', that
260    runs periodic cleanup functions, including 'git-repack -a -d',
261    'git-reflog expire', 'git-pack-refs --prune', and 'git-rerere
262    gc'.
264  - The output from fsck ("fsck-objects" is called just "fsck"
265    now, but the old name continues to work) was needlessly
266    alarming in that it warned missing objects that are reachable
267    only from dangling objects.  This has been corrected and the
268    output is much more useful.
271 * Detached HEAD
273  - You can use 'git-checkout' to check out an arbitrary revision
274    or a tag as well, instead of named branches.  This will
275    dissociate your HEAD from the branch you are currently on.
277    A typical use of this feature is to "look around".  E.g.
279         $ git checkout v2.6.16
280         ... compile, test, etc.
281         $ git checkout v2.6.17
282         ... compile, test, etc.
284  - After detaching your HEAD, you can go back to an existing
285    branch with usual "git checkout $branch".  Also you can
286    start a new branch using "git checkout -b $newbranch" to
287    start a new branch at that commit.
289  - You can even pull from other repositories, make merges and
290    commits while your HEAD is detached.  Also you can use "git
291    reset" to jump to arbitrary commit, while still keeping your
292    HEAD detached.
294    Going back to attached state (i.e. on a particular branch) by
295    "git checkout $branch" can lose the current stat you arrived
296    in these ways, and "git checkout" refuses when the detached
297    HEAD is not pointed by any existing ref (an existing branch,
298    a remote tracking branch or a tag).  This safety can be
299    overridden with "git checkout -f $branch".
302 * Packed refs
304  - Repositories with hundreds of tags have been paying large
305    overhead, both in storage and in runtime, due to the
306    traditional one-ref-per-file format.  A new command,
307    git-pack-refs, can be used to "pack" them in more efficient
308    representation (you can let git-gc do this for you).
310  - Clones and fetches over dumb transports are now aware of
311    packed refs and can download from repositories that use
312    them.
315 * Configuration
317  - configuration related to color setting are consolidated under
318    color.* namespace (older diff.color.*, status.color.* are
319    still supported).
321  - 'git-repo-config' command is accessible as 'git-config' now.
324 * Updated features
326  - git-describe uses better criteria to pick a base ref.  It
327    used to pick the one with the newest timestamp, but now it
328    picks the one that is topologically the closest (that is,
329    among ancestors of commit C, the ref T that has the shortest
330    output from "git-rev-list T..C" is chosen).
332  - git-describe gives the number of commits since the base ref
333    between the refname and the hash suffix.  E.g. the commit one
334    before v2.6.20-rc6 in the kernel repository is:
336         v2.6.20-rc5-306-ga21b069
338    which tells you that its object name begins with a21b069,
339    v2.6.20-rc5 is an ancestor of it (meaning, the commit
340    contains everything -rc5 has), and there are 306 commits
341    since v2.6.20-rc5.
343  - git-describe with --abbrev=0 can be used to show only the
344    name of the base ref.
346  - git-blame learned a new option, --incremental, that tells it
347    to output the blames as they are assigned.  A sample script
348    to use it is also included as contrib/blameview.
350  - git-blame starts annotating from the working tree by default.
353 * Less external dependency
355  - We no longer require the "merge" program from the RCS suite.
356    All 3-way file-level merges are now done internally.
358  - The original implementation of git-merge-recursive which was
359    in Python has been removed; we have a C implementation of it
360    now.
362  - git-shortlog is no longer a Perl script.  It no longer
363    requires output piped from git-log; it can accept revision
364    parameters directly on the command line.
367 * I18n
369  - We have always encouraged the commit message to be encoded in
370    UTF-8, but the users are allowed to use legacy encoding as
371    appropriate for their projects.  This will continue to be the
372    case.  However, a non UTF-8 commit encoding _must_ be
373    explicitly set with i18n.commitencoding in the repository
374    where a commit is made; otherwise git-commit-tree will
375    complain if the log message does not look like a valid UTF-8
376    string.
378  - The value of i18n.commitencoding in the originating
379    repository is recorded in the commit object on the "encoding"
380    header, if it is not UTF-8.  git-log and friends notice this,
381    and reencodes the message to the log output encoding when
382    displaying, if they are different.  The log output encoding
383    is determined by "git log --encoding=<encoding>",
384    i18n.logoutputencoding configuration, or i18n.commitencoding
385    configuration, in the decreasing order of preference, and
386    defaults to UTF-8.
388  - Tools for e-mailed patch application now default to -u
389    behavior; i.e. it always re-codes from the e-mailed encoding
390    to the encoding specified with i18n.commitencoding.  This
391    unfortunately forces projects that have happily been using a
392    legacy encoding without setting i18n.commitencoding to set
393    the configuration, but taken with other improvement, please
394    excuse us for this very minor one-time inconvenience.
397 * e-mailed patches
399  - See the above I18n section.
401  - git-format-patch now enables --binary without being asked.
402    git-am does _not_ default to it, as sending binary patch via
403    e-mail is unusual and is harder to review than textual
404    patches and it is prudent to require the person who is
405    applying the patch to explicitly ask for it.
407  - The default suffix for git-format-patch output is now ".patch",
408    not ".txt".  This can be changed with --suffix=.txt option,
409    or setting the config variable "format.suffix" to ".txt".
412 * Foreign SCM interfaces
414   - git-svn now requires the Perl SVN:: libraries, the
415     command-line backend was too slow and limited.
417   - the 'commit' subcommand of git-svn has been renamed to
418     'set-tree', and 'dcommit' is the recommended replacement for
419     day-to-day work.
421   - git fast-import backend.
424 * User support
426  - Quite a lot of documentation updates.
428  - Bash completion scripts have been updated heavily.
430  - Better error messages for often used Porcelainish commands.
432  - Git GUI.  This is a simple Tk based graphical interface for
433    common Git operations.
436 * Sliding mmap
438  - We used to assume that we can mmap the whole packfile while
439    in use, but with a large project this consumes huge virtual
440    memory space and truly huge ones would not fit in the
441    userland address space on 32-bit platforms.  We now mmap huge
442    packfile in pieces to avoid this problem.
445 * Shallow clones
447  - There is a partial support for 'shallow' repositories that
448    keeps only recent history.  A 'shallow clone' is created by
449    specifying how deep that truncated history should be
450    (e.g. "git clone --depth=5 git://some.where/repo.git").
452    Currently a shallow repository has number of limitations:
454    - Cloning and fetching _from_ a shallow clone are not
455      supported (nor tested -- so they might work by accident but
456      they are not expected to).
458    - Pushing from nor into a shallow clone are not expected to
459      work.
461    - Merging inside a shallow repository would work as long as a
462      merge base is found in the recent history, but otherwise it
463      will be like merging unrelated histories and may result in
464      huge conflicts.
466    but this would be more than adequate for people who want to
467    look at near the tip of a big project with a deep history and
468    send patches in e-mail format.