我不知道如何使我的要求在标题中简短,如果没有意义,对不起。我将在这里解释:
许多人将他们的 dotfiles 放在 bitbucket 或 github 上,以方便以后的安装或配置,在不同的 pc 上同步。我也做了同样的事情,但是我想做一些特别的事情,我不确定 mecurial/git 有什么帮助。
是)我有的:
我有 3 台机器,比如 Home、Office 和 Client,都是 linux 操作系统(可能是不同的发行版)。为了使示例简单,假设我只想将一个文件.zshrc
放入 repo。问题是,三个操作系统具有不同的系统变量(或其他设置)。例如
- Office 已安装 JBOSS,然后
.zshrc
我需要导出 JBOSS_HOME var。 - 客户端安装了 Oracle,然后导出不同的变量集。
- Office 必须导出 HTTP_PROXY,但 HOME 不需要,客户端也需要它,但代理值不同等。
现在我所做的是,我将那些特定于机器的设置(主要是导出、别名语句)提取到另一个文件中,比如myVar.sh
. 并在.zshrc
.
所以 3 台机器有共同的部分(相同.zshrc
)和不同的部分(myVar.sh
)。
我想要的是:
在任何机器上,如果我发现一些不错的设置,我会更改
.zshrc
文件(公共部分)并推送。更改应该很容易同步到其他机器(例如,通过拉取)如果我更改了
myVar.sh
HOME 上的(不同部分)并推送,myVar.sh
如果我在 Office 机器上拉动,它不应该影响 Office。
我在做什么:
现在我在 bitBucket 上有一个 Repo 和三个分支(H、O、C)。在 Home PC 上,我只玩 Home 分支。办公室,客户也是如此。
问题是,如果我在一台电脑上更改了通用部分,则更改在其自己的分支中,与其他两台同步有点困难。因为我永远不会合并这些分支。
我还考虑为不同的电脑创建不同的目录。例如
/.zshrc
|--/HOME/myVar.sh
|--/Office/myVar.sh
|--/Client/myVar.sh
并编写 shell 脚本,例如检查 $HOST 以决定写入myVar.sh
哪个目录。但我怀疑这是否是实现我目标的最佳方式。当我查看我的 dotfiles 目录时,我看到了所有 3 个设置。我应该小心并输入正确的读取文件。
在现实世界中,公共部分包含的内容远不止 .zhsrc (tmux,vimrc,xdefault..),不同部分也是如此。
我不知道我们能否以某种方式制作部分分支或在存储库上进行部分合并......
我用 hg 比 git 多,如果 hg 能解决我更喜欢 hg,如果不能,git 也可以。除了克隆、推送、拉取、向上、合并、ci 之外,我没有太多的 git 经验。
现在,我该怎么办?
并且,感谢您阅读本文...
编辑更多关于不同部分
我会感谢大家给我答案。正如我上面所说,我的真机中的不同部分并不像myVar.sh
. 例如,我将我的公司笔记本电脑(Office)带到不同的客户端(大约有 6 个客户端,并非所有客户端都为我们提供 PC,这很好,因为我可以在任何地方使用 Linux),并为每个客户端配置打印机。我也会把这些配置放在 Repo 中。因为如果有一天我必须刷新我的系统,或者硬盘出现故障,我可以很容易地设置这些打印机。其他属于不同部分但我不能简单地像“source xxx”这样的东西
跟踪点的 Xorg.conf
.hgrc 文件(因为在公司我们有自己的 repo、uid、pwd、proxy..)
一些预配置的 systemd 模块,基本上是 .conf 文件。但特定于机器,例如 radeon.conf 仅适用于我的家用笔记本电脑。客户端 pc 根本没有安装 systemd。
这就是为什么我考虑为 PC 设置不同的目录。
正如我现在所说,我有 3 个分支方式,并且myConf
在这个目录中有一个目录getConf.sh
,用于将点文件、不同的 confs 等复制到myConf
. 事实上,它getConf.sh
也属于不同的部分,因为所有电脑的脚本都不相同。
因此,我认为if-else/switch
thensource
在这种情况下可能不起作用。
昨天我刚拿了.zshrc,并尝试使示例简单。如果误导了各位,请见谅。