Неоднократно застегивая файл, который был недавно создан, но идентичен, однако shasum zip продолжает меняться

Это продолжение, когда я неоднократно застегиваю одну и ту же папку с файлами, но shasum продолжает существенно меняться ..

Я пытаюсь добавить файл, содержащий git sha текущего коммита, когда я застегиваю часть своего репозитория и беру его sha sum ..

Код для этого – git rev-parse HEAD > .gitsha . Однако добавление этого к моему zip означает, что shasum моего zip постоянно меняется каждую секунду или около того. Команда zip использует -X для игнорирования временных меток файла.

Я экспериментировал только с файлом .gitsha ниже

 $ git rev-parse HEAD > .gitsha ; shasum .gitsha 8fa263bc885822ccba03006ea10015ef32da485c .gitsha 

Это согласуется с течением времени.

Однако после того, как он застегнул его, shasum больше не соответствует

 $ git rev-parse HEAD > .gitsha ; zip -X --quiet -r test.zip .gitsha ; shasum test.zip 26cc38c624f91a1c555d503fdfdecb1ce670274f test.zip $ git rev-parse HEAD > .gitsha ; zip -X --quiet -r test.zip .gitsha ; shasum test.zip b03f7cb654e3aa0d25d18ead5fe1f225bc2aac9f test.zip 

Это 2 испытания на несколько секунд друг от друга. Я полагаю, что флаг -X не включает время создания? Любой способ заставить это работать?

Обновление: удаление zip не помогает.

 $ rm test.zip; git rev-parse HEAD > .gitsha ; zip -X --quiet -r test.zip .gitsha ; shasum test.zip 76c722ccf2df75fb624f9640ad948f4508dd6152 test.zip $ rm test.zip; git rev-parse HEAD > .gitsha ; zip -X --quiet -r test.zip .gitsha ; shasum test.zip 6bd26d2bc821d9f12806fc81a8ba8c8babcc664a test.zip 

3 Solutions collect form web for “Неоднократно застегивая файл, который был недавно создан, но идентичен, однако shasum zip продолжает меняться”

Проверьте вывод команды strings в zip-файлах:

 $ strings test.zip blah.zip .gitshab9e1355d36643fefe94da0bee81533cd8cbb04d9 .gitshaPK QH;F .gitshab9e1355d36643fefe94da0bee81533cd8cbb04d9 QH;F .gitshaPK 

Содержимое трех строк остается неизменным, но порядок меняется. Таким образом, может быть какой-то компонент zip-файла, который не зависит от порядка. Я буду обновлять, когда могу определить, как сделать вывод постоянным.

Команда zip добавляется к выходному zip-файлу. Попробуйте удалить его между прогонами.


Обновление: я тестировал -X для себя, и кажется, что он по-прежнему вставляет временную метку файла в файл (как видно в unzip -l )

Если вы посмотрите на протокол в википедии, вы увидите, что поля даты и времени всегда присутствуют, а затем в конце заголовка у них есть место для полей, специфичных для ОС. Я бы сказал, что -X не учитывает дополнительные поля, специфичные для ОС.

Итак, я думаю, что единственный способ создать последовательный zip-файл – иметь согласованные временные метки. Вы можете попробовать прикоснуться к файлу до определенной даты, прежде чем добавлять его в zip-файл.

Я закончил создание .gitsha для репо в корневой папке и только переписал его, если он устарел. Это дает мне то, что я хочу .. за счет взрыва одной строки кода до 20 ..

 new_sha=$(git rev-parse HEAD) if [ -f ../.gitsha ] then old_sha=$(cat ../.gitsha) if [ $old_sha = $new_sha ] then generate=false echo "gitsha file up to date" else generate=true echo "gitsha file out of date" fi else echo "git sha file missing" generate=true fi if [ $generate = true ] then echo $new_sha > ../.gitsha fi 

вместо git rev-parse HEAD > .gitsha

  • извлекать только определенную папку Содержимое из архива с zip-файлом в данный каталог
  • Как создать несколько почтовых индексов из каталога, содержащего миллион XML-файлов?
  • Crack zip-файл с известными частями паролей
  • Как заменить файл в zip-файле
  • Высокая загрузка процессора с помощью zip-команды
  • В сценарии оболочки, Как передать переменную другое значение после выполнения одного задания?
  • Подкаталоги Zip на основе find, -exec
  • Файлы ZIP с ограничением по размеру
  • Как я могу игнорировать «zip warning: name not match» при использовании команды zip с опцией -d?
  • Распакуйте архив с более чем одной записью
  • Скопировать файл из одной ZIP в другую?
  • Linux и Unix - лучшая ОС в мире.