2010-07-20 2 views
0

Я использую giternal, который сжимает каталог .git внешних ссылок в файл .tgz. К сожалению, каждый раз, когда я «замораживаю» внешний, для репо создается новый .tgz-файл.Создание того же файла .tgz на разных машинах

Несмотря на то, что содержимое каталога .git одинаково, создается новый .tgz-файл с diff. Это приводит к раздуванию репо.

Есть ли способ заставить tar czf создать файл .tgz с точно таким же упакованным двоичным содержимым на разных машинах?

ответ

1

Как файлы, uid и gid хранятся вместе с содержимым файла в tar-архиве, трудно получить точно такой же архив. Я могу предложить только волосатое решение, например, сменить tar-файл на обычные времена и uids. Формат обмена ustar объясняется в определении POSIX утилиты pax. Или вы можете распаковать последние и текущие снимки и разделить их, решив, одинаковы ли они, и нужен ли вам последний.

+0

+1: Я недавно неоднократно переупаковывал код и задавался вопросом, почему я получаю разные контрольные суммы для одного и того же кода. В конце концов я понял, что это были временные метки файлов, которые менялись, а не файлы. –

+0

uid/gid может быть [faked] (http://fakeroot.alioth.debian.org/), а времена могут быть [установлены] (http://www.kernel.org/doc/man-pages/online/pages /man3/futimes.3.html), но порядок обхода каталога тоже может иметь значение, и я уверен, что есть другие вещи, которые мы оба теряем ... – ephemient

Смежные вопросы