我使用 git 来存储我的点文件,但现在我已经开始使用 Linux 的多种实现,我发现不同版本之间的点文件略有不同,这取决于我使用该版本的用途以及该版本的运行方式。有什么好方法可以跟踪和存储不同版本的不同点文件?我可以使用同一个存储库吗?还是应该使用不同的存储库,即使共享了大量代码?例如,我想为我的 Arch 媒体中心、WSL-Ubuntu 和我的实际 Ubuntu 分区使用单独的点文件集。它们之间存在共同点,我希望保持共享,也存在差异,我希望保持分离。你会如何处理这个问题?
答案1
存储库
如果算上签出点文件的 git 工作目录存储库,无论如何都会有多个。但您不需要多个 git 存储库来进行集成 - 在这种情况下一个就足够了。(如果您可以访问其他主目录,您甚至不需要这个,但一个可以从所有签出处访问的裸存储库通常是最简单的方法。)
策略
基本上,您可以在一个分支中工作,无需 git 的帮助即可区分环境,并且仅使用 git 来跟踪和共享更改。或者,您可以将异常更改保留在分支中。详情:
1 支
你在一个分支上工作,并在所有环境中保持最新状态。对于差异,你可以使用其他机制,例如
- 对于点文件,它们实际上是脚本,
if
根据环境的不同,它们可以执行在一个环境中运行,而在其他环境中不运行的操作 - git 目录中的点文件通常通过符号链接链接到主目录中的正确位置:进行设置,以便在有多个变体时链接正确的文件
- 通过预处理器从单一来源生成文件也可能是一种选择,特别是当不同环境不断发生变化时和同一文件中所有环境的变更
n 个分支
有一个主分支 (master),更改会定期进行。每个环境都有自己的分支,该分支应反映此环境的文件。如果主分支是您通常工作的环境之一,并且其他环境相同 + 修改,则主分支可能是其中一个环境。主分支也可能是独立的,但如果每个环境都与它不同,您如何测试主分支的内容?
特定于环境的更改(即与主分支不同的更改)可以提交到此环境的分支中。与主分支保持同步意味着,您将git merge
主分支中的更改提交到所有环境分支中。您不需要将git merge
它们返回到主分支,因为那样会将差异带入主分支。(如果您在希望在主分支中拥有的环境中进行了更改 - 但不是全部 - 则git cherry-pick
允许您单独应用这些更改。)
使用哪一个
查看你的文件及其差异来决定采取哪种方式。n 个分支策略限制了对额外工具的需求,但实际上你有 n 个不同的版本,并使用 git 工具使它们保持同步,但又有所不同。(这可能是“如果你只有一把锤子,那么所有东西看起来都像钉子”的情况。)1 家分店策略为您的配置定义一个源并仅使用 git 作为分布式版本控制系统,您可能需要此处的附加脚本进行设置、预处理等。