繁体   English   中英

推送到git存储库的子文件夹上的远程源?

[英]Push to a remote origin on a subfolder of git repository?

我有一个git存储库,它使用Vagrant为WordPress项目构建虚拟服务器(仅限本地开发)。 文件夹结构大致如下(出于问题的目的)。

- Vagrantfile
- puppet/
- wordpress/
    - {www public folder / root Wordpress files}
- files/

现在所有这些文件都在我的存储库的根目录中,我希望它们留在那里,所以如果我需要向Vagrant添加任何更新,它们将被添加到repo中。 现在,我的主机能够通过使用git直接推送更新来允许我部署到我的登台和生产服务器。 但是这些文件存储在/ wordpress /中,其服务器上的源是根。 理想情况下,我只想从/ wordpress /文件夹推送到远程源的根目录。

我想将/ wordpress /文件夹移动到项目的根目录,然后将所有Vagrant文​​件推送到生产服务器(除非有办法添加特定于远程源的.gitignore)。

我确信有几种方法可以实现这一点,我也查看了git子树,但对于这个具体问题看起来有点过分。 如果有人能提出最佳解决方案,我们将不胜感激。

间接的,嗤之以鼻的答案是, git不是一个部署工具。 所以你应该使用phing,或capistrano,或ant,或puppet,或者厨师,或者ansible,或者grunt,或者只是写一些bash脚本等。

简短的回答是git-subtree split 我会配合这个。

说明

如果您不知道发生了什么,子树,甚至更多的子模块,可能会让人感到困惑。 通常,它们用于模块化开发,作为子模块的替代方案。 我不会进入那个因为那不是你在这种情况下如何使用它。

出于您的目的,您将执行称为subtree split最新操作,以创建包含所需目录的分支。 子树拆分命令查看存储库的所有历史记录,以查看影响给定目录中文件的提交,并将它们与不存在的更改分开。 然后,您可以将这些提交(或它们的压缩版本)放到它们自己的分支中。 因此,当您签出该分支时,给定的目录将位于根目录,而不是其他任何目录。

螺母和螺栓

在我的解释中,我会为你做出一些选择,但你可以随意改变它们。 我正在指定deploy分支,我决定将您的子树历史记录压缩到一个提交中,因为您永远不应该使用该分支进行任何开发。 我还假设您的存储库名称是origin。

git subtree split --prefix=wordpress --squash --branch deploy
git push -f origin deploy:deploy

通过使用deploy:deploy符号推送,您实际上不必检查部署分支(这可能需要时间)来推送它。 你甚至可以通过直接推送到远程分支来避免甚至一起创建分支。

git subtree push --prefix=wordpress --squash deploy master

我建议使用这最后一种方法,因为它避免了意外地使用压扁的子树分支做任何事情。

但是,......子树对我来说不起作用,因为XYZ

是的,子树分裂有时仍然不稳定。 如果由于某种原因,子树命令不是你的选项,那没关系。 您可以使用更旧,更令人困惑的git-filter-branch命令。 有关该命令的完整说明,请参见此处

如果你坚持这个选择,那么......那很臭。 你可能最好只使用子模块(可能是你现在的方式),或写一些bash脚本将文件复制到你本地的另一个仓库并推送......或其他可怕的东西。

或者您可以使用真正的部署工具。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM