我将主目录中的某些文件保存在git repo中,以便更容易设置新的文件箱,或者在编辑时从损坏的主目录中恢复,等等。这些文件主要是像.bashrc,.emacs,.tmux等,以及我经常使用的自定义工具的个人~/bin目录。这很有帮助,因为我可以随时在这些框中的任何一个上编辑这些文件,并且需要这些更改传播到我的所有其他框中。Git merge让这一切变得轻而易举。
我也喜欢推送我的.ssh目录,这是从一个盒子复制到另一个盒子的最大的痛苦。(当然,我会对其中的任何私钥文件进行加密,这使得我必须始终使用ssh-agent、输入密码等来初始加载密钥,但这是值得的。在多用户机器上使用ssh本身就很危险。我希望ssh-agent设置在这些情况下保护我的私钥,不是吗?有没有更好的方法?在拇指驱动器上存储密钥?如果我丢失了U盘或者它被损坏了怎么办?我就完蛋了)。
想知道是否有其他人这样做,有什么危险我没有考虑到,也许这实际上是一个好方法。
这是我的一个问题。我在Mac,Linux和Windows (我使用Cygwin,闭嘴,我知道)机器上工作。显然,我不能使用相同的可执行文件(我的~/bin目录),而且经常甚至连shell脚本都不兼容。例如,Mac OS的"find“命令非常弱,没有Linux版本中的许多重要选项。所以我的很多使用find的自定义shell脚本都不能正常工作。
这是否需要多个“主”分支,每个操作系统一个分支?这就是我现在所做的,它们开始失去同步,合并它们是危险的。
发布于 2020-11-26 10:29:19
许多人都有跨系统共享的dotfile,因此这些问题中的许多都是很好理解的。
至于脚本的可移植性,我通常只是接受在macOS上,标准实用程序功能较差,我编写的代码可以跨系统工作,尽管这可能会很不方便。类似地,我使用ps选项而不是查看/proc文件系统,因为macOS没有这些选项。如果可能,我更喜欢查看POSIX规范,并在编写脚本时只考虑这些选项,或者使用非shell语言编写它们。有时我会使用不可移植的shell功能,如果我知道它是所有GNU coreutils、macOS和主要的BSD变体的一部分。
当我编写shell脚本时,我的目标是一个Debian /bin/sh:也就是说,大部分是带有一些扩展的POSIX。这意味着只要它不使用AT&T ksh for /bin/sh (因为它没有local),它就可以在几乎所有的Unix系统上工作。
我使用zsh和自动加载函数来抽象shell配置的各个部分,因此它们可以在不同的系统上工作。如果我需要不可移植的功能,比如在我的shell中使用stat(1),那么通常有一个zsh内置函数可以替代它。
我为dotfile保留了一个主分支,为工作保留了一个具有不同配置的副分支。我所有不是特定于工作的定制的更改都会进入主分支,即使这些更改只与工作相关,而副分支也会在此基础上进行重新构建。例如,我只在工作时使用Mac,但我的所有版本的点文件都可以在macOS上运行。
我不会将二进制文件签入我的存储库。我在每个系统上构建任何自定义的二进制文件;如果需要,您可能希望将它们作为子模块,或者在~/bin目录中有一个shell脚本,该脚本安装所需包的正确版本(取决于系统),然后构建您的工具。
类似地,我不签入任何SSH密钥。用于PEM私钥的加密是相当糟糕的,如果你需要它来跨平台工作,并且不包括完整性保护。每个系统都有自己的私钥,我有一个脚本可以将~/.ssh/authorized_keys的更新部署到所有受影响的机器上。如果你使用的是GitHub,你实际上可以把你所有的公钥上传到GitHub上,然后根据需要获取下面的公共网址:https://github.com/<username>.keys。
发布于 2020-12-24 16:20:55
关于点文件,我更喜欢使用knoebber/dotfile来对其进行版本控制(每个平台一个代码库)
而且我不会跨平台导出/复制私钥,而是保留它们的位置,每个操作系统一个私钥。
https://stackoverflow.com/questions/65013828
复制相似问题