当推送到远程origin / master

时间:2017-05-09 14:45:16

标签: git

我发生了一些奇怪的情况&我不确定如何诊断问题。

概述

我有3个环境已初始化为git repos:

  • 生产
  • 分段
  • 开发

Staging是Production的git clone,Dev是Staging的git clone。工作流的目的是允许任意数量的本地开发环境(Dev),然后可以将其推送到分段仓库(Staging)进行审查。经过审核和批准后,我可以从分期转到生产。

问题

将Staging repo克隆到本地Dev环境时,clone可以正常工作。但是,如果在Dev上提交了本地更改,然后在Staging上将其推送回origin / master,则不会应用Dev commit中已更改的文件。

当我在远程服务器上运行git log时,我的Dev提交正在显示在历史记录中,它们只是没有被“应用”(即我的本地开发环境中的文件更改未应用于远程起源/主人)。但是,奇怪的是 - 在本地Dev上,如果我对文件进行更改,则提交& push to Staging origin / master然后在Staging上运行git status,Dev Commit中的文件显示为“staged”。
我完全不知道这里发生了什么。我尝试从分段中克隆一个全新的dev repo并出现同样的问题。

以下是我对每个环境的git配置设置:

生产配置(远程)

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[receive]
    denyCurrentBranch = ignore

暂存配置(远程)

[core]
repositoryformatversion = 0
filemode = true
bare = false
logallrefupdates = true
[receive]
denyCurrentBranch = ignore
[remote "origin"]
url = /home/xxx/public_html
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

Dev Config(本地)

[core]
repositoryformatversion = 0
filemode = false
bare = false
logallrefupdates = true
symlinks = false
ignorecase = true
[remote "origin"]
url = ssh://username@remote.server.biz:port/home/username/staging/1
fetch = +refs/heads/*:refs/remotes/origin/*
[branch "master"]
remote = origin
merge = refs/heads/master

1 个答案:

答案 0 :(得分:2)

推送到非裸存储库是一个非常糟糕的主意,并且这样的推送不会像您观察到的那样自动更新任何工作树。这是正常和预期的行为。

Git不是一个部署工具,但您可以围绕它构建一个(在简单环境中)或将其用作对象存储(对于复杂的存储)。以下是一些可以帮助您入门的选项/想法:http://gitolite.com/deploy.html