无需切换即可拉取另一个 Git 分支

无需切换即可拉取另一个 Git 分支

我们最近从 SVN 切换到 Git,同时将我们的实时系统纳入版本控制(而不是本地签出并将文件复制到实时系统)。

在我负责的项目中,我们都访问同一个存储库,只需git pull在那里就可以将更改发布到 VCS。这会导致问题,因为我们的 Web 设计师将更改推送到 VCS,而这些更改不应发布到 VCS,而应该发布到 Web 测试环境中。

当其中一位开发人员开始上线时,他会得到所有(可能是未完成的)更改。

我想过切换到一个额外的分支并只合并更改的内容,但由于我缺乏 git 知识,我不知道该怎么做。

我的想法是:

  • 在 live 中创建一个新分支(git branch live)。
  • 每次有事要上线时
    • 在 master 中拉取变更(例如git checkout master; git pull; git checkout live:)
    • git merge master

问题是,切换到主系统或将所有内容直接拉入实时系统会导致问题,所以我希望避免这种情况。

有什么方法可以做到这一点,或者有什么更好的方法来管理实时系统(除了培训网络人员不要推送未完成的东西)?

答案1

我可以在另一个分支中工作时使用以下命令将更改从中拉取origin/master到:master

git fetch origin master:master

要深入了解发生了什么,请查看优秀的回答到这个 Stack Overflow问题对我来说,最重要的一点是这个命令仅适用于快速合并

答案2

您可以使用git stash在检查 master 和 pull 之前,并在再次检查 live 之后使用git stash pop(或者如果你的 git 比较旧,git stash apply并且git stash clear假设你没有存储任何其他东西)

答案3

先解决问题。他们不应该将推送推送到与他们无关的分支。

你似乎想问的是

git checkout live
git pull origin master

这将尝试合并远程主服务器和您的实时分支。

答案4

我建议您创建一个测试 git 存储库供所有人提交。所有存储库(包括您的实时网站)都将是测试存储库的克隆。通过这种方式,任何人都可以推送到测试,而无需接触实时网站。当有人需要更新实时网站时,您可以从 git 测试存储库中拉取实时网站。此工作流程与 SVN 非常相似。为了获得额外的灵活性,我建议使用您描述的“实时”分支。

总而言之,每个人的 git 仓库都是测试仓库的克隆。实时生产站点也只是测试仓库的克隆。或者,测试可以是实时生产的克隆,因此“git push”始终朝向生产方向移动。

其他选项包括将“实时”分支添加到此安排中,或在测试和生产之间包含“暂存”存储库。为了提高安全性,我建议限制对实时 git 存储库的访问,并强制人们使用安全脚本来执行实时生产。

相关内容