Git:从两个存储库部署到网站

时间:2018-09-27 19:40:30

标签: git

我想使用git将文件上传到我的网站。但是,该站点是使用两个不同的git存储库开发的。每个存储库都包含网站不同部分的文件。

这是起作用的部分:

我在example.com上有一个网站。在此远程服务器上,我在isClockedIn上设置了一个文件夹,从该文件夹可以访问该站点。我还在/var/www/example/web/创建了一个文件夹,并将其初始化为裸git仓库。此文件夹中的/var/www/example/git/web.git/文件是具有以下内容的可执行文本文件:

hooks/post-receive

在开发计算机上,我有一个本地git存储库,其中包含一个名为#!/bin/sh GIT_WORK_TREE=/var/www/example/web git checkout -f 的远程分支:

dotcom

当我致电git remote -v dotcom ssh://user@XXX.XXX.XXX.XXX/var/www/example/git/web.git (fetch) dotcom ssh://user@XXX.XXX.XXX.XXX/var/www/example/git/web.git (push) 时,网站的这一部分将按预期进行更新。

这是我需要弄清楚的部分:

我有第二个存储库,用于开发新的Web应用程序。我正在git push dotcom master上使用开发站点进行测试。 'example.net上的站点运行正常,但是应用程序的某些部分已准备好部署到example.net。我不想将所有内容都部署到example.com:仅准备就绪的部分。

这是我尝试过的:

在第二个存储库中,我创建了一个孤立分支:

example.com

我取消了我不想上传到git checkout --orphan fordotcom 的项目的所有部分。

example.com

我为此存储库创建了一个远程分支,指向git rm --cached <foldername> 服务器:

example.com

我使用git remote add dotcom2 ssh://user@XXX.XXX.XXX.XXX/var/www/example/git/web.git 将所需文件上传到服务器。但是,上载的文件不会复制到git push dotcom2 fordotcom文件夹中。大概是因为它们不在名为web

的分支中
master

对此有什么好的解决方案?我可以想象:

  1. git push dotcom2 fordotcom Counting objects: 111, done. Delta compression using up to 4 threads. Compressing objects: 100% (105/105), done. Writing objects: 100% (111/111), 30.69 MiB | 3.91 MiB/s, done. Total 111 (delta 0), reused 0 (delta 0) To ssh://user@XXX.XXX.XXX.XXX/var/www/example/git/web.git * [new branch] fordotcom -> fordotcom 文件合并到远程服务器上的fordotcom(但是,由于它们来自不同的存储库,这甚至可能吗?)
  2. 将文件从第二个存储库手动复制到第一个存储库(但是第二个存储库的任何更新将不会自动应用于第一个存储库)
  3. 将第二个存储库的适当文件夹添加到第一个存储库,以便两个存储库都可以跟踪相同的文件(但这是明智的选择,鉴于存储库具有不同的根文件夹,我该怎么办?)
  4. master文件夹旁边创建一个git/app.git/文件夹,并将其用于第二个存储库的远程存储(但是,如果两个存储库尝试在同一位置更新文件,这会引起冲突吗?)
  5. 采用一些可以建议的完全不同的解决方案,因为您比我拥有更多的使用git的经验。

1 个答案:

答案 0 :(得分:0)

在接收后挂钩中添加回显:它应显示您在从第二个存储库中推送孤儿分支时被触发。

但是git checkout -f确实签出了默认分支:master
这将推动另一个分支:

#!/bin/bash

while read oldrev newrev ref
do
    branch=`echo $ref | cut -d/ -f3`
    GIT_WORK_TREE=/path/to/local/checkout git checkout -f $branch
done

或者考虑使用this gist

但是请确保您的第二个分支具有网站所需的完整文件集,否则您将通过强制/var/www/example/webgit checkout -f覆盖/删除目标文件夹git checkout中的文件)