Почему GIT (v1.8, windows) изменяет время модификации файлов?
т.е. когда я переключаюсь на другую ветку, у всех извлеченных файлов время модификации становится равным моменту, когда был сделан checkout. Хотя реально файл не был изменен. Это доставляет проблемы при синхронизации файлзиллой, - после смены ветки на сервер качаются все файлы проекта (сверяется время изменения файлов).
Можно как-то пофиксить этот момент?
1. DelphinPRO - 24 Апреля, 2013 - 13:24:30 - перейти к сообщению
2. EuGen - 24 Апреля, 2013 - 13:56:11 - перейти к сообщению
Насколько я знаю, это является следствием того, что git является DVCS (Distributed VCS) - и, значит, репозиторий не централизован. Поэтому стандартными способами в git не удастся иметь датой модификации дату коммита (то есть реального изменения).
Там же - краткие рекомендации - создать скрипт в $GIT_DIR/.git/hooks/post-checkout :
stackoverflow пишет:
I'm sorry. If you don't see how it's WRONG to seta datestamp back to something that will make a simple "make" miscompile your source tree, I don't know what defintiion of "wrong" you are talking about.
It's WRONG.
It's STUPID.
And it's totally INFEASIBLE to implement.
It's WRONG.
It's STUPID.
And it's totally INFEASIBLE to implement.
Там же - краткие рекомендации - создать скрипт в $GIT_DIR/.git/hooks/post-checkout :
CODE (bash):
скопировать код в буфер обмена
скопировать код в буфер обмена
- #!/bin/sh -e
- OS=${OS:-`uname`}
- old_rev="$1"
- new_rev="$2"
- get_file_rev() {
- git rev-list -n 1 "$new_rev" "$1"
- }
- if [ "$OS" = 'Linux' ]
- then
- update_file_timestamp() {
- file_time=`git show --pretty=format:%ai --abbrev-commit "$(get_file_rev "$1")" | head -n 1`
- touch -d "$file_time" "$1"
- }
- elif [ "$OS" = 'FreeBSD' ]
- then
- update_file_timestamp() {
- file_time=`date -r "$(git show --pretty=format:%at --abbrev-commit "$(get_file_rev "$1")" | head -n 1)" '+%Y%m%d%H%M.%S'`
- touch -h -t "$file_time" "$1"
- }
- else
- echo "timestamp changing not implemented" >&2
- exit 1
- fi
- IFS=`printf '\t\n\t'`
- for file in `git ls-files`
- do
- update_file_timestamp "$file"
- done
правда, думаю
DelphinPRO пишет:
v1.8, windows
- осложняет дело, но под Win тоже существуют интерпретаторы и набор команд *nix - придётся просто изменить часть с uname