Игра стабала

Недавно је на мејлинг листи misc@ OpenBSD-а у теми о омиљеним програмима за репликацију система поменут got — Game Of Trees („игра стабала“), што ме је заинтересовало за овај систем за контролу верзија. За њега сам чуо и раније, али сам сада одлучио да га боље проучим и започнем процес преласка са git-а na got.

misc@

got — Game Of Trees

На питање „Чему све ово? Зашто просто не користити Git?“ у „често постављаним питањима“ got-а, тренутно је дат, по мом мишљењу, непотребно одвраћајући одговор:

We don't need to hear your opinion that our project is pointless because Git is superior. Thank you!

тј.

Не треба нам ваше мишљење да је наш пројекат бес��ислен зато што је Git бољи, хвала!

Овакав одговор маши поенту. Неко ко не познаје got и заиста је заинтересован за разлог његовог постојања, без намере да га омаловажава, остаје ускраћен за одговор. Такође је, слично пројекту Џемини, употребљена (по мени неискрена, и то непотребно) ограда да got „нема намеру да замени git“, и да је „било ко ко намерава да протури идеју замене git-а got-ом у великој заблуди“. Како да не! И зашто да не?

„често постављаним питањима“

пројекту Џемини

„нема намеру да замени git“

Коришћењем got-а постају јасне његове предности и оправданост његовог постојања. Got се према git-у односи отприлике као OpenBSD према било ком мејнстрим систему ГНУ-а са Линуксом: фокусирање на оно што је битно, без непотребних могућности које се ретко користе или се могу урадити на други начин, већ постојећим програмима, а које уз то само стварају додатне мете за пробијање безбедности. Got је, у ствари, git који поштује основне вредности OpenBSD-а. Уз све то, got користи исти формат репозиторијума као и git, само што је сваки репозиторијум у њему „го“ („bare“), и радно стабло (work tree) се мора експлицитно направити из репозиторијума. Директоријум радног стабла се не сме преклапати са директоријумом репозиторијума, а got користи уграђене механизме OpenBSD-а, као што је unveil(2), да ограничи свој приступ и радном стаблу и репозиторијуму само на минимум неопходан за функционисање.

unveil(2)

За сада једини ресурс за учење got-а су његове странице упутства и упоредни преглед got-а и осталих пос��ојећих система за контролу верзија, као што су CVS, SVN и git. Учећи got из ових докумената, мој први пројекат који сам пребацио на got је програм table, а између осталог, got омогућава далеко елегантније генерисање верзије и датума последњег чувања. Рецимо:

got log |
awk '
/^date: / {
	gsub(/^date: /,"",$0);
	print $2 " " $3 ", " $5
	exit
}' >date.new

наспрам:

LC_ALL=C
export LC_ALL
user=$(unalias ls >/dev/null 2>&1 || true; \
	command ls -ld . | awk '{print $3}')
e_user=$(id -un)
if [ "$e_user" = "$user" ]; then
	git log --format=format:%cd \
		--date=format:"%B %d, %Y" -1 @ >date.new
else
	su "${user}" -c 'env LC_ALL=C git log --format=format:%cd \
		--date=format:"%B %d, %Y" -1 @' >date.new
fi
echo >>date.new

Комплекснији код је последица тога што git, за разлику од got-а, не дозвољава кориснику root да извршава наредбе у корисничком репозиторијуму без подешавања safe.directory у /root/.gitconfig.

странице упутства

упоредни преглед

програм table