From: Sergey Vlasov <vsu@altlinux.ru>
To: devel@lists.altlinux.org
Subject: Re: [devel] .gear/rules tar:, diff: и .gitattributes export-ignore
Date: Fri, 14 Jan 2011 19:09:28 +0300
Message-ID: <20110114160928.GD6580@newmaster.mivlgu.local> (raw)
In-Reply-To: <20110114144951.GA5645@altlinux.org>
[-- Attachment #1: Type: text/plain, Size: 4320 bytes --]
On Fri, Jan 14, 2011 at 05:49:51PM +0300, Dmitry V. Levin wrote:
> On Fri, Jan 14, 2011 at 05:03:58PM +0300, Sergey Vlasov wrote:
> > On Fri, Jan 14, 2011 at 03:26:45PM +0200, Sergey Shilov wrote:
> > > Начиная с версии R13B03 апстрим переехал на https://github.com/erlang/otp.git
> > > :-)
> >
> > Ага, и там есть файл .gitattributes:
> >
> > .gitattributes export-ignore
> > .gitignore export-ignore
> >
> > Вот как раз из-за этого файла (а не .gitignore) git archive и выбрасывает
> > из создаваемого архива файлы, для которых указан атрибут export-ignore.
> >
> > Явной опции для отключения этой функции у git archive нет, но можно перед
> > его вызовом вписать в .git/info/attributes строку:
>
> Но, поскольку локальные изменения в .git/info/ не передаются при git push
> и git fetch, это не очень удобно использовать при распределенной
> разработке с использованием gear.
Я имел в виду, что это можно делать в gear (правда, сейчас там создаются
только временные GIT_OBJECT_DIRECTORY и GIT_INDEX_FILE, но в принципе
отсюда уже недалеко и до создания полноценного временного репозитория со
своим .git/info/attributes). Это, кроме всего прочего, устранит возникшую
сейчас зависимость поведения gear от содержимого .git/info/attributes в
локальном репозитории.
Хотя вообще это не очень красивый объезд. Ну и export-ignore - это не
единственный атрибут, обрабатываемый git archive; есть ещё export-subst,
приводящий к изменению содержимого файлов при экспорте, что точно так же
может приводить к генерации в дальнейшем патчей, не накладывающихся на
результат git archive.
Вообще эту проблему можно решать несколькими способами:
1) Создавать в gear временный репозиторий с .git/info/attributes, в
котором принудительно сбрасывать атрибуты export-ignore и
export-subst. Плюсы: можно реализовать уже сейчас, изменяя только
gear (не требуется патчить сам git). Минусы: если апстрим при выпуске
релизов использует git archive, генерируемый gear архив перестанет
совпадать с апстримным (в случае использования export-ignore будет
содержать лишние файлы, для export-subst - нераскрытые шаблоны); при
появлении в новой версии git нового атрибута, обрабатываемого git
archive, придётся вновь исправлять gear.
2) Добавить в git archive опцию --ignore-attributes, полностью
отключающую обработку атрибутов. Этот вариант отличается от 1) только
большей устойчивостью к возможным будущим изменениям в git archive;
однако появляется требование использования вместе с gear и новой
версии git. Правда, можно добавить в gear ещё и определение наличия в
используемой версии git archive нужной опции, и работу по варианту 1)
в случае её отсутствия.
3) Можно пойти другим путём - решить, что не только команда tar в
.gear/rules должна обрабатывать .gitattributes, но и команды diff
должны давать результат, соотвествующий команде tar. Например, можно
при формировании diff использовать не git diff-tree, а извлечь через
git archive оба дерева и применить к ним обычный diff. В этом случае
получаемый diff не будет содержать файлов, исключённых через
export-ignore (если они исключены в обеих версиях), а также будет
содержать раскрытые шаблоны для export-subst. Существенные недостатки
такого варианта тоже очевидны - в первую очередь это скорость работы
(распаковка архивов с последующим сравнением всех файлов может занять
значительное время), также пропадает возможность получения diff в
формате git для последующего применения через git apply (например, при
модификации бинарных файлов или символических ссылок). Можно,
конечно, ввести в набор команд .gear/rules в дополнение к обычному
diff отдельную команду, работающую через git archive, для применения
только в случаях, когда используется .gitattributes.
4) Для ускорения работы варианта 3) можно попытаться добавить в git
diff-tree код для обработки .gitattributes способом, аналогичным git
archive, но это будет существенно сложнее, чем отрывать обработку
атрибутов от git archive.
5) Ничего не делать, предложить мантейнерам пакетов, столкнувшимся с
проблемой, паковать tar: @name@-@version@-@release@ без выделения
патчей в src.rpm.
[-- Attachment #2: Digital signature --]
[-- Type: application/pgp-signature, Size: 189 bytes --]
next prev parent reply other threads:[~2011-01-14 16:09 UTC|newest]
Thread overview: 12+ messages / expand[flat|nested] mbox.gz Atom feed top
2011-01-14 7:20 [devel] .gear/rules diff: и .gitignore Sergey Shilov
2011-01-14 8:05 ` REAL
2011-01-14 8:38 ` Ivan A. Melnikov
2011-01-14 9:03 ` REAL
2011-01-14 9:08 ` Ildar Mulyukov
2011-01-14 10:00 ` REAL
2011-01-14 10:29 ` Sergey Vlasov
2011-01-14 13:26 ` Sergey Shilov
2011-01-14 14:03 ` Sergey Vlasov
2011-01-14 14:49 ` Dmitry V. Levin
2011-01-14 16:09 ` Sergey Vlasov [this message]
2011-01-14 15:53 ` Sergey Shilov
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=20110114160928.GD6580@newmaster.mivlgu.local \
--to=vsu@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