我正在研究一种可以在多种情况下使用的乳胶样式文件。对于每个场景,我在一个包含样式文件副本的目录中有一个测试用例。
样式文件和测试用例在Git上有单独的存储库:
style
,即样式文件。examples
,即测试用例。
/A
:其中一个测试用例和style
/B
:另一个测试用例和style
为了便于测试和最终用户,如果样式文件与场景位于同一目录中,则会更容易。这一切都给了我许多失去同步的机会。
目前我手动同步每个样式文件,但希望在某种差异/版本控制工具的支持下这样做。
我已经尝试设置另一个存储库并将样式文件放在那里,并使用mercurial进行同步,以便我有另一个目录...
style
file ...但mercurial也使用同步整个目录的概念,因此当我尝试将mercurial repo中的样式文件克隆到测试用例所在的目录时,我最终得到了mercurial然后尝试拉出样式文件存储库中的示例。
问题:我如何控制我已经在不同存储库中使用git的目录中的一个文件?
(我会接受建设性的“你做错了 - 试试这个”感谢回答!)
答案 0 :(得分:1)
好的,检查我的理解:
这里要考虑四种类型的内容:小实用程序库代码(这里恰好只适合一个文件),实用程序的生产/外部用户,以及测试和示例。您正在提供库以及测试和示例案例,并希望将您的有效负载融入外部用户的工作流程。
如果这是编译代码,那将是完全平凡的:构建和测试您的实用程序,运送产品,生产用户使用已发布的库或者如果它们更多地将它们自己构建为子模块并发送或携带补丁。
当没有编译和构建步骤时,特别是当有效负载是这里的单个文件时,边界开始有点烦恼,自然的愿望是“我不能只获得一个文件? ”
是?假设我已经足够接近了:
要理解的是,Git中唯一真正重要的结构是祖先联系。任何存储库都可以包含任意数量的不同历史记录。
特别是,使用您的样式库的人可以引入您发布的历史记录,并随心所欲地使用它们。
所有用户:
git remote add acstyle u://r/l
git fetch acstyle
然后,git checkout acstyle/payload -- .
现在他们的结帐有最新的有效负载。
更熟悉Git的用户可能希望它为他们保留记录,他们可以
git merge acstyle/payload # initially with `--allow-unrelated-histories`
他们的结帐具有相同的附加内容,但也记录了其祖先。
您可以在已发布的仓库中提供多个分支,例如将裸负载合并到测试用例/示例场景中。这很容易做到。
假设您有一个开发“主”分支,其中包含所有测试用例和示例,但您希望构建如上所述的有效负载分支,而不会丢弃其他人的存储库。
最小payload
分支的初始构建:
# from any clean checkout
git checkout --orphan payload
git reset --hard
git checkout master -- acstyle.sty
git commit -m "acstyle-payload-v1.0"
当发布新的有效负载版本时,再次执行此操作但省略孤立和重置位,或者在提示后面发布完整历史记录,以便它存在但不会丢弃结帐,您可以
git checkout payload
git merge -s ours --no-commit master # add `--allow-unrelated-histories` the first time
git checkout master -- acstyle.sty
git commit -m "acstyle-payload-v1.1"
我不知道如何预测用户是否希望以这种方式拥有-s ours
合并背后的完整开发历史,保持两者都很容易。
您可以维护有效负载加示例分支以及其他任何类似的方式,用户只需获取他们想要的内容并将其组合到他们想要的历史记录中。
如果您要使用此路线,请不要在已发布的存储库中使用标记,默认情况下,Git会复制从其获取的每个存储库中的所有标记,并且它们会丢失用户的历史记录。相反,只需使用提交消息,用户可以使用:/
语法通过消息内容引用提交,如果他们想要的不是最新的,
git checkout :/^acstyle-payload-v0.9a -- acstyle.sty
他们可以使用
查看已发布版本的日志git log --oneline ---first-parent acstyle/payload