git - 通过 Git 完全控制以 Github 私有 repo 为主的部署
问题描述
我正在学习和调整集成 Git 的工作流程。我的愿望是能够将我的开发分支从我的本地终端推送到我的测试服务器。一旦我分支,我当前的设置就会给我一个错误。我觉得这不是一个错误,而是 Git 在完成它的工作,而我并不完全理解它。您能否解释为什么会发生这种情况以及如何避免这种情况?
Git“错误”
! [remote rejected] feature -> feature (branch is currently checked out)
error: failed to push some refs to (I hide the ssh server address)
我是如何遇到这种情况的:
- 在 github 上创建 repo
- 包括从我的服务器通过 cpanel 生成的部署密钥
- 本地机器上的 Git 克隆
- 通过 SSH 在服务器上进行 Git 克隆
- 将服务器作为远程服务器添加到存储库作为测试
流动
在本地调整 master,将其推送到 github 和服务器都可以正常工作。但我的理解是,Git 的强大之处在于为“功能”创建一个分支 > 测试它 > 将其合并到主控。
我在本地机器上创建了一个名为 feature 的分支
git checkout -b feature
- 对 repo 进行一些更改并将其推送到原点并进行测试
git add .
git commit -m 'added index.html'
git push origin feature (for backup/sync purposes)
git push test feature (to be able so see my code working on the test server
我必须“签出”新分支才能显示服务器上的文件,所以我通过 SSH 连接到我的服务器并签出新分支:
git checkout feature
我的想法是,从现在开始,我可以在本地处理功能分支 > 提交调整,并且使用简单的推送命令
git push test feature
,我可以在我的测试服务器上测试代码。
打破流量
但现在我的流程被打破了。在我检查服务器上的功能分支后,我无法将调整后的分支推送到我的远程测试。Git 返回上面显示的消息。
解决方案
通过 SSH 在服务器上进行 Git 克隆
您仍需要通过 SSH 会话在该服务器上添加:
cd /path/to/cloned/repo
git config --local receive.denyCurrentBranch updateInstead
意思是,使用 Git 2.4 或更高版本,使用 push-to-deploy,以便允许 git push 直接更新签出的工作树。
通常,您宁愿推送到裸存储库:请参阅“什么是裸存储库以及我为什么需要一个? ”,并使用带有 checkout 的 post-receive 钩子。
即:一个chmod 775
名为 的可执行 () 文件post-receive
,位于 " myrepo.git/hooks
" 文件夹中,详见讨论。
myrepo.git
是服务器上你的 repo 的 git clone --bare:你可以推送到它。
推荐阅读
- c++ - C++ 模板错误:“模板参数的显式指定参数无效”
- python - tkinter 代码对一些 gif 进行动画处理,但不是全部
- netlogo - BehaviorSpace Netlogo- Measure 使用这些报告器运行
- neo4j - Cypher 函数调用根据结果数更改返回值
- codenameone - CN1模拟器openGalery限制
- google-analytics - 现有媒体资源中的 Analytics 新视图未显示实时数据
- mysql - 修改 WpDataTables 的 MySQL 查询
- google-oauth - Mac Catalyst App 上的 Google OAuth2:使用 refresh_token 交换授权代码时出现“invalid_grant”
- javascript - 如何按顺序显示来自div的段落和图像?
- axios - 从函数参数向 axios http 请求发送数据