Retire v1.5.0 notes.

Junio C Hamano committed Feb 13, 2007 at 22:15 UTC c652b67e6e0051ad753f9a01fe9fff7c7b8d38bb
1 file changed -468
v1.5.0.txt deleted
-468
@@ -1,468 +0,0 @@
1 -GIT v1.5.0 Release Notes
2 -========================
3 -
4 -Old news
5 ---------
6 -
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.
12 -
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:
18 -
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.
27 -
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.
31 -
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.
39 -
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.
48 -
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.
52 -
53 - - 'git archive' superseded 'git tar-tree' in v1.4.3;
54 -
55 - - 'git cvsserver' was new invention in v1.3.0;
56 -
57 - - 'git repo-config', 'git grep', 'git rebase' and 'gitk' were
58 - seriously enhanced during v1.4.0 timeperiod.
59 -
60 - - 'gitweb' became part of git.git during v1.4.0 timeperiod and
61 - seriously modified since then.
62 -
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).
67 -
68 -
69 -Updates in v1.5.0 since v1.4.4 series
70 --------------------------------------
71 -
72 -* Index manipulation
73 -
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.
77 -
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.
81 -
82 - - git-add tries to be more friendly to users by offering an
83 - interactive mode ("git-add -i").
84 -
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.
88 -
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.
92 -
93 - - git-reset <tree> <paths>... can be used to revert index
94 - entries for selected paths.
95 -
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".
99 -
100 -
101 -* Repository layout and objects transfer
102 -
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.
108 -
109 - - git-clone always uses what is known as "separate remote"
110 - layout for a newly created repository with a working tree.
111 -
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.
122 -
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:
130 -
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.
134 -
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").
145 -
146 - Repositories initialized with the traditional layout continue
147 - to work.
148 -
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?).
157 -
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.
162 -
163 - - git-branch and git-show-branch know remote tracking branches
164 - (use the command line switch "-r" to list only tracked branches).
165 -
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").
169 -
170 - - git-push more agressively 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.
175 -
176 - - git-fetch also more agressively keeps the transferred objects
177 - packed. This behaviour 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).
180 -
181 - - A new command, git-remote, can help you manage your remote
182 - tracking branch definitions.
183 -
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.
188 -
189 -
190 -* Bare repositories
191 -
192 - - Certain commands change their behaviour 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.
199 -
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.
203 -
204 - - Porcelain-ish commands that require a working tree refuses to
205 - work in a bare repository.
206 -
207 -
208 -* Reflog
209 -
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.
218 -
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.
222 -
223 - - git-branch knows how to rename branches and moves existing
224 - reflog data from the old branch to the new one.
225 -
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}".
233 -
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.
239 -
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.
246 -
247 -
248 -* Crufts removal
249 -
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.
255 -
256 - - 'git-prune' by default does not remove _everything_
257 - unreachable, as there is a one-day grace period built-in.
258 -
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'.
263 -
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.
269 -
270 -
271 -* Detached HEAD
272 -
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.
276 -
277 - A typical use of this feature is to "look around". E.g.
278 -
279 - $ git checkout v2.6.16
280 - ... compile, test, etc.
281 - $ git checkout v2.6.17
282 - ... compile, test, etc.
283 -
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.
288 -
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.
293 -
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 - overriden with "git checkout -f $branch".
300 -
301 -
302 -* Packed refs
303 -
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).
309 -
310 - - Clones and fetches over dumb transports are now aware of
311 - packed refs and can download from repositories that use
312 - them.
313 -
314 -
315 -* Configuration
316 -
317 - - configuration related to color setting are consolidated under
318 - color.* namespace (older diff.color.*, status.color.* are
319 - still supported).
320 -
321 - - 'git-repo-config' command is accessible as 'git-config' now.
322 -
323 -
324 -* Updated features
325 -
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).
331 -
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:
335 -
336 - v2.6.20-rc5-306-ga21b069
337 -
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.
342 -
343 - - git-describe with --abbrev=0 can be used to show only the
344 - name of the base ref.
345 -
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.
349 -
350 - - git-blame starts annotating from the working tree by default.
351 -
352 -
353 -* Less external dependency
354 -
355 - - We no longer require the "merge" program from the RCS suite.
356 - All 3-way file-level merges are now done internally.
357 -
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.
361 -
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.
365 -
366 -
367 -* I18n
368 -
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.
377 -
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.
387 -
388 - - Tools for e-mailed patch application now default to -u
389 - behaviour; 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.
395 -
396 -
397 -* e-mailed patches
398 -
399 - - See the above I18n section.
400 -
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.
406 -
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".
410 -
411 -
412 -* Foreign SCM interfaces
413 -
414 - - git-svn now requires the Perl SVN:: libraries, the
415 - command-line backend was too slow and limited.
416 -
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.
420 -
421 - - git fast-import backend.
422 -
423 -
424 -* User support
425 -
426 - - Quite a lot of documentation updates.
427 -
428 - - Bash completion scripts have been updated heavily.
429 -
430 - - Better error messages for often used Porcelainish commands.
431 -
432 - - Git GUI. This is a simple Tk based graphical interface for
433 - common Git operations.
434 -
435 -
436 -* Sliding mmap
437 -
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.
443 -
444 -
445 -* Shallow clones
446 -
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").
451 -
452 - Currently a shallow repository has number of limitations:
453 -
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).
457 -
458 - - Pushing from nor into a shallow clone are not expected to
459 - work.
460 -
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.
465 -
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.