読者です 読者をやめる 読者になる 読者になる

git 1.6.5 RelNotesメモ

もう数日経ってますが、git 1.6.5が出たっぽいので大雑把にRelNote-1.6.5.txtを訳しつつ、個人的に興味があったところを引っぱってみる。
いまいちわかっていないところもまずまずあったりはするので、コメント等で補足していただけるとありがたいです。

 
GIT v1.6.5 Release Notes
========================
 
In git 1.7.0, which was planned to be the release after 1.6.5, "git
push" into a branch that is currently checked out will be refused by
default.
 
git 1.6.5のあとにリリースしようと計画している1.7.0で、git pushで今チェックアウトしているブランチをpushするのはデフォルトでは拒否するようになります。
 
You can choose what should happen upon such a push by setting the
configuration variable receive.denyCurrentBranch in the receiving
roepository.
 
この挙動は、receive.denyCurrentBranchで制御することができます。
 
Also, "git push $there :$killed" to delete the branch $killed in a remote
repository $there, when $killed branch is the current branch pointed at by
its HEAD, will be refused by default.
 
また、git push $there :$killed でremote branchが削除するときも、現在のbranch名と同じ場合はデフォルトで拒否するようになります。
 
You can choose what should happen upon such a push by setting the
configuration variable receive.denyDeleteCurrent in the receiving
roepository.
 
この挙動は、receive.denyDeleteCurrentで制御することができます。
 
To ease the transition plan, the receiving repository of such a
push running this release will issue a big warning when the
configuration variable is missing. Please refer to:
 
  http://git.or.cz/gitwiki/GitFaq#non-bare
  http://thread.gmane.org/gmane.comp.version-control.git/107758/focus=108007
 
楽に移行できるように、このgitのバージョンでは、これらの値が設定ファイルに設定されていないときは大量のwarningが出るようになっています。
なぜこのような変更が必要なのかについて、さらに詳しくはこちらを参照してください。
 
for more details on the reason why this change is needed and the
transition plan.
 
Updates since v1.6.4
--------------------
 
(subsystems)
 
 * various updates to gitk, git-svn and gitweb.
 
(portability)
 
 * more improvements on mingw port.
 
 * mingw will also give FRSX as the default value for the LESS
   environment variable when the user does not have one.
 
 * initial support to compile git on Windows with MSVC.
 
(performance)
 
 * On major platforms, the system can be compiled to use with Linus's
   block-sha1 implementation of the SHA-1 hash algorithm, which
   outperforms the default fallback implementation we borrowed from
   Mozilla.
 
   多くの処理系では、Linusのblock-sha1アルゴリズムでコンパイルできるようになった。これは、defaultのMizillaから持ってきている実装より効率がよい。
   (※訳注: MakefileのBLK_SHA1が有効になるとこれが使われるっぽい。)
 
 * Unnecessary inefficiency in deepening of a shallow repository has
   been removed.
 
   浅いレポジトリを不必要に非効率に深くするのはやめた(※訳注: いまいちわかってない)
 
 * "git clone" does not grab objects that it does not need (i.e.
   referenced only from refs outside refs/heads and refs/tags
   hierarchy) anymore.
 
 git cloneで不必要なobjectを取ってくるのをやめた(例えばrefs/heads, refs/tagsから参照されているもののみを取ってくるようになった)
 
 * The "git" main binary used to link with libcurl, which then dragged
   in a large number of external libraries. When using basic plumbing
   commands in scripts, this unnecessarily slowed things down. We now
   implement http/https/ftp transfer as a separate executable as we
   used to.
 
   gitのメインバイナリは数多くの外部ライブラリに依存するlibcurlリンクするようになっていたが、基本的なコマンドの配置ではこのことが速度を不必要に低下させる要因になっていた。そのためhttp/https/ftp関係は別々のバイナリに分割した。
 
 * "git clone" run locally hardlinks or copies the files in .git/ to
   newly created repository. It used to give new mtime to copied files,
   but this delayed garbage collection to trigger unnecessarily in the
   cloned repository. We now preserve mtime for these files to avoid
   this issue.
 
   新しく作られたレポジトリに対してgit cloneをローカルで実行すると、.git/以下のファイルをコピーかハードリンクするようにすると、
   コピーしたファイルのmtimeが新しくなるが、これはコピーしたレポジトリのGCの起こすをの不必要に遅らせる。そのためこの問題を避けるためmtimeを保持するようになった。
 
