分布式版本控制系统 Git v2.9.3发布

jopen 3年前
   <p style="text-align: center;"><img alt="" src="https://simg.open-open.com/show/5c560e139fb603958c1e10433cb8108b.jpg" /></p>    <p>Git是一个开源的分布式版本控制系统,可以有效、高速的处理从很小到非常大的项目版本管理。Git 是 Linus Torvalds 为了帮助管理 Linux 内核开发而开发的一个开放源码的版本控制软件。Torvalds 开始着手开发 Git 是为了作为一种过渡方案来替代 BitKeeper,后者之前一直是 Linux 内核开发人员在全球使用的主要源代码工具。开放源码社区中的有些人觉得BitKeeper 的许可证并不适合开放源码社区的工作,因此 Torvalds 决定着手研究许可证更为灵活的版本控制系统。尽管最初 Git 的开发是为了辅助 Linux 内核开发的过程,但是我们已经发现在很多其他自由软件项目中也使用了 Git。</p>    <h2>更新日志</h2>    <p> * A helper function that takes the contents of a commit object and<br />    finds its subject line did not ignore leading blank lines, as is<br />    commonly done by other codepaths.  Make it ignore leading blank<br />    lines to match.</p>    <p> * Git does not know what the contents in the index should be for a<br />    path added with "git add -N" yet, so "git grep --cached" should not<br />    show hits (or show lack of hits, with -L) in such a path, but that<br />    logic does not apply to "git grep", i.e. searching in the working<br />    tree files.  But we did so by mistake, which has been corrected.</p>    <p> * "git rebase -i --autostash" did not restore the auto-stashed change<br />    when the operation was aborted.</p>    <p> * "git commit --amend --allow-empty-message -S" for a commit without<br />    any message body could have misidentified where the header of the<br />    commit object ends.</p>    <p> * More mark-up updates to typeset strings that are expected to<br />    literally typed by the end user in fixed-width font.</p>    <p> * For a long time, we carried an in-code comment that said our<br />    colored output would work only when we use fprintf/fputs on<br />    Windows, which no longer is the case for the past few years.</p>    <p> * "gc.autoPackLimit" when set to 1 should not trigger a repacking<br />    when there is only one pack, but the code counted poorly and did<br />    so.</p>    <p> * One part of "git am" had an oddball helper function that called<br />    stuff from outside "his" as opposed to calling what we have "ours",<br />    which was not gender-neutral and also inconsistent with the rest of<br />    the system where outside stuff is usuall called "theirs" in<br />    contrast to "ours".</p>    <p> * The test framework learned a new helper test_match_signal to<br />    check an exit code from getting killed by an expected signal.</p>    <p> * "git blame -M" missed a single line that was moved within the file.</p>    <p> * Fix recently introduced codepaths that are involved in parallel<br />    submodule operations, which gave up on reading too early, and<br />    could have wasted CPU while attempting to write under a corner<br />    case condition.</p>    <p> * "git grep -i" has been taught to fold case in non-ascii locales<br />    correctly.</p>    <p> * A test that unconditionally used "mktemp" learned that the command<br />    is not necessarily available everywhere.</p>    <p> * "git blame file" allowed the lineage of lines in the uncommitted,<br />    unadded contents of "file" to be inspected, but it refused when<br />    "file" did not appear in the current commit.  When "file" was<br />    created by renaming an existing file (but the change has not been<br />    committed), this restriction was unnecessarily tight.</p>    <p> * "git add -N dir/file && git write-tree" produced an incorrect tree<br />    when there are other paths in the same directory that sorts after<br />    "file".</p>    <p> * "git fetch http://user:pass@host/repo..." scrubbed the userinfo<br />    part, but "git push" didn't.</p>    <p> * An age old bug that caused "git diff --ignore-space-at-eol"<br />    misbehave has been fixed.</p>    <p> * "git notes merge" had a code to see if a path exists (and fails if<br />    it does) and then open the path for writing (when it doesn't).<br />    Replace it with open with O_EXCL.</p>    <p> * "git pack-objects" and "git index-pack" mostly operate with off_t<br />    when talking about the offset of objects in a packfile, but there<br />    were a handful of places that used "unsigned long" to hold that<br />    value, leading to an unintended truncation.</p>    <p> * Recent update to "git daemon" tries to enable the socket-level<br />    KEEPALIVE, but when it is spawned via inetd, the standard input<br />    file descriptor may not necessarily be connected to a socket.<br />    Suppress an ENOTSOCK error from setsockopt().</p>    <p> * Recent FreeBSD stopped making perl available at /usr/bin/perl;<br />    switch the default the built-in path to /usr/local/bin/perl on not<br />    too ancient FreeBSD releases.</p>    <p> * "git status" learned to suggest "merge --abort" during a conflicted<br />    merge, just like it already suggests "rebase --abort" during a<br />    conflicted rebase.</p>    <p> * The .c/.h sources are marked as such in our .gitattributes file so<br />    that "git diff -W" and friends would work better.</p>    <p> * Existing autoconf generated test for the need to link with pthread<br />    library did not check all the functions from pthread libraries;<br />    recent FreeBSD has some functions in libc but not others, and we<br />    mistakenly thought linking with libc is enough when it is not.</p>    <p> * Allow http daemon tests in Travis CI tests.</p>    <p> * Users of the parse_options_concat() API function need to allocate<br />    extra slots in advance and fill them with OPT_END() when they want<br />    to decide the set of supported options dynamically, which makes the<br />    code error-prone and hard to read.  This has been corrected by tweaking<br />    the API to allocate and return a new copy of "struct option" array.</p>    <p> * The use of strbuf in "git rm" to build filename to remove was a bit<br />    suboptimal, which has been fixed.</p>    <p> * "git commit --help" said "--no-verify" is only about skipping the<br />    pre-commit hook, and failed to say that it also skipped the<br />    commit-msg hook.</p>    <p> * "git merge" in Git v2.9 was taught to forbid merging an unrelated<br />    lines of history by default, but that is exactly the kind of thing<br />    the "--rejoin" mode of "git subtree" (in contrib/) wants to do.<br />    "git subtree" has been taught to use the "--allow-unrelated-histories"<br />    option to override the default.</p>    <p> * The build procedure for "git persistent-https" helper (in contrib/)<br />    has been updated so that it can be built with more recent versions<br />    of Go.</p>    <p> * There is an optimization used in "git diff $treeA $treeB" to borrow<br />    an already checked-out copy in the working tree when it is known to<br />    be the same as the blob being compared, expecting that open/mmap of<br />    such a file is faster than reading it from the object store, which<br />    involves inflating and applying delta.  This however kicked in even<br />    when the checked-out copy needs to go through the convert-to-git<br />    conversion (including the clean filter), which defeats the whole<br />    point of the optimization.  The optimization has been disabled when<br />    the conversion is necessary.</p>    <p> * "git -c grep.patternType=extended log --basic-regexp" misbehaved<br />    because the internal API to access the grep machinery was not<br />    designed well.</p>    <p> * Windows port was failing some tests in t4130, due to the lack of<br />    inum in the returned values by its lstat(2) emulation.</p>    <p> * The characters in the label shown for tags/refs for commits in<br />    "gitweb" output are now properly escaped for proper HTML output.</p>    <p> * FreeBSD can lie when asked mtime of a directory, which made the<br />    untracked cache code to fall back to a slow-path, which in turn<br />    caused tests in t7063 to fail because it wanted to verify the<br />    behaviour of the fast-path.</p>    <p> * Squelch compiler warnings for netmalloc (in compat/) library.</p>    <p> * The API documentation for hashmap was unclear if hashmap_entry<br />    can be safely discarded without any other consideration.  State<br />    that it is safe to do so.</p>    <p> * Not-so-recent rewrite of "git am" that started making internal<br />    calls into the commit machinery had an unintended regression, in<br />    that no matter how many seconds it took to apply many patches, the<br />    resulting committer timestamp for the resulting commits were all<br />    the same.</p>    <p> * "git difftool <paths>..." started in a subdirectory failed to<br />    interpret the paths relative to that directory, which has been<br />    fixed.</p>    <p> </p>    <h2>下载</h2>    <ul>     <li><a href="/misc/goto?guid=4958993208917260265" rel="nofollow"><strong>Source code</strong> (zip)</a></li>     <li><a href="/misc/goto?guid=4958993209035076843" rel="nofollow"><strong>Source code</strong> (tar.gz)</a></li>    </ul>    <p> </p>    <p>本站原创,转载时保留以下信息:<br /> 本文转自:深度开源(open-open.com)<br /> 原文地址:<a href="http://www.open-open.com/news/view/6c1173fe">http://www.open-open.com/news/view/6c1173fe</a><br />  </p>