分布式版本控制系统 Git v2.9.3发布
jopen 8年前
<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>