Хотя извечный Q&A. Я подумал, что брошу одну, так как это уже давно меня беспокоит.
Я привык перечислять файлы в каталоге в обратном порядке (смешно, а?). Причина в том, что я хотел бы увидеть, какие файлы я (или кто-то еще) изменил в последнее время.
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
person
superk
schedule
23.01.2017