Git:强制从特定分支拉取(并防止覆盖)

4
我知道有一些问题与从特定分支进行git pull时未提供显式分支名称有关,但我想知道是否可以强制拉取分支,即使用户指定不同的分支。
例如。
如果我要登录到实时服务器并拉取最新更改,我只想要来自分支live的更改。因此,如果我在shell中执行以下操作: git pull origin master 我希望git要么
  1. 抛出错误
  2. 忽略它并从origin远程上的live分支拉取
这可能吗?我希望避免像这样的情况,因为它是核心业务系统,当事情出错时不好。

你可能不应该使用git作为部署工具。任何你所做的事情(例如,将git pull别名为git pull origin live)可能很容易被规避,无意或有意。 - Ben James
1个回答

3

如果这是您的生产服务器,允许任何人在该存储库中运行任意git命令似乎是一个坏主意。任何合并操作(例如使用git pull)都可能创建冲突,导致您的实时服务器出现故障。我认为人们通常通过只允许开发人员通过推送到具有post-receiveupdate钩子的裸存储库来解决此问题。

  1. If refs/heads/master is being updated
  2. If so, checks it out to a new directory with:

    GIT_WORK_TREE=/deployment/directory git checkout -f
    

当然,这并不能阻止人们在本地合并错误的内容,然后将其推送到暂存服务器或实际服务器上,但我认为你无法做太多事情 - 人们必须在推送之前正确地测试他们的提交(无论是在本地还是在暂存服务器上)。


谢谢您的回复,我现在明白我所做的并不是一个理想的解决方案。您是否知道有关这种部署实践的任何教程/文章? - JamesHalsall
@Jaitsu:恐怕不会比通过谷歌搜索“git”和“部署”得到的更多。不过我一直想写一篇关于那个问题的博客文章,希望很快有时间写。 - Mark Longair

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接