Несмотря на вековые вопросы и ответы. Я думал, что добавлю один, так как это долго беспокоило меня.
Я привык перечислять файлы в каталоге в обратном порядке (смешно, хе?). Причина в том, что я хотел бы видеть, какие файлы, которые у меня (или кто-то еще) изменились недавно.
Git испортит мои планы, потому что при переключении филиала локальное хранилище полностью перезаписывает отслеживаемые файлы из (инкрементных ... я знаю ...) копий, которые находятся в упакованном локальном хранилище.
Таким образом, все извлеченные файлы будут иметь отметку времени оформления и не будут отражать время их последнего изменения ..... Как это раздражает.
Итак, я разработал однострочную версию bash, которая будет обновлять свойство $ Date: $ внутри любого файла ВРЕМЯ ПОСЛЕДНЕЙ МОДИФИКАЦИИ В СООТВЕТСТВИИ С НАСТОЯЩИМ ФАЙЛОМ таким образом, чтобы я будет немедленно сообщать о последней модификации, не просматривая git log
, git show
или любой другой инструмент, который дает время фиксации в режиме обвинение .
Следующая процедура изменит ключевое слово $ Date: $ только в отслеживаемых файлах, которые будут переданы в репо. Он использует git diff --name-only
, в котором будут перечислены файлы, которые были изменены, и ничего больше ....
Я использую эту однострочную строку вручную перед передачей кода. Однако я должен перейти к корневому каталогу репозитория, прежде чем применять это.
Вот вариант кода для Linux (вставлен как многострочный для удобства чтения)
git diff --name-only | xargs stat -c "%n %Y" 2>/dev/null | \
perl -pe 's/[^[:ascii:]]//g;' | while read l; do \
set -- $l; f=$1; shift; d=$*; modif=`date -d "@$d"`; \
perl -i.bak -pe 's/\$Date: [\w \d\/:,.)(+-]*\$/\$Date: '"$modif"'\$/i' $f; \
git add $f; done
и OSX
git diff --name-only | xargs stat -f "%N %Sm" | while read l; do \
set -- $l; f=$1; shift; d=$*; modif=`date -j -f "%b %d %T %Y" "$d"`; \
perl -i.bak -pe 's/\$Date: [\w \d\/:,.)(+-]*\$/\$Date: '"$modif"'\$/i' $f; \
git add $f; done