lukego / blog

Luke Gorrie's blog
566 stars 11 forks source link

Quick survey of git "merge commits" in open source projects #14

Open lukego opened 8 years ago

lukego commented 8 years ago

How do different open source projects use Git merge commits? Here is a brief survey: log of the latest 15-or-so merge commits on a few projects/branches. Just a tangential thought following the discussion on snabbco/snabbswitch#725.

Please leave a comment if you have an interesting interpretation :-)

Snabb Switch

~/git/snabbswitch$ git log --oneline --graph --merges -15 
*   07aba83 Merge branch 'max-next' into next
|\  
| * 1d3a1c3 Merge PR #717 (Fixed a bug where strings could not be app arguments) into max-next
| *   dfbc5f9 Merge PR #681 (implementation of virtio-net driver) into max-next
| |\  
| | * 7a17d0a Merge branch 'master' into virtio-net
| |/  
|/|   
| * dd0f939 Merge PR #683 (intel1g: Intel 1G driver) into max-next
| | * 004ac13 sync with intel1g_rs_i210, e.g. remote master (v2016.1)
| | *   295e5d4 sync with remote (v2016.01), resolve conflicts
| | |\  
| |_|/  
|/| |   
| | * 68980a8 Merge pull request #1 from hb9cwp/intel1g_rs_snabbmark
| * fe1a893 Merge PR #633 (core.engine: enable selftest() method) into max-next
| * 337071c Merge PR #699 (make PREFIX work like expected) into max-next
*   d0fff55 Merged PR #677 (v2016.01 release) onto master
|\  
| *   e788e7a Merge PR #679 (fixes branch from @eugeneia) into next
| |\  
| | * 599a568 Merge branch 'issue-579' into issues-2015.12
| | * b17317b Merge branch 'issue-658' into issues-2015.12
| | * 4704b09 Merge branch 'issue-666' into issues-2015.12
| |/  
|/|   

Linux kernel

~/git/linux$ git log --oneline --graph --merges -20
* 048ccca Merge tag 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dledford/rdma
| * 882f3b3 Merge branches '4.5/Or-cleanup' and '4.5/rdma-cq' into k.o/for-4.5
| * c6333f9 Merge branch 'rdma-cq.2' of git://git.infradead.org/users/hch/rdma into 4.5/rdma-cq
* b3e27d5 Merge tag 'ntb-4.5' of git://github.com/jonmason/ntb
* cc67375 Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/viro/vfs
*   fa7d9a1 Merge tag 'nfs-for-4.5-2' of git://git.linux-nfs.org/projects/trondmy/linux-nfs
|\  
| * 6d45c04 Merge branch 'bugfixes'
* 20c759c Merge branch 'akpm' (patches from Andrew)
* b82dde0 Merge tag 'please-pull-copy_file_range' of git://git.kernel.org/pub/scm/linux/kernel/git/aegl/linux
*   79d2453 Merge tag 'armsoc-tegra' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
|\  
| * 5f4900b Merge tag 'tegra-for-4.5-dt' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into late/tegra
| | * 1d1bac6 Merge branch 'for-4.5/soc' into for-4.5/dt
| | * 00ccc34 Merge branch 'for-4.5/clk' into for-4.5/dt
| * d0ac611 Merge tag 'tegra-for-4.5-soc' of git://git.kernel.org/pub/scm/linux/kernel/git/tegra/linux into late/tegra
| * 3e91219 Merge branch 'treewide/cleanup' into late/tegra
*   1b8ee1e Merge tag 'armsoc-fixes' of git://git.kernel.org/pub/scm/linux/kernel/git/arm/arm-soc
|\  
| * 53c517a Merge tag 'renesas-fixes-for-v4.5' of git://git.kernel.org/pub/scm/linux/kernel/git/horms/renesas into fixes
*   5430dfe Merge branch 'for-linus' of git://git.kernel.org/pub/scm/linux/kernel/git/dtor/input
|\  
| * b26a95d Merge branch 'next' into for-linus
| | * 85c017f Merge branch 'xpad' into next

QEMU

