文件更改时git可以自动提交吗?

时间:2012-05-29 16:20:18

标签: git bash shell photoshop

我正在尝试在设计时跟踪我的Photoshop文件更改的新方法,我想知道;是否可以创建一个脚本,在对文件进行更改(保存)时自动创建提交。

我使用像Pixelapse这样的工具,但是有一些缺点,其中一个回复到以前的版本可能会很麻烦,因为你需要加载网站。

每次我在Photoshop中保存我的更改时,我都希望git能够创建一个提交。

自动发生这种情况后,我肯定会产生一些不良影响,例如大量文件大小,但我会接受其他建议。

更新:顺便说一下,如果有帮助的话我会使用Mac OS X.

3 个答案:

答案 0 :(得分:1)

您可以编写一个shell循环来检查自上次以来文件哈希是否已更改,如果是,则进行提交。您可以在循环中添加睡眠,并使用时间戳作为提交消息。

我个人认为这有点无意义,因为你应该提交有用的快照,而不是全部快照。

答案 1 :(得分:1)

也许inotify-tools是一个选项。

我不知道它们是否也存在于MacOS X下面。 Linux用户可以使用yum install inotify-tools(RedHat)或aptitude install inotify-tools(Debian / Ubuntu)安装它。

然后您可以使用inotifywait

while [ true ]; do
  inotifywait -e modify test >/dev/null 2>&1
  echo "Do something"
done

要将其置于后台,请以这种方式包装:

{ while [ true ]; do inotifywait -e modify test >/dev/null 2>&1 ; echo "Do something" ; done }& echo $! > ~/inotitfy.something.pid

它将无休止地循环并运行inotifywait,如果-e事件发生,它将退出,然后在此示例中运行echo。通过&创建后台流程后。后台进程ID将通过管道传输到~/inotitfy.something.pid

以这种方式杀死进程来阻止它:

kill -15 `echo ~/inotitfy.something.pid`

您也可以将第一个变体放入screen

请注意,可能还有一个inotifyexec(就像在Debian Squeeze上一样),但是并不是所有时间都适用于我,并且不适用于所有发行版(所以我总是使用我自己的方法)。

答案 2 :(得分:0)

我正在寻找类似的东西,基于try-catch-finallyanswer我提出了这个:

while git ls-files | inotifywait -q  -e modify --fromfile -; do 
  …something… (in your case probably git-commit)
done

这样做的好处是只能监视版本控制下的文件。此外,因为你大部分时间都在inotifywait内,所以杀死它会更容易(如果你杀死了inotitfywait它会“异常地”退出并且while退出了。

您还可以考虑其他事件,尤其是movemove_self以及可能createcreate_self(那么您可能希望在{{1}上使用某些选项也是)。