]> git.ipfire.org Git - thirdparty/git.git/blame - Documentation/RelNotes-1.5.0.txt
GIT 1.5.0
[thirdparty/git.git] / Documentation / RelNotes-1.5.0.txt
CommitLineData
26cfcfbf
JH
1GIT v1.5.0 Release Notes
2========================
3
4Old news
5--------
6
7This section is for people who are upgrading from ancient
8versions of git. Although all of the changes in this section
9happened before the current v1.4.4 release, they are summarized
10here in the v1.5.0 release notes for people who skipped earlier
11versions.
12
13As of git v1.5.0 there are some optional features that changes
14the repository to allow data to be stored and transferred more
15efficiently. These features are not enabled by default, as they
16will make the repository unusable with older versions of git.
17Specifically, 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
32The above two are not enabled by default and you explicitly have
33to ask for them, because these two features make repositories
34unreadable by older versions of git, and in v1.5.0 we still do
35not enable them by default for the same reason. We will change
36this default probably 1 year after 1.4.2's release, when it is
37reasonable to expect everybody to have new enough version of
38git.
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
69Updates 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 aggressively 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 aggressively keeps the transferred objects
177 packed. This behavior 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 behavior 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 overridden 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 behavior; 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.