也许这个问题太广泛了(我希望不是),但是我目前不知道如何解决我的 WordPress Git分支模型问题。
我的计划是创建这样的分支模型,而不使用 BitBucket Server 或 Jenkins :
因此,我已经开始在git init
(目前仅安装WP)系统的wp-content
文件夹中制作一个PROD
。
完成此操作后,我克隆了整个PROD
页并创建了staging
子域。克隆完成后,我已经删除了wp-content
系统上的staging
文件夹,并键入了git clone <prod-path>/.git
。
这很好用,并且在登台版本进行了一些更改(出于测试目的)后,我能够将它们推回到PROD
。到目前为止,一切都是逻辑正常的,并且运行良好。
经过一段时间的思考,我有了一个很好的主意(也许是愚蠢的),可以对PC上的本地DEV
进行克隆。因此,我之前的操作与暂存版本相同,但是这次,我已将暂存wp-content
克隆(PROD
克隆)克隆到本地DEV
版本。>
对于第一个视图,一切看起来都不错,但是在尝试将某些东西推送到暂存系统后,我从目标暂存rejected
中得到了Git
:
remote: error: refusing to update checked out branch: refs/heads/development
remote: error: By default, updating the current branch in a non-bare repository
所以我首先想到,这很愚蠢,因为该阶段也是HEAD
上没有PROD
的克隆(我认为)。
我对你的问题:
您有一个主意,如何在没有任何第三方软件的情况下保持这种工作流程,但要拥有两个可以在DEV
上运行,在Staging
上测试并可以在{ {1}}?
使用命令说:
PROD
更新
这是我的裸钩文件夹的内容(没有收到邮件,该怎么办?):
1. git push <to the staging>
2. git push <to the prod>
3. git merge <dev to master>
答案 0 :(得分:1)
但是在尝试将某些东西推送到暂存系统后,我被目标暂存Git拒绝了
这取决于什么是“已拒绝”消息。
如果是
remote: error: refusing to update checked out branch: refs/heads/development
remote: error: By default, updating the current branch in a non-bare repository
这意味着您需要在分阶段存储库中包含一个“裸露”子文件夹:
cd staging
git init --bare . bare
echo /bare/>>.gitignore
git add .gitignore
git commit -m "Ignore nested bare repo /bare/"
git remote add bare bare
git config remote.bare.fetch '+refs/heads/*:refs/remotes/bare/*'
cd bare
git config remote.origin.fetch '+refs/heads/*:refs/remotes/origin/*'
然后修改bare/hooks/post-receive
文件以使其:
post-receive
钩在bare
嵌套的裸仓库中:
#!/bin/bash
unset GIT_DIR
cd ..
git --work-tree=. --git-dir=.git fetch bare
git --work-tree=. --git-dir=.git fetch --tags bare
if ! git --work-tree=. --git-dir=.git merge-base --is-ancestor master origin/master; then
echo "Reset non-bare master to bare master (forced update)"
git --work-tree=. --git-dir=.git reset --hard origin/master
else
echo "Update non-bare master with merge from origin/master"
git --work-tree=. --git-dir=.git pull --no-rebase origin master
fi
最后,在您的开发者克隆存储库上:
cd dev
git config --unset-all remote.origin.pushurl
git config --add remote.origin.pushurl "/path/to/staging/bare"
那样,您将照常从暂存库中获取数据,但是将推送到裸露的嵌套暂存库中,并且该挂钩将更新所述暂存内容。