理解 Git:最新推送在生产服务器上不可见

Understanding Git: Latest push is not visible on production server

我自学了 git 个存储库,想创建以下符合我需要的环境。

一切都按预期工作,我在推送到生产服务器时只有一个问题。我总是需要通过 shell 登录服务器,以便在前端看到最新推送的提交之前进行硬重置。看起来最后的推送在生产端根本没有被“激活”。

我有以下工作流程来设置我的环境:

  1. 我使用 git init
  2. 在我的生产服务器上创建了一个 git 存储库
  3. 我使用 git clone ssh://urlToRepo
  4. 在我的本地机器上克隆了 repo
  5. 我在 bitbucket 上创建了一个新的 repo
  6. 在我的本地机器上,我 link 带有 git 远程添加源的 bitbucket 回购 URL
  7. 我处理我的代码,提交并将其推送到两个遥控器。
  8. 在 bitbucket 上,提交按预期可见。
  9. 在生产服务器上,更改未激活。我需要做一个 git reset --hard 让它们可见。

为了让我的推送在生产端被接受,我还需要配置 git config receive.denyCurrentBranch ignore。我试过 git init --bare 想可能是一个裸仓库,我没有这个问题。不幸的是,服务器上根本没有显示任何文件。

如您所见,我可能没有完全理解这个概念。有人知道如何帮助和提示我正确的方向吗?

已经谢谢了。

正如@choroba 指出的那样,Git 不是部署工具。您可以使用它来做到这一点,但通常使用 ci/cd 服务之类的东西更有意义。

您提到您正在使用 Bitbucket,它提供了一个名为 Bitbucket Pipelines 的功能,可以让您 运行 bash 在推送到某些分支或分支模式时编写脚本。大多数 Git-Hosting 供应商都提供这样的解决方案。例如:GitHub Actions 和 GitLab CI.

因此,为了将最新代码推送到服务器,您需要编写一个 Bitbucket 管道配置,通过 ssh 和 rsync 将代码从存储库复制到您的服务器。

Here is an article 描述了如何在 Bitbucket Piplelines 中使用 ssh(密钥)。

另一种解决方案可能是您的服务器上有一个 bash 脚本,可以通过 ssh 触发到 运行,例如:git pull 的答案应该可以帮助您通过 'pull from repo to server' 实现代码部署。

我推荐 'push to server' 方法,但 'pull from repo to server' 也有效。这真的取决于你。