-- Leo's gemini proxy

-- Connecting to gemini.strahinja.org:1965...

-- Connected

-- Sending request

-- Meta line: 20 text/gemini

Игра стабала


Недавно је на мејлинг листи 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 tag -l |
	awk '
	/^date: / {
		gsub(/^date: /,"",$0);
		print strftime("%B %d, %Y");
		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


-- Response ended

-- Page fetched on Sun Jun 2 11:34:19 2024