Судя по количеству вопросов на этом сайте для этих трех распределенных систем контроля версий, похоже, что Git либо
- является более популярным, или
- сложнее (следовательно, требует больше вопросов), или
- имеет больше возможностей (следовательно, требует больше вопросов).
Или, скорее всего, сочетание трех. (Допустим, популярность на этом сайте приравнивается к популярности в целом.) Вот цифры:
Неудовлетворительно иметь на выбор три конкурирующих, но в значительной степени эквивалентных продукта с открытым исходным кодом. Лично я использую Git, и я в порядке с двумя другими. Но когда дело доходит до рекомендации одной системы по сравнению с другими, я хотел бы спросить: можем ли мы начать рекомендовать одну безопасную еще?
Комментарии с середины 2009 года. Недавняя историческая популярность Subversion четко отражена в количестве вопросов, указывающих, по крайней мере, на небольшое изменение шкалы в сторону Git над Mercurial или Bazaar.
Комментарии с середины 2010 года: посмотрите на это огромное относительное увеличение численности ртути. Очевидно, что только двух точек данных недостаточно, чтобы показать тенденцию, но похоже, что Git и Subversion в значительной степени укоренились, Mercurial значительно выросла, а Bazaar остается относительно спокойным.
Краткий комментарий, середина 2011 года: можно ли назвать Git победителем? :)
Нет, я принимаю аргумент, что количество вопросов не эквивалентно популярности. Числа, конечно, сильны, хотя.
Коды для воспроизведения вышеуказанных сюжетов:
import datetime as dt
import matplotlib.pyplot as plt
dates = [
"01/06/2009",
"01/07/2010",
"01/07/2011",
"01/07/2012",
"01/07/2013",
"01/07/2014",
"01/07/2015",
"01/07/2016",
"01/06/2017",
"28/08/2018",
"27/05/2019"
]
x = [dt.datetime.strptime(d, "%d/%m/%Y").date() for d in dates]
git = [726, 3725, 9225, 17523, 27862, 41478, 55315, 71056, 86958, 102362, 110970]
svn = [2353, 5323, 9028, 12687, 15587, 18846, 21209, 23037, 24692, 25525, 25868]
mercurial = [169, 1120, 2765, 4221, 5230, 6030, 6651, 7134, 7524, 7765, 7894]
bazaar = [50, 159, 252, 351, 425, 483, 506, 525, 534, 539, 544]
ax = plt.gca()
ax.grid()
plt.plot(x, git, label="[git]")
plt.plot(x, svn, label="[svn]")
plt.plot(x, mercurial, label="[mercurial]")
plt.plot(x, bazaar, label="[bazaar]")
plt.gcf().autofmt_xdate()
plt.ylabel("number of tags on stackoverflow")
plt.ylim(0)
plt.legend()
# plt.show()
plt.savefig("comparison.png", transparent=True, bbox_inches="tight")
import datetime as dt
import matplotlib.pyplot as plt
dates = [
"01/06/2009",
"01/07/2010",
"01/07/2011",
"01/07/2012",
"01/07/2013",
"01/07/2014",
"01/07/2015",
"01/07/2016",
"01/06/2017",
"28/08/2018",
"27/05/2019"
]
x = [dt.datetime.strptime(d, "%d/%m/%Y").date() for d in dates]
git = [726, 3725, 9225, 17523, 27862, 41478, 55315, 71056, 86958, 102362, 110970]
svn = [2353, 5323, 9028, 12687, 15587, 18846, 21209, 23037, 24692, 25525, 25868]
mrc = [169, 1120, 2765, 4221, 5230, 6030, 6651, 7134, 7524, 7765, 7894]
bzr = [50, 159, 252, 351, 425, 483, 506, 525, 534, 539, 544]
n = len(dates)
intervals = [x[i+1] - x[i] for i in range(n-1)]
git_per_day = [(git[i+1] - git[i]) / intervals[i].days for i in range(n-1)]
svn_per_day = [(svn[i+1] - svn[i]) / intervals[i].days for i in range(n-1)]
mrc_per_day = [(mrc[i+1] - mrc[i]) / intervals[i].days for i in range(n-1)]
bzr_per_day = [(bzr[i+1] - bzr[i]) / intervals[i].days for i in range(n-1)]
ii = [0] + [val for val in range(1, n-1) for _ in (0, 1)] + [n-1]
jj = [val for val in range(n-1) for _ in (0, 1)]
ax = plt.gca()
ax.grid()
plt.plot([x[i] for i in ii], [git_per_day[j] for j in jj], label="[git]")
plt.plot([x[i] for i in ii], [svn_per_day[j] for j in jj], label="[svn]")
plt.plot([x[i] for i in ii], [mrc_per_day[j] for j in jj], label="[mercurial]")
plt.plot([x[i] for i in ii], [bzr_per_day[j] for j in jj], label="[bazaar]")
plt.gcf().autofmt_xdate()
plt.ylabel("average daily tags on stackoverflow")
plt.legend()
plt.ylim(0)
# plt.show()
plt.savefig("comparison-daily.png", transparent=True, bbox_inches="tight")