~/git/qemu$ git log --oneline --graph --merges -15 
* 047e363 Merge remote-tracking branch 'remotes/pmaydell/tags/pull-softfloat-20160122' into staging
* 3c2c85e Merge remote-tracking branch 'remotes/gkurz/tags/for-upstream' into staging
* 0b0571d Merge remote-tracking branch 'remotes/sstabellini/tags/xen-20160121' into staging
* 8344646 Merge remote-tracking branch 'remotes/ehabkost/tags/x86-pull-request' into staging
* 1a4f446 Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20160121' into staging
* 3c9331c Merge remote-tracking branch 'remotes/kevin/tags/for-upstream' into staging
* 3ed0b65 Merge remote-tracking branch 'remotes/berrange/tags/pull-io-next-2016-01-20-1' into staging
* a953853 Merge remote-tracking branch 'remotes/kraxel/tags/pull-socket-20160120-1' into staging
* 1cf81ea Merge remote-tracking branch 'remotes/awilliam/tags/vfio-update-20160119.0' into staging
* 3db34bf Merge remote-tracking branch 'remotes/afaerber/tags/qom-devices-for-peter' into staging
* 4618834 Merge remote-tracking branch 'remotes/kraxel/tags/pull-ui-20160118-1' into staging
* 4aaddc2 Merge remote-tracking branch 'remotes/mcayland/tags/qemu-sparc-signed' into staging
* 19b6d84 Merge remote-tracking branch 'remotes/bonzini/tags/for-upstream' into staging
* 5a57acb Merge remote-tracking branch 'remotes/pmaydell/tags/pull-target-arm-20160115' into staging
* 17c8a21 Merge remote-tracking branch 'remotes/armbru/tags/pull-error-2016-01-13' into staging

V8

~/git/v8$ git log --oneline --graph --merges -15 

(There don't seem to be any merge commits in the v8 repository.)

Rust

$ git log --oneline --graph --merges -25
* 7dbee36 Auto merge of #25449 - IvanUkhov:std-doc, r=alexcrichton
* e10bd27 Auto merge of #25447 - brson:version, r=alexcrichton
* 4ce08a5 Auto merge of #25440 - durka:patch-3, r=alexcrichton
* 7a52835 Auto merge of #25466 - P1start:move-closure-span, r=alexcrichton
* daaf715 Auto merge of #25432 - killercup:patch-12, r=steveklabnik
* a9ea33f Auto merge of #25437 - MazinZ1:master, r=alexcrichton
* 716f920 Auto merge of #25429 - nham:patch-1, r=steveklabnik
* b948d81 Auto merge of #25219 - Eljay:fix-comment-parsing, r=alexcrichton
* 9bebe5f Auto merge of #25059 - erickt:pprint, r=acrichto
* 13a4b83 Auto merge of #25402 - parir:master, r=Manishearth
* 7ebaf1c Auto merge of #25423 - dotdash:assume, r=huonw
* 579e319 Auto merge of #25400 - nrc:save-api, r=huonw
* 072cba9 Auto merge of #25422 - cactorium:unsafe_errors, r=huonw
| * 507f8b8 Fix merge conflict and also add markdown formatting
* | 0077ffe Auto merge of #25419 - nrc:time, r=alexcrichton
* |   daabc8a Auto merge of #25421 - steveklabnik:rollup, r=steveklabnik
|\ \  
| * | 6df13d4 Rollup merge of #25420 - habnabit:master, r=steveklabnik
| * | 5501f07 Rollup merge of #25418 - leunggamciu:patch-trpl, r=steveklabnik
| * | 8d52274 Rollup merge of #25414 - apasel422:patch-1, r=alexcrichton
| * | aa56011 Rollup merge of #25413 - killercup:patch-11, r=alexcrichton
| * | 609b4a1 Rollup merge of #25412 - koute:master, r=alexcrichton
| * | dd60abc Rollup merge of #25410 - durka:patch-2, r=steveklabnik
| * | 765a55e Rollup merge of #25408 - Nashenas88:rust-book-stack-and-heap-typo, r=steveklabnik
| * | c356211 Rollup merge of #25407 - durka:patch-1, r=alexcrichton
| * | 0028f85 Rollup merge of #25405 - dreid:patch-3, r=nikomatsakis

OpenStack Nova

~/git/nova]$ git log --oneline --merges --graph -15
* d574aaf Merge "Updated from global requirements"
* ce72bec Merge "_can_fallocate should throw a warning instead of error"
* f2013bc Merge "Note in HypervisorSupportMatrix for Libvirt/LXC shutdown kernel bug"
* e37cafb Merge "Create filter_properties earlier in boot request"
* 853424c Merge "Remove releasenotes/build between releasenotes runs"
* 20c28fc Merge "enginefacade: 'ec2_instance' and 'instance_fault'"
* df83122 Merge "Add service status notification"
* 69465d6 Merge "hardware: check whether realtime capable in API"
* 833face Merge "Add a REST API to trigger crash dump in an instance."
* d886eca Merge "Assignment (from method with no return) removed"
* 349d7f0 Merge "nova conf single point of entry: fix error message"
* e06b219 Merge "XenAPI: Expose labels for ephemeral disks"
* d2baf6c Merge "VMware: no longer convert image meta from dict to object"
* ac367f5 Merge "Remove catching of ComputeHostNotFound exception"
* cdfb527 Merge "libvirt: use native AIO mode for cinder volumes"

