Git提交在推送到远程源/主机时恢复为暂存

Git提交在推送到远程源/主机时恢复为暂存,git,Git,我遇到了一个有点奇怪的情况&我不知道如何准确地诊断这个问题 概述 我有3个已初始化为git repos的环境: 生产 登台 发展 Staging是生产的git克隆,Dev是Staging的git克隆。工作流的目的是允许任意数量的本地开发环境(Dev),然后将这些环境推送到staging repo(staging)进行审查。一旦审查和批准,我就可以从登台到生产 问题 将登台repo克隆到本地Dev环境时,克隆工作正常。但是,当本地更改在Dev上提交,然后在登台时推回到origin/master

我遇到了一个有点奇怪的情况&我不知道如何准确地诊断这个问题

概述

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

  • 生产
  • 登台
  • 发展
Staging是生产的git克隆,Dev是Staging的git克隆。工作流的目的是允许任意数量的本地开发环境(Dev),然后将这些环境推送到staging repo(staging)进行审查。一旦审查和批准,我就可以从登台到生产

问题

将登台repo克隆到本地Dev环境时,克隆工作正常。但是,当本地更改在Dev上提交,然后在登台时推回到origin/master时,Dev提交中更改的文件不会被应用

当我在远程服务器上运行
git log
时,我的开发提交将显示在历史记录中,它们只是没有被“应用”(即,来自本地开发环境的文件更改不会应用到远程源/主机)。但是,奇怪的是,在本地Dev上,如果我对文件进行更改,提交并推送到Staging origin/master,然后在Staging上运行
git status
,Dev提交中的文件将显示为“Staging”。
我完全不知道这里发生了什么。我试图从staging克隆一个全新的dev repo,但同样的问题也发生了

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

生产配置(远程)

登台配置(远程)

开发配置(本地)


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


Git不是一个部署工具,但您可以围绕它构建一个(在简单环境中)或将其用作对象存储(对于复杂环境)。以下是一些让您开始学习的选项/想法:

好信息。我知道,由于权限问题(或缺乏权限),git不应该真正用于部署,但由于这是一个相对简单的流程,我正在尝试。如果我理解正确的话,在这个设置中,我有-问题的发生是因为“staging”是“production”的克隆,并且因为它是repo的非裸克隆-我遇到了从dev推送的问题。理论上,如果我是从“staging”克隆我的“production”和“dev”环境-我是否仍会遇到工作树不自动更新的问题?
[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
[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