git pre-commit hook, добавить файл в индекс - PullRequest
1 голос
/ 12 декабря 2011

Я пытаюсь написать простую ловушку перед фиксацией, чтобы проверить, был ли файл изменен, если это так, сожмите его и добавьте в текущий индекс, что-то вроде этого

#!/bin/sh                                                                                                                                                    

# was the file modified?
mf='git status | grep jquery.detectBrowser.js'

# is the non-compressed file in the staging area?
if [ $mf != "" ]
then
  # alert the user
  echo "Javascript file modified, YUI Compressor will begin now."

  # go to rhino
  cd $HOME/apps/rhino/yuicompressor-2.4.7/build

  # compress my file
  java -jar yuicompressor-2.4.7.jar ~/www/jquery.detectBrowser.js/jquery.detectBrowser.js -o ~/www/jquery.detectBrowser.js/jquery.detectBrowser.min.js

  # comeback to the initial directory
  cd -

  # add the new file into the index
  git add ~/www/jquery.detectBrowser.js/jquery.detectBrowser.min.js
fi

У меня 2 проблемы, 1 мое состояние ухудшается, каждый раз, у меня должна быть опечатка или что-то в этом роде, но я не могу понять, что это? Это ошибка, которую я получаю обратно:

[: 23: git: unexpected operator

И моя вторая проблема заключается в том, что даже если я уберу условие, файл никогда фактически не ДОБАВЛЯЕТСЯ в коммит, он изменяется, но никогда НЕ ДОБАВЛЯЕТСЯ.

Спасибо, Leo

1 Ответ

3 голосов
/ 12 декабря 2011

Ваша ошибка в том, что вы не цитируете $mf.Измените его на "$mf".Хотя, возможно, есть и более эффективные способы, чем вывод результатов удобочитаемой команды ... вы можете взглянуть на git status --porcelain, например.Или даже git diff --cached <path>, и просто проверьте код выхода, например:

if ! git diff --quiet --cached <path>; then
     # the file was modified; do stuff
fi

Я думаю, что Эмбер, возможно, ввела вас в заблуждение: вы должны использовать --cached, потому что если измененияне в стадии, то, что касается этого коммита, изменений нет, поэтому я предполагаю, что вы не хотите больше ничего делать.

И, конечно, я не знаю ваш проект, но яЯ не уверен, почему вы делаете что-то подобное - обычно вы не хотите регистрировать автоматически сгенерированный контент, просто упростите восстановление из того, что было зарегистрировано.

Что касается вашей последней проблемыфайл изменен, но не добавлен в коммит, я не могу воспроизвести его на игрушечном примере.Я сделал это как ловушку перед фиксацией:

#!/bin/bash
touch z
git add z

и сделал коммит, а z был, как и ожидалось, создан, добавлен и зафиксирован.

...