1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 235 236 237 238 239 240 241 242 243 244 245 246 247 248 249 250 251 252 253 254 255 256 257 258 259 260 261 262 263 264 265 266 267 268 269 270 271 272 273 274 275 276 277 278 279 280 281 282 283 284 285 286 287 288 289 290 291 292 293 294 295 296 297 298 299 300 301 302 303 304 305 306 307 308 309 310 311 312 313 314 315 316 317 318 319 320 321 322 323 324 325 326 327 328 329 330 331 332 333 334 335 336 337 338 339 340 341 342 343 344 345 346 347 348 349 350 351 352 353 354 355 356 357 358 359 360 361 362 363 364 365 366 367 368 369 370 371 372 373 374 375 376 377 378 379 380 381 382 383 384 385 386 387 388 389 390 391 392 393 394 395 396 397 398 399 400 401 402 403 404 405 406 407 408 409 410 411 412 413 414 415 416 417 418 419 420 421 422 423 424 425 426 427 428 429 430 431 432 433
|
Magit v2.1.0 Release Notes
==========================
Released 1 July 2015 by Jonas Bernoulli.
This release marks the end of a commit marathon that lasted for more
than 4700 commits. It is the first major release in over two and a
half years. The last major release was 1.2.0, which was released
under old leadership. Version 1.4.0, which I released earlier this
year, for the most part consisted of changes that prepared for this
release (so you might want to read the respective release notes too).
This release comes with many new and exciting features, but the most
important change is the massive increase in consistency both in the
user interface and the internal abstractions.
Magit always provided a very intuitive staging interface, which is
vastly superior to `git add --interactive'. This release extends this
to other apply variants. Starting with this release, other areas have
also begun to be more than just incremental improvements over what Git
itself provides. But this is still limited to certain features which
have gotten more attention than others (most prominently rebasing).
Interlude
---------
The code base is finally in a state that allows me to concentrate on
implementing my vision of what version control could be like. But
this will only be possible if, unlike during the last two and a half
years, I am being paid for my work.
I intend to run a fund-raising campaign, but you can already donate
now (see http://magit.vc/donations.html). I am also looking for
corporate sponsorship and/or employment. One area where Magit
actually lags behind other Git clients is integration with Git hosting
platforms and code review tools. I hope that these platforms have an
interest in being supported by the best Git client and are willing to
pay for it.
I am very interested in a job that would let me work on Magit *and* on
other projects, which would benefit from the skills I have acquired
integrating two complex systems and dealing with all the social and
technical challenges that arise when running a popular project.
Changes since v1.4.0
--------------------
* A new manual has been added. It's much more comprehensive than the
old manual and instead of just documenting the various commands and
options, it also explains concepts and plumbing functions, and
comes with extensive indices for commands, functions, and options.
Actually three new manuals were added; the packages `magit-popup'
and `with-editor' are documented in separate manuals.
The manuals are written in Org mode and then exported to Texinfo.
* Performance is much better now. In most cases this was achieved by
delaying work until it is actually needed. Most importantly diffs
are only partially washed until being fully expanded. Some
features come in a fancy and in a fast variant; when that is the
case, we now usually default to the fast variant.
* Many options can now be set on a per-repository basis, and the
manual describes how to do so. (Actually this was always possible
but, because it was undocumented, nobody did it.) It's possible to
define "repository classes", e.g. "huge repositories", and then add
the respective repositories to that class. This is very useful in
order to turn off certain features only in repositories where they
would have a negative impact on performance, without having to do
it for each repository individually.
* Many faces have been simplified. Most importantly, section heading
faces no longer set a background color (except for hunk headings)
and instead just use the default background. Refname faces no
longer set the background color or the box property.
* Many, probably the majority of, functions, variables, and faces
have been renamed, which was necessary because there was very
little consistency before.
Most importantly, the names of commands and options now begin with
a prefix that includes the name of the respective git sub-command.
For example, the names of all commands and options related to
diffing now begin with `magit-diff-'.
Many plumbing functions and variables were also renamed. In some
cases, that also lead to shared prefixes, such as `magit-process-',
`magit-mode-', `magit-git-', and `magit-insert-'. But many
plumbing functions and variables continue to use names whose only
common part is the `magit-' prefix.
Future renames will be performed at well defined times and obsolete
function/variable definitions will be provided for backward
compatibility. No renames are planned at present.
* The external libraries `git-commit-mode.el' and `git-rebase-mode.el'
are no longer required and have to be uninstalled because they
conflict with their successors `git-commit.el' and `git-rebase.el',
which are now maintained inside the Magit repository instead of the
Git-Modes repository.
The library `git-commit.el' can be used without Magit, so it is
distributed as a separate Elpa package. However, `git-rebase.el'
now depends on several Magit libraries and is therefore distributed
as part of the `magit' package.
* The library `magit-key-mode.el' was removed and replaced with
`magit-popup.el'. The new implementation is much more flexible and
easier to use than the old one. Major new features include setting
default arguments directly inside the popup and macros for defining
new popups and extending existing popups.
This new library can also be used by packages that are not related
to Magit and is therefore available as a separate Elpa package.
* The library `with-editor.el' was added. Its purpose is to use the
emacsclient as $GIT_EDITOR when git is started as a subprocess and
requires an editor. This is used while committing and rebasing.
This also works over Tramp, where a "sleeping editor" shell script
is used to communicate over standard output instead of a socket
like the emacsclient does.
The `1.4.0' release already supported this, but this release splits
this feature into a separate library. And now that it is a separate
library, it can also be used by packages that are not related to
Magit. `with-editor.el' is distributed as a separate Elpa package.
* All libraries are now located in the new `lisp/' subdirectory.
* The library `magit.el' has been split into many new libraries.
The code base is now much better organized. Together with the
description of plumbing commands in the manual, this should make it
much easier for contributors to get started.
* The library `magit-wip.el' has been rewritten from scratch and no
longer depends on the external and unmaintained shell script from
https://github.com/bartman/git-wip.
* There are now three different modes that commit to the
work-in-progress refs before/after certain events, and in addition
to the old working tree wip refs, these modes now also commit to
index wip refs. When these new modes are turned on, Git's
protection of committed (but dangling) changes is effectively
extended to uncommitted changes (which some exceptions). These
modes are not enabled by default due to performance concerns.
* The library `magit-blame.el' has been rewritten from scratch. The
new implementation can blame recursively, jump to the next/previous
chunk from the same commit, replace headings with separator lines,
scroll the revision buffer for the chunk at point (like log buffers),
and fine-tune the arguments for `git blame' using a popup.
* The new library `magit-ediff.el' replaces the old Ediff support.
The new implementation comes with a dwim command and a popup, and
it relies less on high-level functions provided by VC and Ediff
itself, because many of those turned out to be unsuitable.
* The popular third-party library `dash.el' is now required. This
is the only mandatory external dependency now, except for Git and
Emacs themselves, of course.
* When using Ido inside Magit, users now have to install the
third-party library `ido-completing-read+.el'. This is necessary
because the function `ido-completing-read', which is part of the
built-in library `ido.el', is not a sufficient drop-in replacement
for `completing-read'.
* The new macro `magit-insert-section' replaces `magit-with-section'.
The macros `magit-cmd-insert-section' and `magit-git-insert-section'
were removed without a direct replacement.
* The new functions `magit-insert' and `magit-put-face-property' take
care of working around the fact that negative overlay priorities
are not supported, i.e., that overlays always take precedence
against text properties. Previously this was done in various
places, and not always correctly (e.g., in some cases overlays did
not evaporate).
* The section visibility and movement commands were rewritten from
scratch. All those commands now share the prefix `magit-section-'
and edge cases are handled better. New commands were added that
allow cycling the visibility of sections and their children. From
a user perspective Magit's section handling is now quite similar to
that of Org mode.
* The macro `magit-section-action' was removed. The related macro
`magit-section-case' still exists and will continue to do so. The
action variant provided user-customizable hooks, but these hooks
were rarely, if ever, used. Instead of such action hooks, users who
wish to extend Magit now have to use type-specific section keymaps.
* Section highlighting was rewritten from scratch. The new
implementation uses hooks to allow washing certain section types
differently than others - without obfuscating the simple cases.
Washing diffs is much more complicated than washing all other
sections, and that part has been factored out. The washing of
all other section types is now quite simple.
* The appearance of the region now indicates whether it is valid as a
selection. As far as Magit is concerned, valid selections are hunk
internal regions and regions that mark sibling sections of the same
type. When a region does not satisfy one of these, then it is
displayed the sames as in other buffers and Magit cannot act on it.
* The new option `magit-no-confirm' makes it easy to forgo having to
confirm potentially dangerous actions. Many of these actions are
only dangerous for users who don't know how to undo them. When the
wip modes are turned on, many more previously fatal actions can be
easily undone. Adding `safe-with-wip' here makes it unnecessary to
confirm these actions.
* The new Refs buffer combines the features of the old Wazzup and
Branch Manager buffers into one, more powerful and efficient
synthesis. For each reference, cherries can be shown by expanding
the ref section, but unlike in the Wazzup buffer, the cherries are
not calculated until the expansion happens, making it vastly more
efficient. Besides local and remote branches, the buffer now also
lists tags, and users can add additional sections listing other
refs, e.g., stashes. The format of refs headers is now
customizable.
* File-visiting buffers are now reverted without using code from the
built-in `autorevert.el` library. The function we previously used
was intended for internal use only and indeed, changes made there
broke Magit in the past.
* The new option `magit-revert-buffers' controls whether and how
buffers visiting tracked files are reverted. As before, such
buffers are reverted by default. But by default this is now done
rather noisily to encourage users to read the doc-string and
pick what is right for them. It's now also possible to revert
asynchronously and for the user to be asked every time there are
buffers that could be reverted. This option replaces
`magit-auto-revert-mode`.
* Many new section inserters are available. Some are variations of
default inserters; `magit-insert-unpulled-cherries', for example, is
like `magit-insert-unpulled-commits' but prefixes each commit with
"+" or "-" to indicate its "cherry state". Other inserters are
completely new (e.g., `magit-insert-unpulled-module-commits').
* The header sections in status buffers can now be customized using
the new `magit-status-headers-hook'. This is an additional section
insertion hook; separating it from `magit-status-sections-hook'
gives users complete control over what information is displayed in
the headers, while still making the first header the parent section
of all the other header lines.
* Many commands that previously could only act on the section at
point can now act on all sections selected by a region, which can
span sibling sections of the same type.
* Many commands now more intelligently dwim based on the section at
point.
* Where it makes sense, completion and confirmation have been merged
into a single user action. Many commands that previously allowed
carrying out or aborting some action now also allow the user to act
on something different from the default choice. Where one
previously had to confirm with `yes RET', one now confirms with just
`RET' (to accept the default choice, which previously was the only
choice).
* The distinction between the various "apply variants" has been
clearly worked out, and they now all provide the same feature set.
The variants are: stage, unstage, discard, reverse, and "regular
apply". In all cases, it is possible to act on a file or hunk, or
part of a hunk. When acting on the hunk level, all variants are
implemented on top of `git apply', thus the name "apply variants".
Un-/staging has always been one of Magit's most beloved features,
and this release takes it to the next level by making the other
apply variants just as consistent, powerful, and intuitive to use.
All apply variants are context aware, meaning that, for example, the
stage variant knows that an already staged change cannot be staged.
That leads to better error messages.
* The committing prefix now features additional variants. It was
already possible to quickly create a fixup or squash commit; the
new variants do that and then also instantly perform a rebase to
actually combine these commits with their intended target commits.
* Rebase sequences are now initiated from the new rebasing prefix.
Several rebasing variants exist, of course including basic
"rebase onto something" and interactive rebase. Other variants
automatically detect and combine squash and fixup commits with
their intended targets. Others let the user edit or reword a
single commit, without having to go through the steps that are
irrelevant in these cases.
* When a rebase sequence stops at a commit, then the rebasing prefix
instead features suffix commands for continuing, editing, or
aborting the sequence; or skipping the current commit.
* When a rebase sequence stops, the status buffer displays a list of
the already applied and yet-to-be applied commits. These commits
can be acted on like those in logs.
* Cherry-picking, reverting, and applying patches using `git am' are
treated the same way as rebasing. A prefix command features
several variants to initiate the sequence. When a sequence is in
progress, then the same prefix instead features suffix commands for
continuing or aborting the sequence, and the status buffer lists
the relevant commits.
* The magit-specific "rewriting" feature has been removed because it
was a hybrid of "rebasing" and "cherry-picking" and vastly
inferior to both of them.
* The merging prefix features several new convenient merge variants.
* Merges can now be previewed before actually carrying them out.
* When a merge results in conflicts then the commits being merged are
listed in the status buffer, making it easier to review conflicting
changes in the context they were created.
* Its now possible to discard one side of a conflict directly from
the hunk containing the conflict, using the regular discard key
`k'. It's also possible to restore a conflict.
* When using an existing branch as the starting-point of a new
branch, it is now automatically configured as the upstream branch.
* The branching prefix now features suffix commands for un-/setting
the upstream branch. Previously this was coupled with pushing in
a truly obscure way.
* Branch descriptions can now be displayed in the refs or status
buffer, and the description can be edited using a suffix command
from the branching prefix.
* The URL of a remote can now be changed from the remoting prefix.
* A new pulling prefix command was added, which features several new
pulling variants. Previously only one pulling command existed and
it had to be controlled using prefix arguments, which was very
cumbersome.
* A new pushing prefix command was added, which features several new
pushing variants. Previously only one pushing command existed and
it had to be controlled using prefix arguments, which was very
cumbersome.
* The various tagging commands are now suffix commands of the new
tagging prefix command.
* It is now possible to stash, or create a snapshot from, just the
staged or the unstaged changes, instead of both. Suffix commands
for branching, listing, and showing stashes were added to the
stashing prefix
* When creating stashes the new implementation in `magit-wip.el' is
used instead of `git stash'. This allows the user to create
snapshot stashes without touching any files in the working tree.
* The submodule prefix now features new suffix commands for adding,
setting up, and fetching modules.
* Submodules with unmerged commits can now be displayed in the status
buffer. Sections representing submodules can be expanded to show
their unpulled commits. These commits can be acted on like commits
belonging to the super-project.
* Support for displaying diffs inside the log buffer instead of in a
separate diff buffer has been removed. It might come back one day,
but the old implementation had just fallen behind regular one-line
log too much.
* The logging prefix features many new infix arguments and suffix
commands, which can now be combined in more flexible ways than
before.
* Many commands that previously read a single commit, branch, or
file in the minibuffer, can now read multiple, comma-separated items
from the user, while providing completion candidates for all of
them. Likewise, when selecting a range, completion is available
for the second commit too.
* All of Git's reset variants are now exposed as individual commands,
but not all of them have a key binding by default.
This was just the tip of the iceberg.
Authors
-------
2187 Jonas Bernoulli
28 Sebastian Wiesner
25 Kyle Meyer
19 Noam Postavsky
17 Pieter Praet
12 Rémi Vanicat
9 Florian Ragwitz
5 Philippe Vaucher
5 Ramkumar Ramachandra
4 Cornelius Mika
4 Kan-Ru Chen
4 Syohei Yoshida
3 Alex Dunn
3 Alex Kost
3 Nicolas Richard
2 Eric Schulte
2 Ingo Lohmar
2 Mitchel Humpherys
2 Peter Eisentraut
2 Ryan C. Thompson
1 Adeodato Simó
1 Andrew Schwartzmeyer
1 Andy Sawyer
1 Bradley Wright
1 Guillaume Martres
1 John Mastro
1 John Wiegley
1 Julien Danjou
1 Lingchao Xin
1 Mark Oteiza
1 Michael Fogleman
1 Michael Griffiths
1 Michal Sojka
1 Natalie Weizenbaum
1 Oleh Krehel
1 Peter Vasil
1 Rüdiger Sonderfeld
1 Steven E. Harris
1 Teemu Likonen
1 Thomas A Caswell
1 Tim Perkins
1 Tim Wraight
1 Wei Huang
1 Xavier Noria
|