From: Alexey Tourbin <at@altlinux.ru> To: devel@lists.altlinux.org Subject: [devel] perl.git rewrite history Date: Wed, 20 Sep 2006 08:54:03 +0400 Message-ID: <20060920045403.GB30153@localhost.localdomain> (raw) [-- Attachment #1: Type: text/plain, Size: 2580 bytes --] Первый блин всегда комом. Я решил переписать историю коммитов (но не сами файлы-объекты) в perl.git. На это есть две мелкие причины: 1) В некоторых commit message вместо \n стоят \r. gitk от этого плющит. Соответственно нужно применить фильтр (если совсем правильно) perl -0777 -pe 's/\r\n/\n/g;s/\n\r/\n/g;s/\r/\n/g' 2) Нужно заменить committer email: at@localhost.localdomain => at@altlinux.ru. И ещё. 3) Для названий браней и тагов хочу сделать s/perl-//. В общем дальше я собрался написать как я с этим трахался и спросить всё ли сделал правильно, но вроде всё получилось. Самое неприятное что в cherry-picked коммитах пришлось в тексте заменять название tree-ish скорее вручную чем автоматически. Т.к. git-push не умеет удалять старые бранчи и таги, я сделал git-rm-db и сейчас заливаю по новой. Типа прошу прощения за причиненные неудобства и всё такое. Зато я примерно понял как устроен git. Сейчас попробую объяснить, может кому-нибудь от этого будет просветление. git -- это дерево объектов. Дерево означает что один объект содержит ссылки на другие объекты вниз по дереву. Объекты бывают двух типов: blob (файлы) и tree (структура каталогов, в которые надо сувать файлы). tree содержит ссылки на блобы. Ещё бывают объекты типа commit; каждый новый commit описывает трансформацию дерева относительно предыдущего коммита. В объекте commit содержится ссылка на предыдущий коммит и ссылка на дерево, которое перекрывает этот предыдущий коммит. Всё что новое дерево не перекрывает -- всё то остается от дерева из старого коммита. Так, имея на руках коммит, можно пройтись вниз по дереву к предыдущему коммиту и т.д., т.е. полностью развернуть дерево исходников. Далее, есть два типа ссылок, осмысленных для пользователя: heads и tags. Heads -- это бранчи, каждый бранч содержит ссылку на какой-либо корневой узел в дереве. Когда мы коммитим в бранч, корневой узел заменятся очередным коммитом, а старое значение бранча подшивается в новый корневой узел в качестве родительского. То есть наслаивается примерно как сосульки растут вверх, сталагмиты что ли. Вершина такой сосульки называется head. Таг -- это просто указатель на какой-либо коммит. Слабый таг сразу указывает на коммит, а сильный таг -- это отдельный объект типа tag, в котором есть ссылка на коммит. Ну вот и всё. Все базовые средства git (plumbing) как раз непосредственно работают с этим деревом. А из этих базовых средств уже делают утилиты (porcelain -- как фарфор из глины), которые уже умеют делать всякие там штучки-дрючки. [-- Attachment #2: Type: application/pgp-signature, Size: 189 bytes --]
next reply other threads:[~2006-09-20 4:54 UTC|newest] Thread overview: 4+ messages / expand[flat|nested] mbox.gz Atom feed top 2006-09-20 4:54 Alexey Tourbin [this message] 2006-09-20 8:35 ` Damir Shayhutdinov 2006-09-20 21:08 ` [devel] gear-srpmimport Dmitry V. Levin 2006-09-20 16:48 ` [devel] perl.git rewrite history Dmitry V. Levin
Reply instructions: You may reply publicly to this message via plain-text email using any one of the following methods: * Save the following mbox file, import it into your mail client, and reply-to-all from there: mbox Avoid top-posting and favor interleaved quoting: https://en.wikipedia.org/wiki/Posting_style#Interleaved_style * Reply using the --to, --cc, and --in-reply-to switches of git-send-email(1): git send-email \ --in-reply-to=20060920045403.GB30153@localhost.localdomain \ --to=at@altlinux.ru \ --cc=devel@lists.altlinux.org \ /path/to/YOUR_REPLY https://kernel.org/pub/software/scm/git/docs/git-send-email.html * If your mail client supports setting the In-Reply-To header via mailto: links, try the mailto: link
ALT Linux Team development discussions This inbox may be cloned and mirrored by anyone: git clone --mirror http://lore.altlinux.org/devel/0 devel/git/0.git # If you have public-inbox 1.1+ installed, you may # initialize and index your mirror using the following commands: public-inbox-init -V2 devel devel/ http://lore.altlinux.org/devel \ devel@altlinux.org devel@altlinux.ru devel@lists.altlinux.org devel@lists.altlinux.ru devel@linux.iplabs.ru mandrake-russian@linuxteam.iplabs.ru sisyphus@linuxteam.iplabs.ru public-inbox-index devel Example config snippet for mirrors. Newsgroup available over NNTP: nntp://lore.altlinux.org/org.altlinux.lists.devel AGPL code for this site: git clone https://public-inbox.org/public-inbox.git