代码之家  ›  专栏  ›  技术社区  ›  James Newton

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

git
  •  1
  • James Newton  · 技术社区  · 6 年前

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

    下面是工作的部分:

    /var/www/example/web/ 提供服务的站点。我还创建了一个文件夹 /var/www/example/git/web.git/ hooks/post-receive 此文件夹中的文件是包含以下内容的可执行文本文件:

    #!/bin/sh
    GIT_WORK_TREE=/var/www/example/web git checkout -f
    

    在我的开发机器上,我有一个本地git存储库,它有一个名为 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)
    

    我打电话的时候 git push dotcom master ,此部分网站已按预期更新。

    我正在开发一个新的web存储库。我正在使用一个开发网站 'example.net 来测试一下。地点 example.net 工作正常,但应用程序的某些部分已准备好部署到 example.com example.com网站

    以下是我尝试过的:

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

    git checkout --orphan fordotcom
    

    我取消了项目的所有部分,我不想上传到 .

    git rm --cached <foldername>
    

    我为这个存储库创建了一个远程分支,指向 服务器:

    git remote add dotcom2 ssh://user@XXX.XXX.XXX.XXX/var/www/example/git/web.git
    

    我用过 git push dotcom2 fordotcom web master

    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
    

    对此,有什么好的解决办法?我可以想象:

    1. 合并 fordotcom 文件到 在远程服务器上(但是如果它们来自不同的存储库,这是可能的吗?)
    2. 将第二个存储库的适当文件夹添加到第一个存储库中,以便两个存储库都可以跟踪相同的文件(但是,考虑到存储库具有不同的根文件夹,这是明智的做法吗?我该怎么做?)
    3. 创建 git/app.git/ 文件夹旁边 git/web.git/
    4. 采用一些完全不同的解决方案,你可以建议,因为你比我有更多的使用git的经验。
    1 回复  |  直到 6 年前
        1
  •  0
  •   VonC    6 年前

    在post receive钩子中添加一个echo:当您从第二个repo推送孤立分支时,它应该显示它被触发了。

    但是 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/web 通过一种力量 git checkout ( git checkout -f