With modern version-control systems, while the creation of new branches and forks is easy and fast, merging is often time-consuming. Especially, when dealing with many branches or forks, a prediction of merge costs based on proper indicators would be desirable to help developers recognize problematic merging scenarios before potential conflicts become too severe in the evolution of a software project.
We analyze the predictive power of several indicators, such as the number, size, or scattering degree of commits in each branch, derived either from the version-control system or directly from the source code. Based on a survey of 41 developers, we expect 7 indicators being feasible to predict the number of merge conflicts. We test our hypotheses in a study of 155 open-source projects including 32,579 merge scenarios and comprising 50 million lines of code.
A notable (“negative”) result is that none of 7 indicators suggested by the developer survey has a predictive power concerning the frequency of merge conflicts. We discuss this and other findings as well as perspectives thereof.
Project | Domain | Merge Scenarios | Lines of Code |
---|---|---|---|
Osmand | Navigation App | 971 | 151715 |
intellij-community | IDE | 880 | 3623963 |
robolectric | Testing framework | 859 | 73816 |
rundeck | Job Scheduler | 802 | 92373 |
wro4j | Optimizer | 801 | 51421 |
Spout | Game Engine | 766 | 113909 |
dropwizard | Library | 738 | 26591 |
FBReaderJ | E-book Reader | 738 | 76033 |
rstudio | IDE | 680 | 165967 |
OpenTripPlanner | Trip Planner | 678 | 109731 |
lantern | Proxy | 671 | 29729 |
druid | Analysis Tool | 627 | 160297 |
okhttp | Web browser | 598 | 46039 |
BuildCraft | Game | 560 | 74034 |
Essentials | Game | 509 | 42837 |
andlytics | Analysis Tool | 490 | 47326 |
MozStumbler | Wifi Scanner | 473 | 24283 |
groovy-core | Programming Language | 447 | 224265 |
fitnesse | Testing Framework | 445 | 70697 |
Kundera | Library | 442 | 336686 |
Activiti | Business Process Management Platform | 436 | 245414 |
tachyon | Distributed Storage System | 433 | 81906 |
sensei | Distributed Database | 421 | 29548 |
Algorithm-Implementations | Algorithm Library | 399 | 3429 |
hector | Database Client | 359 | 37814 |
phoenix | JDBC Driver | 358 | 126638 |
antlr4 | Parser Generator | 350 | 74398 |
nokogiri | Parser | 329 | 17176 |
Equivalent-Exchange-3 | Game | 322 | 17920 |
voldemort | Distributed Storage System | 317 | 200192 |
junit | Testing Framework | 310 | 32629 |
elephant-bird | Library | 307 | 26274 |
k-9 | Mail Client | 293 | 71959 |
gocd | Continuous Integration Management | 287 | 320592 |
BroadleafCommerce | eCommerce Framework | 284 | 218253 |
nutz | Web Application Framework | 279 | 33094 |
gitblit | Git Server | 273 | 92323 |
metrics | Analysis Tool | 272 | 19025 |
picasso | Library | 271 | 10689 |
generator-jhipster | Web Application Framework | 270 | 5811 |
dynmap | Game Extension | 251 | 5177 |
storm | Realtime Computation System | 249 | 58118 |
testng | Testing Framework | 249 | 64868 |
dagger | Dependency Injector | 245 | 11560 |
mcMMO | Game Extension | 242 | 33485 |
hector | Database Client | 233 | 31703 |
syncany | Filesharing Application | 224 | 54330 |
servo | Library | 223 | 29512 |
atmosphere | Web Application Framework | 214 | 51952 |
gherkin | Parser | 209 | 58236 |
google-go-lang-idea-plugin | IDE Plugin | 207 | 53285 |
processing | DSL | 197 | 115155 |
blueprints | Property Graph Model Interface | 197 | 36390 |
java-driver | Library | 196 | 50321 |
async-http-client | Library | 194 | 41856 |
commons | Library | 193 | 67526 |
Rajawali | 3D Engine | 193 | 36111 |
torquebox | Application Server | 189 | 1668 |
mct | Monitoring Platform | 186 | 174184 |
jedis | Database Client | 182 | 23805 |
gephi | Graph Visualization Platform | 177 | 182724 |
commafeed | RSS Reader | 177 | 9386 |
Arduino | Electronics Prototyping Platform | 176 | 28928 |
twitter4j | Twitter Library | 175 | 42855 |
spring-social | Service Provider Framework | 168 | 16002 |
gwt-bootstrap | Web Interface Library | 168 | 29772 |
dynjs | Programming Language | 164 | 46455 |
titan | Graph Database | 158 | 98624 |
spring-roo | Application Development Framework | 158 | 126158 |
cucumber-jvm | Testing Framework | 158 | 25860 |
jzmq | Messaging Library | 153 | 6105 |
astyanax | Database Client | 152 | 68657 |
Hystrix | Interface Monitoring Library | 150 | 40596 |
netty | Network Application Framework | 150 | 228418 |
graylog2-server | Logfile Analyzer | 149 | 90921 |
eureka | Load Balancer | 144 | 19011 |
SimianArmy | Cloud Computing Tool Suite | 143 | 23087 |
curator | Zookeeper Library | 139 | 3209 |
logback | Logging Framework | 130 | 81658 |
jackson-databind | Data-binding Library | 126 | 115373 |
javaee7-samples | Samples | 124 | 33349 |
titanium\_modules | Modules | 123 | 64750 |
robospice | Android Library | 122 | 19573 |
TextSecure | Instant Messenger | 119 | 58415 |
vrapper | Eclipse Plugin | 113 | 35414 |
reactor | Application Development Framework | 112 | 52238 |
ActionBarSherlock | Android Library | 111 | 36333 |
robotium | Testing Framework | 110 | 8362 |
ListViewAnimations | Android Library | 108 | 8952 |
mongo-java-driver | Database Driver | 108 | 94234 |
jmxtrans | JMX Query Tool | 108 | 10451 |
lucene-solr | Search Engine | 107 | 884947 |
Conversations | Instant Messenger | 106 | 22921 |
spoon | Testing Framework | 104 | 6160 |
AndEngine | Game Engine | 102 | 52912 |
jphp | Compiler | 100 | 79048 |
jeromq | Messaging Library | 99 | 30331 |
hive | Data Warehouse Software | 99 | 844898 |
b3log-solo | Blog Software | 98 | 26595 |
exhibitor | Zookeeper Supervision System | 98 | 19323 |
mustache.java | Templates | 97 | 8867 |
sikuli | GUI Automation Software | 93 | 43242 |
rootbeer1 | GPU Compiler | 91 | 33452 |
lombok | Language Extension | 89 | 57164 |
StickyListHeaders | Android Library | 87 | 934 |
webbit | Web Server | 85 | 8084 |
flyway | Database Migration Tool | 85 | 28536 |
erjang | Virtual Machine | 83 | 60047 |
rexster | Graph Server | 79 | 26573 |
twitter-text-java | Text Processing Library | 79 | 731 |
spring-integration-samples | Samples | 78 | 15898 |
json | JSON Implementation | 75 | 4031 |
ghostdriver | Network Library | 74 | 3849 |
ImageLoader | Image Loader | 74 | 889 |
datafu | Data Processing Library | 74 | 27801 |
auto | Source Code Generator | 74 | 6913 |
mongo-hadoop | Hadoop Connector | 72 | 11118 |
AntennaPod | Podcast Manager | 70 | 39236 |
ps3mediaserver | Media Server | 70 | 45399 |
UpdateChecker | Update Manager | 70 | 1153 |
HoloEverywhere | Android Theme | 69 | 59837 |
OpenRefine | Data Processing Tool | 65 | 61725 |
hbc | HTTP Client Library | 64 | 6709 |
HikariCP | JDBC Library | 62 | 11345 |
yuicompressor | Source Code Compression | 60 | 6894 |
ShowcaseView | GUI App | 59 | 2204 |
jdbi | Database Library | 59 | 27552 |
ShowcaseView | GUI App | 58 | 2204 |
droidparts | Android Framework | 56 | 13696 |
Crouton | Android Library | 56 | 2373 |
scribe-java | Authentication Library | 56 | 6319 |
elasticsearch-river-mongodb | Database Library | 55 | 8908 |
weinre | Debugger | 54 | 2587 |
elephantdb | Distributed Database | 54 | 17868 |
sms-backup-plus | Backup Software | 52 | 9796 |
todo.txt-touch | Tasklist Manager | 52 | 51774 |
dsploit | Exploit Framework | 52 | 19388 |
twitter4j | Twitter Library | 51 | 50173 |
java-deeplearning | eLearning Platform | 50 | 50001 |
bonecp | Database Library | 48 | 26235 |
fastjson | JSON Processor | 47 | 70544 |
SlidingMenu | Android Library | 47 | 4238 |
databus | Analysis Tool | 47 | 181925 |
jitsi | Instant Messenger | 46 | 565986 |
closure-compiler | Compiler | 45 | 293908 |
eclipse-themes | Eclipse Plugin | 45 | 7833 |
photo-picker-plus | Photo App | 45 | 2600 |
mockito | Mocking Framework | 45 | 80171 |
elasticsearch | Search Engine | 43 | 546503 |
WorldEdit | Game Editor | 42 | 74199 |
aws-sdk-java | SDK | 37 | 1511531 |
ambrose | Monitoring Platform | 36 | 6123 |
spring-boot | Application Development Framework | 13 | 136990 |
cgeo | Geocaching App | 5 | 53156 |
liferay-portal | Web Platform | 1 | 2573254 |