V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
git
Pro Git
Atlassian Git Tutorial
Pro Git 简体中文翻译
GitX
CodingNET
V2EX  ›  git

Git 2.6 Release Notes

  •  
  •   CodingNET · 2015-09-30 23:03:28 +08:00 · 3108 次点击
    这是一个创建于 3348 天前的主题,其中的信息可能已经有所发展或是发生改变。
    Git 2.6 Release Notes
    =====================

    Updates since v2.5
    ------------------

    UI, Workflows & Features

    * An asterisk as a substring (as opposed to the entirety) of a path
    component for both side of a refspec, e.g.
    "refs/heads/o*:refs/remotes/heads/i*", is now allowed.

    * New userdiff pattern definition for fountain screenwriting markup
    format has been added.

    * "git log" and friends learned a new "--date=format:..." option to
    format timestamps using system's strftime(3).

    * "git fast-import" learned to respond to the get-mark command via
    its cat-blob-fd interface.

    * "git rebase -i" learned "drop commit-object-name subject" command
    as another way to skip replaying of a commit.

    * A new configuration variable can enable "--follow" automatically
    when "git log" is run with one pathspec argument.

    * "git status" learned to show a more detailed information regarding
    the "rebase -i" session in progress.

    * "git cat-file" learned "--batch-all-objects" option to enumerate all
    available objects in the repository more quickly than "rev-list
    --all --objects" (the output includes unreachable objects, though).

    * "git fsck" learned to ignore errors on a set of known-to-be-bad
    objects, and also allows the warning levels of various kinds of
    non-critical breakages to be tweaked.

    * "git rebase -i"'s list of todo is made configurable.

    * "git send-email" now performs alias-expansion on names that are
    given via --cccmd, etc.

    * An environment variable GIT_REPLACE_REF_BASE tells Git to look into
    refs hierarchy other than refs/replace/ for the object replacement
    data.

    * Allow untracked cache (experimental) to be used when sparse
    checkout (experimental) is also in use.

    * "git pull --rebase" has been taught to pay attention to
    rebase.autostash configuration.

    * The command-line completion script (in contrib/) has been updated.

    * A negative !ref entry in multi-value transfer.hideRefs
    configuration can be used to say "don't hide this one".

    * After "git am" without "-3" stops, running "git am -3" pays attention
    to "-3" only for the patch that caused the original invocation
    to stop.

    * When linked worktree is used, simultaneous "notes merge" instances
    for the same ref in refs/notes/* are prevented from stomping on
    each other.

    * "git send-email" learned a new option --smtp-auth to limit the SMTP
    AUTH mechanisms to be used to a subset of what the system library
    supports.

    * A new configuration variable http.sslVersion can be used to specify
    what specific version of SSL/TLS to use to make a connection.

    * "git notes merge" can be told with "--strategy=<how>" option how to
    automatically handle conflicts; this can now be configured by
    setting notes.mergeStrategy configuration variable.

    * "git log --cc" did not show any patch, even though most of the time
    the user meant "git log --cc -p -m" to see patch output for commits
    with a single parent, and combined diff for merge commits. The
    command is taught to DWIM "--cc" (without "--raw" and other forms
    of output specification) to "--cc -p -m".

    * "git config --list" output was hard to parse when values consist of
    multiple lines. "--name-only" option is added to help this.

    * A handful of usability & cosmetic fixes to gitk and l10n updates.

    * A completely empty e-mail address <> is now allowed in the authors
    file used by git-svn, to match the way it accepts the output from
    authors-prog.


    Performance, Internal Implementation, Development Support etc.

    * In preparation for allowing different "backends" to store the refs
    in a way different from the traditional "one ref per file in
    $GIT_DIR or in a $GIT_DIR/packed-refs file" filesystem storage,
    direct filesystem access to ref-like things like CHERRY_PICK_HEAD
    from scripts and programs has been reduced.

    * Computation of untracked status indicator by bash prompt
    script (in contrib/) has been optimized.

    * Memory use reduction when commit-slab facility is used to annotate
    sparsely (which is not recommended in the first place).

    * Clean up refs API and make "git clone" less intimate with the
    implementation detail.

    * "git pull" was reimplemented in C.

    * The packet tracing machinery allows to capture an incoming pack
    data to a file for debugging.

    * Move machinery to parse human-readable scaled numbers like 1k, 4M,
    and 2G as an option parameter's value from pack-objects to
    parse-options API, to make it available to other codepaths.

    * "git verify-tag" and "git verify-commit" have been taught to share
    more code, and then learned to optionally show the verification
    message from the underlying GPG implementation.

    * Various enhancements around "git am" reading patches generated by
    foreign SCM have been made.

    * Ref listing by "git branch -l" and "git tag -l" commands has
    started to be rebuilt, based on the for-each-ref machinery.

    * The code to perform multi-tree merges has been taught to repopulate
    the cache-tree upon a successful merge into the index, so that
    subsequent "diff-index --cached" (hence "status") and "write-tree"
    (hence "commit") will go faster.

    The same logic in "git checkout" may now be removed, but that is a
    separate issue.

    * Tests that assume how reflogs are represented on the filesystem too
    much have been corrected.

    * "git am" has been rewritten in "C".

    * git_path() and mkpath() are handy helper functions but it is easy
    to misuse, as the callers need to be careful to keep the number of
    active results below 4. Their uses have been reduced.

    * The "lockfile" API has been rebuilt on top of a new "tempfile" API.

    * To prepare for allowing a different "ref" backend to be plugged in
    to the system, update_ref()/delete_ref() have been taught about
    ref-like things like MERGE_HEAD that are per-worktree (they will
    always be written to the filesystem inside $GIT_DIR).

    * The gitmodules API that is accessed from the C code learned to
    cache stuff lazily.


    Also contains various documentation updates and code clean-ups.


    Fixes since v2.5
    ----------------

    Unless otherwise noted, all the fixes since v2.5 in the maintenance
    track are contained in this release (see the maintenance releases'
    notes for details).

    * "git subtree" (in contrib/) depended on "git log" output to be
    stable, which was a no-no. Apply a workaround to force a
    particular date format.
    (merge e7aac44 da/subtree-date-confusion later to maint).

    * An attempt to delete a ref by pushing into a repository whose HEAD
    symbolic reference points at an unborn branch that cannot be
    created due to ref D/F conflict (e.g. refs/heads/a/b exists, HEAD
    points at refs/heads/a) failed.
    (merge b112b14 jx/do-not-crash-receive-pack-wo-head later to maint).

    * The low-level "git send-pack" did not honor 'user.signingkey'
    configuration variable when sending a signed-push.
    (merge d830d39 db/send-pack-user-signingkey later to maint).

    * "sparse checkout" misbehaved for a path that is excluded from the
    checkout when switching between branches that differ at the path.
    (merge 7d78241 as/sparse-checkout-removal later to maint).

    * An experimental "untracked cache" feature used uname(2) in a
    slightly unportable way.
    (merge 100e433 cb/uname-in-untracked later to maint).

    * A "rebase" replays changes of the local branch on top of something
    else, as such they are placed in stage #3 and referred to as
    "theirs", while the changes in the new base, typically a foreign
    work, are placed in stage #2 and referred to as "ours". Clarify
    the "checkout --ours/--theirs".
    (merge f303016 se/doc-checkout-ours-theirs later to maint).

    * The "rev-parse --parseopt" mode parsed the option specification
    and the argument hint in a strange way to allow '=' and other
    special characters in the option name while forbidding them from
    the argument hint. This made it impossible to define an option
    like "--pair <key>=<value>" with "pair=key=value" specification,
    which instead would have defined a "--pair=key <value>" option.
    (merge 2d893df ib/scripted-parse-opt-better-hint-string later to maint).

    * Often a fast-import stream builds a new commit on top of the
    previous commit it built, and it often unconditionally emits a
    "from" command to specify the first parent, which can be omitted in
    such a case. This caused fast-import to forget the tree of the
    previous commit and then re-read it from scratch, which was
    inefficient. Optimize for this common case.
    (merge 0df3245 mh/fast-import-optimize-current-from later to maint).

    * Running an aliased command from a subdirectory when the .git thing
    in the working tree is a gitfile pointing elsewhere did not work.
    (merge d95138e nd/export-worktree later to maint).

    * "Is this subdirectory a separate repository that should not be
    touched?" check "git clean" was inefficient. This was replaced
    with a more optimized check.
    (merge fbf2fec ee/clean-remove-dirs later to maint).

    * The "new-worktree-mode" hack in "checkout" that was added in
    nd/multiple-work-trees topic has been removed by updating the
    implementation of new "worktree add".
    (merge 65f9b75 es/worktree-add-cleanup later to maint).

    * Remove remaining cruft from "git checkout --to", which
    transitioned to "git worktree add".
    (merge 114ff88 es/worktree-add later to maint).

    * An off-by-one error made "git remote" to mishandle a remote with a
    single letter nickname.
    (merge bc598c3 mh/get-remote-group-fix later to maint).

    * "git clone $URL", when cloning from a site whose sole purpose is to
    host a single repository (hence, no path after <scheme>://<site>/),
    tried to use the site name as the new repository name, but did not
    remove username or password when <site> part was of the form
    <user>@<pass>:<host>. The code is taught to redact these.
    (merge adef956 ps/guess-repo-name-at-root later to maint).

    * Running tests with the "-x" option to make them verbose had some
    unpleasant interactions with other features of the test suite.
    (merge 9b5fe78 jk/test-with-x later to maint).

    * t1509 test that requires a dedicated VM environment had some
    bitrot, which has been corrected.
    (merge faacc5a ps/t1509-chroot-test-fixup later to maint).

    * "git pull" in recent releases of Git has a regression in the code
    that allows custom path to the --upload-pack=<program>. This has
    been corrected.

    Note that this is irrelevant for 'master' with "git pull" rewritten
    in C.
    (merge 13e0e28 mm/pull-upload-pack later to maint).

    * When trying to see that an object does not exist, a state errno
    leaked from our "first try to open a packfile with O_NOATIME and
    then if it fails retry without it" logic on a system that refuses
    O_NOATIME. This confused us and caused us to die, saying that the
    packfile is unreadable, when we should have just reported that the
    object does not exist in that packfile to the caller.
    (merge dff6f28 cb/open-noatime-clear-errno later to maint).

    * The codepath to produce error messages had a hard-coded limit to
    the size of the message, primarily to avoid memory allocation while
    calling die().
    (merge f4c3edc jk/long-error-messages later to maint).

    * strbuf_read() used to have one extra iteration (and an unnecessary
    strbuf_grow() of 8kB), which was eliminated.
    (merge 3ebbd00 jh/strbuf-read-use-read-in-full later to maint).

    * We rewrote one of the build scripts in Perl but this reimplements
    in Bourne shell.
    (merge 57cee8a sg/help-group later to maint).

    * The experimental untracked-cache feature were buggy when paths with
    a few levels of subdirectories are involved.
    (merge 73f9145 dt/untracked-subdir later to maint).

    * "interpret-trailers" helper mistook a single-liner log message that
    has a colon as the end of existing trailer.

    * The "interpret-trailers" helper mistook a multi-paragraph title of
    a commit log message with a colon in it as the end of the trailer
    block.
    (merge 5c99995 cc/trailers-corner-case-fix later to maint).

    * "git describe" without argument defaulted to describe the HEAD
    commit, but "git describe --contains" didn't. Arguably, in a
    repository used for active development, such defaulting would not
    be very useful as the tip of branch is typically not tagged, but it
    is better to be consistent.
    (merge 2bd0706 sg/describe-contains later to maint).

    * The client side codepaths in "git push" have been cleaned up
    and the user can request to perform an optional "signed push",
    i.e. sign only when the other end accepts signed push.
    (merge 68c757f db/push-sign-if-asked later to maint).

    * Because the configuration system does not allow "alias.0foo" and
    "pager.0foo" as the configuration key, the user cannot use '0foo'
    as a custom command name anyway, but "git 0foo" tried to look these
    keys up and emitted useless warnings before saying '0foo is not a
    git command'. These warning messages have been squelched.
    (merge 9e9de18 jk/fix-alias-pager-config-key-warnings later to maint).

    * "git rev-list" does not take "--notes" option, but did not complain
    when one is given.
    (merge 2aea7a5 jk/rev-list-has-no-notes later to maint).

    * When re-priming the cache-tree opportunistically while committing
    the in-core index as-is, we mistakenly invalidated the in-core
    index too aggressively, causing the experimental split-index code
    to unnecessarily rewrite the on-disk index file(s).
    (merge 475a344 dt/commit-preserve-base-index-upon-opportunistic-cache-tree-update later to maint).

    * "git archive" did not use zip64 extension when creating an archive
    with more than 64k entries, which nobody should need, right ;-)?
    (merge 88329ca rs/archive-zip-many later to maint).

    * The code in "multiple-worktree" support that attempted to recover
    from an inconsistent state updated an incorrect file.
    (merge 82fde87 nd/fixup-linked-gitdir later to maint).

    * On case insensitive systems, "git p4" did not work well with client
    specs.

    * "git init empty && git -C empty log" said "bad default revision 'HEAD'",
    which was found to be a bit confusing to new users.
    (merge ce11360 jk/log-missing-default-HEAD later to maint).

    * Recent versions of scripted "git am" has a performance regression in
    "git am --skip" codepath, which no longer exists in the built-in
    version on the 'master' front. Fix the regression in the last
    scripted version that appear in 2.5.x maintenance track and older.
    (merge b9d6689 js/maint-am-skip-performance-regression later to maint).

    * The branch descriptions that are set with "git branch --edit-description"
    option were used in many places but they weren't clearly documented.
    (merge 561d2b7 po/doc-branch-desc later to maint).

    * Code cleanups and documentation updates.
    (merge 1c601af es/doc-clean-outdated-tools later to maint).
    (merge 3581304 kn/tag-doc-fix later to maint).
    (merge 3a59e59 kb/i18n-doc later to maint).
    (merge 45abdee sb/remove-unused-var-from-builtin-add later to maint).
    (merge 14691e3 sb/parse-options-codeformat later to maint).
    (merge 4a6ada3 ad/bisect-cleanup later to maint).
    (merge da4c5ad ta/docfix-index-format-tech later to maint).
    (merge ae25fd3 sb/check-return-from-read-ref later to maint).
    (merge b3325df nd/dwim-wildcards-as-pathspecs later to maint).
    (merge 7aa9b9b sg/wt-status-header-inclusion later to maint).
    (merge f04c690 as/docfix-reflog-expire-unreachable later to maint).
    (merge 1269847 sg/t3020-typofix later to maint).
    (merge 8b54c23 jc/calloc-pathspec later to maint).
    (merge a6926b8 po/po-readme later to maint).
    (merge 54d160e ss/fix-config-fd-leak later to maint).
    (merge b80fa84 ah/submodule-typofix-in-error later to maint).
    (merge 99885bc ah/reflog-typofix-in-error later to maint).
    (merge 9476c2c ah/read-tree-usage-string later to maint).
    (merge b8c1d27 ah/pack-objects-usage-strings later to maint).
    (merge 486e1e1 br/svn-doc-include-paths-config later to maint).
    (merge 1733ed3 ee/clean-test-fixes later to maint).
    (merge 5fcadc3 gb/apply-comment-typofix later to maint).
    (merge b894d3e mp/t7060-diff-index-test later to maint).
    (merge d238710 as/config-doc-markup-fix later to maint).
    5 条回复    2015-10-01 21:08:18 +08:00
    skydiver
        1
    skydiver  
       2015-09-30 23:14:30 +08:00   ❤️ 1
    homebrew 里都更新好几天了。。
    skydiver
        2
    skydiver  
       2015-09-30 23:14:57 +08:00
    另外没必要在这里贴全文。给个链接就行
    LazyZhu
        3
    LazyZhu  
       2015-09-30 23:47:53 +08:00   ❤️ 1
    Citrus
        4
    Citrus  
       2015-10-01 08:18:15 +08:00 via iPhone   ❤️ 1
    贵司已经要这样来刷存在感了么?节操呢?
    lidashuang
        5
    lidashuang  
       2015-10-01 21:08:18 +08:00
    有意思吗
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2800 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 26ms · UTC 02:31 · PVG 10:31 · LAX 18:31 · JFK 21:31
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.