我想使用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
对此有什么好的解决方案?我可以想象:
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
(但是,由于它们来自不同的存储库,这甚至可能吗?)master
文件夹旁边创建一个git/app.git/
文件夹,并将其用于第二个存储库的远程存储(但是,如果两个存储库尝试在同一位置更新文件,这会引起冲突吗?) 答案 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/web
(git checkout -f
覆盖/删除目标文件夹git checkout
中的文件)