netch80: (Default)
netch80 ([personal profile] netch80) wrote2010-11-29 09:53 am

git и прочие, 2 года спустя

Убедился, что упорно предпочитаю git остальным средствам, но это никак не связано собственно с распределённостью, а с несколькими фишками:
1. Понятие отдельного "индекса" и удобство управления им. Особенно рулит возможность частичного коммита из файла и даже с ручной рихтовкой патча перед его вносом, если add --interactive недостаточно.
2. Лог со включённым в него диффом (git log -p), или описанием изменений (--stat)

Несколько раз натыкались на merge, который таинственным образом поднимал старые, давно неактуальные состояния чего-то, причём сделавший этот merge ничего плохого не заметил (и конфликта, по его словам, не было). Эргономика слияний явно недодумана.

Зато несколько раз ошибся в SVN, сделав svn update в подкаталоге и решив, что и остальная часть дерева тоже обновлена.

[identity profile] p1r4nh4.livejournal.com 2010-11-29 12:44 pm (UTC)(link)
Так нихрена кайфа отдельного индекса и не понял. Пользуюсь crecord'ом и доволен им, а индекс в гите в основном скрыт командой commit -a.

Про мерж странно, однако.

[identity profile] p1r4nh4.livejournal.com 2010-11-29 12:44 pm (UTC)(link)
Я в смысле себе его скрываю, чтоб не путался под ногами, когда не надо. alias ci="commit -a" и всë.

[identity profile] anatoly borodin (from livejournal.com) 2010-11-30 06:10 am (UTC)(link)
> Несколько раз натыкались на merge, который таинственным образом поднимал старые, давно неактуальные состояния чего-то, причём сделавший этот merge ничего плохого не заметил (и конфликта, по его словам, не было). Эргономика слияний явно недодумана.

Как это выглядит?
ext_605364: geg MOPO4 (Default)

[identity profile] gegmopo4.livejournal.com 2010-12-01 02:52 pm (UTC)(link)
Зато несколько раз ошибся в SVN, сделав svn update в подкаталоге и решив, что и остальная часть дерева тоже обновлена.
От этого помогает svnversion в сборочных скриптах.
ext_605364: geg MOPO4 (Default)

[identity profile] gegmopo4.livejournal.com 2010-12-01 03:00 pm (UTC)(link)
Например:
$ cat makebranch
#!/bin/sh
if [ $# -lt 1 ]
then
	echo "Usage: $0 BRANCH"
	exit 1
fi
BRANCH="$1"
echo "version=$BRANCH" >branch.version
BASE="https://путь_к_хранилищу"
SRC="$BASE/trunk"
DST="$BASE/branches/$BRANCH"
svnmucc -m "Creating branch $BRANCH" \
	cp "$(svnversion)" "$SRC" "$DST" \
	put branch.version "$DST/build.properties"
С незакоммиченными изменениями или частично апдейтнутое просто не поедет.

[identity profile] nuclight.livejournal.com 2011-02-08 05:26 pm (UTC)(link)
В hg, говорят, еще более удобно сделали: http://pqr7.wordpress.com/2011/01/07/a-git-users-guide-to-mercurial-queues/

[identity profile] nuclight.livejournal.com 2011-02-08 05:30 pm (UTC)(link)
Правда, нахрена нужно что оно, что в git - всё равно непонятно. Зачем задерживать и укрупнять коммиты? Понимаю, в CVS с этим было сложно, а сейчас-то завести на такой случай ветку и потом смержить - не проблема.

[identity profile] http://users.livejournal.com/_slw/ 2011-06-22 10:37 am (UTC)(link)
а как борьба с сабпроектами в git?
методом тотального запрета?