将 git“生产分支”拉到生产服务器的“正确”方法

问题描述 投票:0回答:1

我对 Git 很陌生,并且已经阅读了 Pro Git 书籍@ http://git-scm.com/book/en/v2/Git-Branching-Basic-Branching-and-Merging。我的问题是我今天所做的是否是使用生产服务器和远程 Git 存储库的首选方式。

我的存储库托管在 GitHub 上,使用三个远程分支:开发 -> 测试 -> master。

每当“testing”分支被验证可以工作时,我会在本地使用“testing”(快进?)“master”,并在 GitHub 上“master”。

在生产服务器(/opt/www/url.com/)上我已经完成:
git merge

现在每次我想更新 master 时我都会发出

git push

git init git remote add origin https://github.com/..... git pull origin master

生产永远不会将任何更改推送到远程。并且局部变化不会发生。我这样做正确吗?如果没有,将更新拉入生产的首选方式是什么?

编辑#1:我不想管理生产服务器上的任何冲突,这是我现在面临的(不知何故我做错了一些事情)。我只是想拉下最新更新的主分支,然后切换到它。

执行“git pull”对此来说非常普通,但有一种更安全的方法。

git github git-pull git-remote
1个回答
31
投票

首先,您需要从服务器获取最新的。为此,我们将使用:

,而不是“git pull”

git pull

这完成了“git pull”的前半部分。 (第二个是合并到本地主控中,这就是您遇到问题的地方)。

Git fetch 的作用:

查找远程提交主机指向的内容

下载该提交及其引用的您本地没有的所有内容。
  1. 更新 origin/master 引用以指向该提交,以记住遥控器在其“master”版本上的位置。
  2. 接下来,我们将简单地更新本地“master”以指向相同的提交,并更新我们的工作树。
  3. 为此,我们将使用:

git pull origin master

(这是假设您没有为远程存储库使用不同的名称,而不是默认的“来源”——如果您这样做,请进行相应调整)。

这实际上做了三件事:

更新本地主分支以指向您刚刚从远程获取的同一提交。

将该树加载到您的索引中
  1. 更新您的工作树以匹配索引。
  2. 您现在拥有与远程匹配的本地主分支和树。
  3. 但是还有一个步骤,那就是清理 git 未跟踪的任何剩余内容。

git fetch origin master

将删除先前版本创建的所有文件,并为您提供一个干净的环境。无论如何,您应该将想要保留的任何构建工件复制到其他位置。

“git pull”旨在让开发人员协调他们的工作,因此它确实不是这项工作的理想工具。 “git fetch”和“git reset --hard”更具体,没有防止意外覆盖本地工作的保护。

但这正是您想要的。

不过,如果您有时进行更改以修复生产服务器上的问题,您可能希望继续使用“git pull”。合并和可能的冲突可能利大于弊。

但有时您只想将可靠的更新作为自动化的一部分,任何本地更改都是需要消除的问题。

但是即使使用“git pull”,您也可能希望“git clean”。剩余的文件可能会以神秘且难以识别的方式搞砸构建和部署。

© www.soinside.com 2019 - 2024. All rights reserved.