首页 > 解决方案 > 将某些文件从主目录推送到 git repo 以更轻松地设置新盒子

问题描述

我将主目录中的某些文件保存在 git repo 中,以便更轻松地设置新框或从损坏的主目录或编辑中的错误中恢复等。主要是 .bashrc、.emacs、.tmux 等.,以及我经常使用的自定义实用程序的个人 ~/bin 目录。这很有帮助,因为我可以随时在这些盒子中的任何一个上编辑这些文件,并且需要将这些更改传播到我的所有其他盒子。Git 合并使这一切变得轻而易举。

我也喜欢推送我的 .ssh 目录,这是从一个盒子复制到另一个盒子的最大痛苦。(当然,我加密了其中的所有私钥文件,这使得我必须始终使用 ssh-agent、输入密码等来初始加载密钥,但这是值得的。在多用户机器上使用 ssh 本质上是危险。我希望 ssh-agent 设置在这些情况下保护我的私钥,是吗?有更好的方法吗?将密钥存储在拇指驱动器上?如果我丢失了拇指驱动器或它被损坏了怎么办?我会被搞砸的) .

想知道是否有其他人这样做,有什么我没有考虑过的危险,也许这实际上是一个好方法。

这是我遇到的一个问题。我在 Mac、Linux 和 Windows(我使用 Cygwin,闭嘴,我知道)机器上工作。显然,我不能使用相同的可执行文件(我的 ~/bin 目录),而且通常甚至 shell 脚本也不兼容。例如,Mac OS 的“查找”命令真的很弱,没有很多 Linux 版本具有的重要选项。所以我的很多使用 find 的自定义 shell 脚本都不能正常工作。

这是否需要多个“主”分支,每个操作系统一个?这就是我现在所做的,它们开始不同步,合并它们是危险的。

标签: gitgithubconfigurationconfigcustomization

解决方案


许多人都有跨系统共享的点文件,因此很多这些问题都很好理解。

至于脚本的可移植性,我通常只是接受在 macOS 上,标准实用程序的功能较少,并且我编写的代码可以跨系统运行,尽管这可能很不方便。同样,我使用ps选项而不是在文件系统中四处/proc寻找,因为 macOS 没有这些选项。如果可能的话,我更喜欢查看 POSIX 规范并只考虑那些选项来编写我的脚本,或者用非 shell 语言编写它们。如果我知道它是所有 GNU coreutils、macOS 和主要 BSD 变体的一部分,有时我会使用不可移植的 shell 功能。

当我编写一个 shell 脚本时,我的目标是Debian/bin/sh:也就是说,主要是 POSIX,带有一些扩展。这意味着它几乎可以在任何 Unix 系统上工作,只要它不使用 AT&T ksh for /bin/sh(因为缺少local)。

我使用 zsh 并自动加载函数,这些函数抽象了我的 shell 配置的各个部分,因此它们可以在各种系统上工作。如果我需要像在我的 shell 中那样的不可移植功能stat(1),通常会有一个 zsh 内置函数来代替。

我为点文件保留了一个主分支,并为工作保留了一个具有不同配置的侧分支。我的所有不是特定于工作的自定义更改都进入主分支,即使这些更改仅与工作相关,并且侧分支在其之上重新设置。例如,我只在工作中使用过 Mac,但我所有版本的点文件都可以在 macOS 上运行。

我不会将二进制文件签入我的存储库。我在每个系统上构建任何自定义二进制文件;如果需要,您可能希望将它们作为子模块,或者在您的~/bin目录中有一个 shell 脚本来安装必要软件包的正确版本(取决于系统),然后构建您的工具。

同样,我不签入任何 SSH 密钥。如果您需要它跨平台工作并且不包括完整性保护,那么用于 PEM 私钥的加密非常糟糕。每个系统都有自己的私钥,我有一个脚本可以将更新部署~/.ssh/authorized_keys到所有受影响的机器。如果您使用 GitHub,您实际上可以将所有公钥上传到 GitHub,然后根据需要获取以下公共 URL https://github.com/<username>.keys:.


推荐阅读