Warning: Cannot use a scalar value as an array in /home/admin/public_html/forum/include/fm.class.php on line 757

Warning: Invalid argument supplied for foreach() in /home/admin/public_html/forum/include/fm.class.php on line 770
Форумы портала PHP.SU :: Версия для печати :: Изменение времени модификации файлов при чекауте.
Форумы портала PHP.SU » Клиентская разработка » Программное обеспечение » Изменение времени модификации файлов при чекауте.

Страниц (1): [1]
 

1. DelphinPRO - 24 Апреля, 2013 - 13:24:30 - перейти к сообщению
Почему GIT (v1.8, windows) изменяет время модификации файлов?

т.е. когда я переключаюсь на другую ветку, у всех извлеченных файлов время модификации становится равным моменту, когда был сделан checkout. Хотя реально файл не был изменен. Это доставляет проблемы при синхронизации файлзиллой, - после смены ветки на сервер качаются все файлы проекта (сверяется время изменения файлов).

Можно как-то пофиксить этот момент?
2. EuGen - 24 Апреля, 2013 - 13:56:11 - перейти к сообщению
Насколько я знаю, это является следствием того, что git является DVCS (Distributed VCS) - и, значит, репозиторий не централизован. Поэтому стандартными способами в git не удастся иметь датой модификации дату коммита (то есть реального изменения).
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.

Там же - краткие рекомендации - создать скрипт в $GIT_DIR/.git/hooks/post-checkout :
CODE (bash):
скопировать код в буфер обмена
  1. #!/bin/sh -e
  2.  
  3. OS=${OS:-`uname`}
  4. old_rev="$1"
  5. new_rev="$2"
  6.  
  7. get_file_rev() {
  8.     git rev-list -n 1 "$new_rev" "$1"
  9. }
  10.  
  11. if   [ "$OS" = 'Linux' ]
  12. then
  13.     update_file_timestamp() {
  14.         file_time=`git show --pretty=format:%ai --abbrev-commit "$(get_file_rev "$1")" | head -n 1`
  15.         touch -d "$file_time" "$1"
  16.     }
  17. elif [ "$OS" = 'FreeBSD' ]
  18. then
  19.     update_file_timestamp() {
  20.         file_time=`date -r "$(git show --pretty=format:%at --abbrev-commit "$(get_file_rev "$1")" | head -n 1)" '+%Y%m%d%H%M.%S'`
  21.        touch -h -t "$file_time" "$1"
  22.    }
  23. else
  24.    echo "timestamp changing not implemented" >&2
  25.    exit 1
  26. fi
  27.  
  28. IFS=`printf '\t\n\t'`
  29.  
  30. for file in `git ls-files`
  31. do
  32.    update_file_timestamp "$file"
  33. done

правда, думаю
DelphinPRO пишет:
v1.8, windows

- осложняет дело, но под Win тоже существуют интерпретаторы и набор команд *nix - придётся просто изменить часть с uname
3. DelphinPRO - 24 Апреля, 2013 - 14:17:42 - перейти к сообщению
ясно, печалька Недовольство, огорчение

значит будем думать в сторону деплоя из репозитория, и выбросим нафиг файлзиллу

 

Powered by ExBB FM 1.0 RC1