一个小的工具,帮助同步Mac OS X PLIST文件(用于大多数MAC应用程序的偏好)无缝地,以一种可以被Git跟踪的方式。
prefsync的Python项目详细描述
有助于同步mac os x plist文件的一个小工具(用于首选项 对于大多数Mac应用程序)无缝地,以Git可以跟踪的方式。
#背景
我们很多人在github上上传 [点文件](http://en.wikipedia.org/wiki/Configuration_file) ([这是我的](https://github.com/asmeurer/dotfiles)。这是个很好的方法 共享配置,用git跟踪它,通过符号链接,它可以 不错的半手动同步方案。
这个技巧在mac os x首选项中效果不太好。问题是 从MacOSX10.4开始,[plist文件](http://en.wikipedia.org/wiki/Plist)是 默认情况下是二进制的,这使得用git跟踪它们非常困难。
此文件的典型解决方案是将plist文件符号链接到dropbox和 据我所知,这是可行的。但是你失去了分享你的 设置,也许最重要的是,用git跟踪它们。
好消息是实际上可以使用二进制plist文件,并且 自动将它们前后转换为人类可读的(和git 可跟踪)XML,使用MacOSX附带的一些工具。
#用法
usage: prefsync [-h] [-t THROTTLE_INTERVAL] PREFFILE DEST
例如
prefsync ~/Library/Preferences/preferencefile.plist preferencefile.xml
-t标志设置同步文件的限制间隔(秒)。这个 默认值为10秒。
#安装
您可以使用conda安装它
conda install -c asmeurer prefsync
或使用pip
pip install prefsync
或者来自git源代码
python setup.py install
或者您也可以在结账时使用
python -m prefsync
安装后,使用命令prefsync。
#工作原理
其实很简单。这项繁重的工作是由手术为我们完成的 它提供的系统和工具。主要工具是 [冥王星](https://developer.apple.com/library/mac/documentation/Darwin/Reference/ManPages/man1/plutil.1.html), 它允许将二进制plist文件转换为xml plist文件和xml plist 文件返回二进制文件,然后[启动](http://en.wikipedia.org/wiki/Launchd), 它提供了在文件更改时自动运行脚本的工具。
不过,也有一些陷阱。
首先,如果你这样做,它将永远循环运行,因为一旦 二进制文件被更新,它将写入xml版本,这将 注册为更改,使其写入二进制plist,依此类推。
当 它是写入的,如果文件具有该属性,则忽略这些文件(因此 其他事物的改变将被记录)。如果有什么东西 保留这些属性。在我的测试中,他们没有,但是你可以很容易的测试 如果您的程序是通过运行来实现的
xattr -w test:Test test ~/Library/Preferences/preferencefile.plist
然后,对首选项进行更改,并查看属性是否仍然存在
xattr ~/Library/Preferences/preferencefile.plist
其次,在MacOSX10.9中,首选项被缓存,这意味着即使 程序被关闭,plist文件被写入,它将被重写 如果缓存未打开,则重新打开时的原始首选项 脸红了。
解决这个问题很容易:我们只需打电话
defaults read com.reversedns.preference
(其中com.reverse dns.preference是首选项文件的反向dns 有疑问)。这会刷新缓存。
最后,在 程序正在运行。你可以关闭并重新打开程序, 但当您这样做时,它可能会写入首选项,覆盖 变化。
因此,建议高度跟踪git中的xml更改,以便 如果它们被覆盖,就很容易恢复。强制更改为 要写入二进制文件,最简单的方法是关闭程序,确保 XML更改是相同的(即,关闭程序不会导致 要写入并同步到XML的首选项),然后触摸XML 文件。
注意,每个方向的同步可能需要10秒 默认发生。您可以通过设置 运行预同步。
#有问题
根据 [本页](http://managingosx.wordpress.com/2006/05/10/launchd-gotcha/) launchd将停止监视路径,如果它ceaSES存在。你可以重置 通过注销并重新登录或重新启动来处理。你也可以 尝试使用launchctl,尽管这可能不可靠。
#待办事项
目前没有简单的方法删除同步。最好的方法是打开 登录并删除不再要同步的首选项的同步。成为 一定要同时删除binarytoxml和xmltobinary。你需要注销 然后重新登录或重新启动以使更改生效。
#致谢
当使用launchd(旧的、免费的)时,lingon程序是非常宝贵的 版本很好)。
stackoverflow和mac os x提示帮助我调试了一些奇怪的东西 当你想让它工作的时候。
#许可证
麻省理工学院(见许可文件)。