ale*_*ane 4 git wordpress github subtree vagrant
我有一个git存储库,它使用Vagrant为WordPress项目构建虚拟服务器(仅限本地开发).文件夹结构大致如下(出于问题的目的).
- Vagrantfile
- puppet/
- wordpress/
- {www public folder / root Wordpress files}
- files/
Run Code Online (Sandbox Code Playgroud)
现在所有这些文件都在我的存储库的根目录中,我希望它们留在那里,所以如果我需要向Vagrant添加任何更新,它们将被添加到repo中.现在,我的主机能够通过使用git直接推送更新来允许我部署到我的登台和生产服务器.但是这些文件存储在/ wordpress /中,其服务器上的源是根.理想情况下,我只想从/ wordpress /文件夹推送到远程源的根目录.
我想将/ wordpress /文件夹移动到项目的根目录,然后将所有Vagrant文件推送到生产服务器(除非有办法添加特定于远程源的.gitignore).
我确信有几种方法可以实现这一点,我也查看了git子树,但对于这个具体问题看起来有点过分.如果有人能提出最佳解决方案,我们将不胜感激.
间接的,嗤之以鼻的答案是,这git不是一个部署工具.所以你应该使用phing,或capistrano,或蚂蚁,木偶,或厨师,或ansible,或grunt,或只是写一些bash脚本等.
简短的回答是git-subtree split.我会配合这个.
说明
如果您不知道发生了什么,子树,甚至更多的子模块,可能会让人感到困惑.通常,它们用于模块化开发,作为子模块的替代方案.我不会进入那个因为那不是你在这种情况下如何使用它.
为了您的目的,您将执行什么称为a subtree split来创建仅包含所需目录的分支.子树拆分命令查看存储库的所有历史记录,以查看影响给定目录中文件的提交,并将它们与不存在的更改分开.然后,您可以将这些提交(或它们的压缩版本)放到它们自己的分支中.因此,当您签出该分支时,给定的目录将位于根目录,而不是其他任何目录.
螺母和螺栓
在我的解释中,我会为你做出一些选择,但你可以随意改变它们.我正在指定deploy分支,我决定将您的子树历史压缩到一个提交中,因为您永远不应该使用该分支进行任何开发.我还假设您的存储库名称是origin.
git subtree split --prefix=wordpress --squash --branch deploy
git push -f origin deploy:deploy
Run Code Online (Sandbox Code Playgroud)
通过使用deploy:deploy符号推送,您实际上不必检查部署分支(这可能需要时间)来推送它.你甚至可以通过直接推送到远程分支来避免甚至一起创建分支.
git subtree push --prefix=wordpress --squash deploy master
Run Code Online (Sandbox Code Playgroud)
我建议使用这最后一种方法,因为它避免了意外地使用压扁的子树分支做任何事情.
但是,......子树对我来说不起作用,因为XYZ
是的,子树分裂有时仍然不稳定.如果由于某种原因,子树命令不是你的选项,那没关系.您可以使用较旧的,更令人困惑的git-filter-branch命令.有关该命令的完整说明,请参见此处.
如果你坚持这个选择,那么......那很臭.你可能最好只使用子模块(可能是你现在的方式),或写一些bash脚本将文件复制到你本地的另一个仓库并推送......或其他可怕的东西.
或者您可以使用真正的部署工具.
| 归档时间: |
|
| 查看次数: |
2572 次 |
| 最近记录: |