2013-09-28 4 views
0

Кто-нибудь знает способ изменить mtime на время выполнения репо (или любое другое, но зависит от метаданных commit) для добавленных/обновленных файлов?изменить mtime on git pull

У нас есть некоторая логика, которая проверяет файлы mtime, но серверы бэкэнда имеют разные mtime файлы, которые были изменены, из-за этого у нас есть некоторые ошибки.

ответ

0

Предполагая, что вы обновляете/добавляете файлы, когда делаете git fetch, вы можете создать файл сценария git-rebase-touch, который выполняет переформатирование для вас, а также касаться всех файлов/каталогов в каждой новой редакции.

Сценарий будет выглядеть следующим образом:

#!/bin/bash 

saveIFS=${IFS} 
IFS=$'\n' 
startrev=$(git rev-parse HEAD) 
git rebase 
for rev in $(git rev-list --reverse ${startrev}..HEAD); do 
    stamp=$(git log --pretty="%aD" ${rev}~..${rev}) 
    IFS=$'\n' 
    for filename in $(git diff --name-only ${rev}~..${rev}); do 
     file="" 
     IFS='/' 
     for part in ${filename}; do 
      file=${file}/${part} 
      file=${file#/} 
      touch -c --date="${stamp}" "${file}" 
     done 
    done 
done 
IFS=${saveIFS} 

Если вы используете git pull теперь использовать git fetch вместо этого.

+0

О, я думал, что у него есть опция для этого маленького, но отличного функционала git :) Я не хочу скрипта, но спасибо! он должен работать в любом случае, я попробую прямо сейчас :) –

+0

Удобный синтаксис для '$ {rev} ~ .. $ {rev}' is '$ {rev} ^!' – jthill

-1

Это очень опасный тайм-аут файла настройки, и еще более опасно предполагать, что вы делаете здесь, что временная метка означает нечто иное, чем то, что обычно означает. Что-нибудь, а не только временные метки, что делает это вредит надежности и ремонтопригодности, это затрудняет понимание и аудит. Файлы изменились по уважительной причине, и ваша система сломалась.

Временные метки, которые вы хотите проверить, записываются в метаданных совершения, и получение их недостаточно эффективно. Переключитесь на извлечение временных меток в индексный файл или некоторые из них и проверьте их там. В противном случае вы сводились к тому, чтобы рассказывать людям, изучающим вашу установку, что «не все так, как кажется».

+0

почему вы так думаете? –