(usability, bells and whistles)
 
 * Human writable date format to various options, e.g. --since=yesterday,
   master@{2000.09.17}, are taught to infer some omitted input properly.
 
 * A few programs gave verbose "advice" messages to help uninitiated
   people when issuing error messages. An infrastructure to allow
   users to squelch them has been introduced, and a few such messages
   can be silenced now.
 
 * refs/replace/ hierarchy is designed to be usable as a replacement
   of the "grafts" mechanism, with the added advantage that it can be
   transferred across repositories.
 
 * "git am" learned to optionally ignore whitespace differences.
 
 * "git am" handles input e-mail files that has CRLF line endings sensibly.
 
 * "git am" learned "--scissors" option to allow you to discard early part
   of an incoming e-mail.
 
   (訳注: ヘルプのscissors lineがいまいちわからず。)
 
 * "git archive -o output.zip" works without being told what format to
   use with an explicit "--format=zip".option.
 
   git -o hoge.zipで--format=zipが指定されたこととみなすようになった。(訳注: git archiveのオプションが減らせるので嬉しい。ここではzipが指定されてるが、tarとかでもいけるっぽい。)
 
 * "git checkout", "git reset" and "git stash" learned to pick and
   choose to use selected changes you made, similar to "git add -p".
 
   git checkout, git reset, git stashで"git add -p"と同様に、範囲を選択できるようになった。(訳注: 機能追加をしている最中にtypoに気づいたときとかにgit stash -pとかは便利かも。)
 
 * "git clone" learned a "-b" option to pick a HEAD to check out
   different from the remote's default branch.
 
   git cloneしたあとにcheckoutされるworking repogitoryを-bオプションで指定できるようになった。(訳注: これはややうれしい。)
 
 * "git clone" learned --recursive option.
 
 訳注: helpが間違ってるっぽいですが、submoduleまで取得してくれるもよう。submoduleがあることを事前に知ってれば便利。例えばnanowwwとかでやるとこんな感じに実行される。
 
 yoshimi% git clone --recursive git://github.com/tokuhirom/nanowww.git [ ~/tmp ]
 Initialized empty Git repository in /Users/yoshimi/tmp/nanowww/.git/
 remote: Counting objects: 217, done.
 remote: Compressing objects: 100% (137/137), done.
 remote: Total 217 (delta 112), reused 118 (delta 61)
    Receiving objects: 100% (217/217), 42.69 KiB, done.
    Resolving deltas: 100% (112/112), done.
    Submodule 'extlib/nanosocket' (git://github.com/tokuhirom/nanosocket.git) registered for path 'extlib/nanosocket'
    Submodule 'extlib/picohttpparser' (git://github.com/kazuho/picohttpparser.git) registered for path 'extlib/picohttpparser'
    Submodule 'extlib/picouri' (git://github.com/tokuhirom/picouri.git) registered for path 'extlib/picouri'
    Initialized empty Git repository in /Users/yoshimi/tmp/nanowww/extlib/nanosocket/.git/
    remote: Counting objects: 100, done.
    remote: Compressing objects: 100% (84/84), done.
    remote: Total 100 (delta 37), reused 0 (delta 0)
    Receiving objects: 100% (100/100), 67.30 KiB | 73 KiB/s, done.
    Resolving deltas: 100% (37/37), done.
    Submodule path 'extlib/nanosocket': checked out 'd147f7f7f1dee370c8cdc0cb2289c025fe1de76a'
    Initialized empty Git repository in /Users/yoshimi/tmp/nanowww/extlib/picohttpparser/.git/
    remote: Counting objects: 16, done.
    remote: Compressing objects: 100% (16/16), done.
    remote: Total 16 (delta 7), reused 0 (delta 0)
    Receiving objects: 100% (16/16), done.
    Resolving deltas: 100% (7/7), done.
    Submodule path 'extlib/picohttpparser': checked out 'c5e7bc6b9d99f17075f8919a1dfe04373564117d'
    Initialized empty Git repository in /Users/yoshimi/tmp/nanowww/extlib/picouri/.git/
    remote: Counting objects: 63, done.
    remote: Compressing objects: 100% (53/53), done.
    remote: Total 63 (delta 20), reused 0 (delta 0)
    Receiving objects: 100% (63/63), 24.66 KiB, done.
    Resolving deltas: 100% (20/20), done.
    Submodule path 'extlib/picouri': checked out '249e9ef1ba87bea4ad5464a3bd7173b93ea25df0'
 
 * "git clone" from a local repository on a different filesystem used to
   copy individual object files without preserving the old timestamp, giving
   them extra lifetime in the new repository until they gc'ed.
 
   異なるファイルシステム上にあるローカルレポジトリからgit cloneしてきた場合にオブジェクトのファイルが古いタイムスタンプを保持せずコピーされてしまっていた。その結果git gcされるまで余分な時間をとっていた(訳注: パフォーマンスで出てきた項目と同じ内容と思われる。こっちの方がやや意味がとりやすかった気もする)
 
 * "git commit --dry-run $args" is a new recommended way to ask "what would
   happen if I try to commit with these arguments."
 
 * "git commit --dry-run" and "git status" shows conflicted paths in a
   separate section to make them easier to spot during a merge.
 
 * "git cvsimport" now supports password-protected pserver access even
   when the password is not taken from ~/.cvspass file.
 
 * "git fast-export" learned --no-data option that can be useful when
   reordering commits and trees without touching the contents of
   blobs.
 
 * "git fast-import" has a pair of new front-end in contrib/ area.
 
 * "git init" learned to mkdir/chdir into a directory when given an
   extra argument (i.e. "git init this").
 
   (訳注:地味にうれしい(けどたぶん使うこともそれほどない)けど、作ったパスまでさらにcdくれるオプションもあるとうれしいなと思ったり。)
 
 * "git instaweb" optionally can use mongoose as the web server.
 
 * "git log --decorate" can optionally be told with --decorate=full to
   give the reference name in full.
 
   (訳注: git logのcommitのsha1の横にどのbrancheの変更かとか表示してくれる。便利かもと思いつつmergeした後にどのブランチかわかってもあまり意味ないかも。remoteが複数ある場合は便利かも。)
 
 * "git merge" issued an unnecessarily scary message when it detected
   that the merge may have to touch the path that the user has local
   uncommitted changes to. The message has been reworded to make it
   clear that the command aborted, without doing any harm.
 
   (訳注: git mergeするときにローカルでコミットしていない変更があった場合にwarnをわかりやすくしたってことっぽい?)
 
 * "git push" can be told to be --quiet.
 
  (訳注: あんまりなさそうですが、cronとかhookでgit pushしたりするときは便利なのかも。)
 
 * "git push" pays attention to url.$base.pushInsteadOf and uses a URL
   that is derived from the URL used for fetching.
 
   (訳注: pushurlの設定とどう違うのかなと思いつつよく調べてないです。)
 
 * informational output from "git reset" that lists the locally modified
   paths is made consistent with that of "git checkout $another_branch".
 
 * "git submodule" learned to give submodule name to scripts run with
   "foreach" subcommand.
 
   (訳注: submoduleを活用したプロジェクト用にスクリプトを書くのに便利そうと思いつつ、git submodule --helpに載ってた例は手元だのなんか動かなかったっぽい.)
 
 * various subcommands to "git submodule" learned --recursive option.
 
 (訳注: submoduleの中でさらにsubmoduleしてるやつとかに便利なのかも)
 
 * "git submodule summary" learned --files option to compare the work
   tree vs the commit bound at submodule path, instead of comparing
   the index.
 
 * "git upload-pack", which is the server side support for "git clone" and
   "git fetch", can call a new post-upload-pack hook for statistics purposes.
 
   (訳注: そのまんまですが、post-upload-hookつかうと、いくつレポジトリがcloneされたかとか情報記録したりできるっぽい)
 
(developers)
 
 * With GIT_TEST_OPTS="--root=/p/a/t/h", tests can be run outside the
   source directory; using tmpfs may give faster turnaround.
 
 * With NO_PERL_MAKEMAKER set, DESTDIR= is now honoured, so you can
   build for one location, and install into another location to tar it
   up.
 
Fixes since v1.6.4
------------------
 
All of the fixes in v1.6.4.X maintenance series are included in this
release, unless otherwise noted.