2017-05-09 25 views
2

我有一些奇怪的場景發生&我不確定如何診斷問題。當推送到遠程原點/主設備時,Git commit恢復爲stage0

概述

我已經被初始化爲git的回購3個環境:

  • 生產
  • 分期
  • 開發

分期是一個git克隆Production和Dev是Staging的git克隆。工作流的目的是允許任意數量的本地開發環境(Dev),然後可以將它們推送到臨時回購(Staging)進行審查。一旦審查和批准,我就可以從分期推進到生產。

問題

當克隆分期回購到本地開發環境,克隆工作正常。但是,如果在Dev上提交本地更改,然後將其推回到Staging上的origin/master,則Dev commit中更改的文件將不會被應用。

當我將開發提交正在展現在歷史上的遠程服務器上運行git log,他們只是沒有被「應用」(即從我的本地開發環境中的文件更改將不會被應用到遠程產地/主)。但是,奇怪的是 - 在本地Dev上,如果我對文件進行更改,提交&推送到Staging origin/master,然後在Staging上運行git status,Dev Commit中的文件顯示爲「staged」。
我完全不知道這裏發生了什麼。我試圖從分期中克隆一個全新的開發者回購,併發生同樣的問題。

這裏是我的每個環境混帳配置設置:

生產配置(遠程)

[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://[email protected]:port/home/username/staging/1 
fetch = +refs/heads/*:refs/remotes/origin/* 
[branch "master"] 
remote = origin 
merge = refs/heads/master 

回答

2

這是一個非常糟糕的主意,推到一個非裸存儲庫,這種推並不會自動更新任何工作樹,你所觀察到的。這是正常和預期的行爲。 Git不是一個部署工具,但是你可以在它周圍(在簡單的環境中)創建一個工具,或者將它用作一個對象庫(對於複雜工具)。這裏有一些選項/想法讓你開始:http://gitolite.com/deploy.html

+0

好信息。我知道由於權限問題(或缺少),git不應該用於部署,但是由於這是一個相對簡單的流程,我正在嘗試。如果我理解正確,在這個設置我有 - 問題發生,因爲「分期」是一個「生產」的克隆,因爲它是一個非光禿的克隆的回購 - 我遇到了從開發推動的問題。從理論上講,如果我將「生產」和「開發」環境同時從「分段」克隆 - 我是否仍然遇到工作樹不會自動更新的問題? –