【问题标题】:Possible for git to commit automatically when file changes?文件更改时git可以自动提交吗?
【发布时间】:2012-05-29 16:20:17
【问题描述】:

我正在尝试用新的方法来跟踪我的 Photoshop 文件的更改,我想了解这些变化;是否可以创建一个脚本,在对文件进行更改(保存)时自动创建提交。

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

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

自动发生这种情况我确信会产生一些不良影响,例如文件过大,但我愿意接受其他建议。

更新:顺便说一句,如果有帮助的话,我正在使用 Mac OS X。

【问题讨论】:

  • Git 不能自己完成,但根据操作系统,您应该能够创建一个守护进程来执行此操作,例如,在 OSX 中,您可以编写一个执行提交的 shell 脚本和在 launchd 中设置它。
  • 你应该说你是在 OS X 还是 Windows 上(我假设是前者)。
  • 您好,感谢 cmets。我正在使用 OS X。您是否推荐任何资源来创建这种性质的 shell 脚本?谢谢。

标签: git bash shell photoshop


【解决方案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 上一样),但并不是一直都对我有用,也不是在所有发行版上都可用(所以我总是使用自制的方法)。

【讨论】:

  • @Sevenupcan 请注意,在自动提交某些内容时,您无法通过提交消息来描述更改。此外,提交 Photoshop 文件(在每次保存时)可能会导致极大的磁盘空间消耗。如果我没记错的话,有一个 Photoshop 插件可以跟踪您的所有更改并为您提供类似时间线的东西。也许这更有效。我没有很快找到它 - 你可以尝试搜索它。
  • 感谢您的回复。我认为 MacOS 上确实存在类似的工具,希望我能找到类似的东西。您正在考虑的工具称为 PixelNovel 的 Timeline。它确实按照您的描述进行,但我正在寻求创建定制服务。感谢您的帮助。
【解决方案2】:

您可以编写一个 shell 循环来检查自上次以来文件哈希是否发生了变化,如果发生了则提交。您可以在循环中添加睡眠,并将时间戳用作提交消息。

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

【讨论】:

  • 我知道你来自哪里。对我来说,在 Photoshop 中保存的操作与我使用的任何其他应用程序不同,因此即使是最小的更改对我来说也很重要。我计划有一种方法来设置里程碑以突出特定版本。
【解决方案3】:

我正在寻找类似的东西,并且基于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(然后您可能还想在git ls-files 上使用一些选项)。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2011-03-18
    • 1970-01-01
    • 2018-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多