Ruby on Rails

~/git/rails$ git log --oneline --graph --merges -15 
* e3a0ad8 Merge pull request #23216 from prathamesh-sonpatki/fix-23137
* 75a8973 Merge pull request #23102 from yui-knk/foreign_type_to_singular_association
* 39ea2b0 Merge pull request #23206 from joyvuu-dave/action_cable_api_fix
* 4fdc56d Merge pull request #23207 from y-yagi/fix_path_of_actioncable_config
* f3cf476 Merge branch 'master' of github.com:rails/docrails
* 9bb5f5f Merge pull request #23201 from dkniffin/patch-1
* f692513 Merge pull request #23126 from Gaurav2728/implement_rake_to_rails_taks_in_doc
* cf1cf02 Merge pull request #23194 from britg/patch-2
* 84461db Merge pull request #23177 from vipulnsward/testing-pass-1
* 9e4534c Merge pull request #23182 from palkan/add-docs-tsrange
* 8383f79 Merge pull request #23178 from vipulnsward/rm-changelog
* a2a6806 Merge pull request #23180 from y-yagi/remove_per_form_csrf_tokens_initializer_from_rails_api
* 5d9e923 Merge pull request #23174 from JuanitoFatas/followup-skip-action-cable
* 24a316d Merge pull request #23175 from maclover7/add-ac-appgen-test
* a688c03 Merge pull request #23080 from prathamesh-sonpatki/fix-cache-key-for-loaded-empty-collection

LuaJIT (v2.1 branch)

~/git/luajit$ git log --oneline --graph --merges -15 v2.1
* 126e55d Merge branch 'master' into v2.1
* 0aa337a Merge branch 'master' into v2.1
* 3ad7734 Merge branch 'master' into v2.1
* ffb124e Merge branch 'master' into v2.1
* e54ca42 Merge branch 'master' into v2.1
* b20642c Merge branch 'master' into v2.1
* 776c693 Merge branch 'master' into v2.1
* 22a9ed8 Merge branch 'master' into v2.1
* 0b09c97 Merge branch 'master' into v2.1
* 49427df Merge branch 'master' into v2.1
* ca78889 Merge branch 'master' into v2.1
* b86fc2b Merge branch 'master' into v2.1
* 0dcd2d1 Merge branch 'master' into v2.1
* 5874c21 Merge branch 'master' into v2.1
* 5081e38 Merge branch 'master' into v2.1
cdman commented 8 years ago

IMHO it is really unfortunate that GitHub doesn't support the rebase / fast-forward merge workflow from the UI :-(. These merge commits don't provide any useful information and are just noise in the history.

lukego commented 8 years ago

@cdman do the merge commits tell us anything interesting about the way each project is developed?

vy commented 8 years ago

Interesting list @lukego. I also wonder the same question: What do the merge commits really tell us?

lukego commented 8 years ago

@vy: I'll interpret one:

The LuaJIT merge commits tell us that upstream is maintaining two branches in parallel: the stable master branch and the development v2.1 branch. Bug fixes are committed to the master branch and then merged onto the v2.1 branch so that they land in both places. Features are committed to the v2.1 branch only and are not merged back onto the stable branch.

This workflow is supported by git merge because it makes sure that each commit on the master branch is applied to the v2.1 branch exactly once.

Somebody else's turn to interpret the next one :)

lheckemann commented 7 years ago

Some further reading on linux merge commits