用于Web开发的Git,sub-repos和外部库 - 一劳永逸的最佳策略?

Har*_*ngh 16 git plugins content-management-system git-submodules

这是一个常见的情况,必须有一个明智的解决方案,但尽管阅读和丰富的Git体操,我的大脑疼痛,我无法做这项工作......

我正在使用Wordpress,尽管这适合大多数网站开发方案.我想用git repo管理站点安装,并且还可以在单​​独的repos中管理各种WP插件,jQuery插件和其他代码位,这些插件可以很容易地从外部源拉出/推送.在你看细节之前看起来很简单......

标准

"子文件夹"标准 不应将每个插件的文件夹绑定到其源库的根文件夹.许多repos有多个嵌套文件夹,例如"my-repo-name/...","dev /","test /","src /",其中后者的内容是所需的东西.这对于保持引用URL清洁并最大限度地减少公共垃圾很重要.

"无Proxys"标准 理想的解决方案不需要额外的中间分支或回购.将更改推送到插件的外部源应该很简单,不需要多次中间合并/推送.

"真实文件"标准 理想情况下,整个网站的外部存储库实际上应该包含插件子项目的文件(即没有"子模块").虽然我可以被说服远离这一个...

"发布"标准 它必须与rsync和/或git push'ing到现场服务器很好地兼容

我看过这五个解决方案

Git子模块简单到足以进行更改和推/拉但子模块在"子文件夹"和"实际文件"标准上失败

Git read-tree/subtree merge解决了"Real Files"问题,read-tree实际上让你引用了一个分支的子文件夹但是当我这样做并试图合并master上的更改上游时,Git没记住它来自一个子文件夹并且合并了master的整个结构进入ext libs跟踪分支...所以FAIL就这个标准.

Apenwarrs子树扩展(这里) 非常适合"真实文件"标准,并且相当简单的推/拉,直到您想要强制执行"子文件夹"规则.最好它似乎需要中间分支,您可以从远程跟踪分支中分离出所需的文件夹,然后将其作为子树添加到主分支.我没有太多运气将主人的变化合并/推送回源回购.我仍然认为这里可能存在......

与外部repo的符号链接 很好的解决方案,直到GIT在符号链接后停止.现在它失败了"真实文件"和"发布"标准

嵌套repos 在某处我看到了一个SO答案,如果你明确git add一个包含另一个repo并包含尾部斜杠的文件夹,git将不会对其进行子模块,而是跟踪单个文件.这似乎很有希望,但它在"子文件夹"标准上失败了.

接下来是什么?

我已经看到了"稀疏结账"的提法 - 或许是涉及分支修剪的事情.我希望避免一个涉及shell脚本的解决方案,或者是如此复杂以至于每次都要重新学习它(不经常)我会对插件进行更改.它需要比为每个插件维护一个单独的repo并从主CMS安装中来回复制更容易.

当然有人有一个简单的功能方式来使这个常见的开发场景工作?在此先感谢您的帮助...

mah*_*lie 1

显然你一直在考虑这个问题,而我只是 git 的新手,但我的第一直觉是将 .gitignore 添加到插件目录中,并让每个插件都有自己的 git 存储库。您可以对主题执行相同的操作。所以我想这更多的是一个问题而不是一个答案——为什么这种简单的方法不起作用?