2010-10-20 124 views
0

我有我的公司使用的git設置一些麻煩。git commit覆蓋新的遠程推送更改與原始代碼(分離HEAD?)

我在git 1.5.4.3的Ubuntu哈代機器上用主代碼庫建立了一個git「server」。 我是git的新手,並通過教程一步步設置這個存儲庫。

git init 
git add . 
git commit -m "initial commit" 

然後,我成立了一個客戶端(Win XP的)的git的版本1.7.3.1.msysgit.0(適用於Windows官方GIT)安裝並克隆該資源庫通過SSH。

git clone <IP>:/var/git/<repo> <target> 
<made some file changes> 
git status ob my client then says: 

$ git status 
# On branch master 
# Changed but not updated: 
# (use "git add <file>..." to update what will be committed) 
# (use "git checkout -- <file>..." to discard changes in working directory) 
# 
#  modified: searchfunc_admin.php 
# 
no changes added to commit (use "git add" and/or "git commit -a") 

話,我提交-a這給:

[master 9404d01] + searchfunc_admin.php DB Verb. Prüfung modifiziert 
1 files changed, 3 insertions(+), 3 deletions(-) 

的話,我推到庫的服務器上:

$ git push origin master 
<user>@<IP>'s password: 
Counting objects: 5, done. 
Delta compression using up to 2 threads. 
Compressing objects: 100% (3/3), done. 
Writing objects: 100% (3/3), 385 bytes, done. 
Total 3 (delta 2), reused 0 (delta 0) 
To 192.168.1.26:/var/git/farocmsafs 
    5267756..9404d01 master -> master 

在Ubuntu機器,我cd到主回購和檢查發生了什麼:

git status 
# On branch master 
# Changes to be committed: 
# (use "git reset HEAD <file>..." to unstage) 
# 
#  modified: searchfunc_admin.php 
# 

如果我檢查DIFF,它顯示了變化,但如果我執行git的承諾,他問我要他們爲舊代碼應與原代碼被更新(這是真正的舊代碼)

git diff HEAD 
diff --git a/searchfunc_admin.php b/searchfunc_admin.php 
index 4e15696..17ca17a 100755 
--- a/searchfunc_admin.php 
+++ b/searchfunc_admin.php 
@@ -9,11 +9,11 @@ require_once("additional/functions.php"); 
// INITS 
//********** 
// Connect to database 
-if(!$mylocal || !$myafs) 
+if($DB_CONNECTION != TRUE) 
{ 
-  if(!sqldb_connect()) 
+  if(($sql_return = sqldb_connect()) != TRUE) 
     { 
-    echo "Cant connect to database"; 
+    echo "Cant connect to database: ".$sql_return; 
       die(1); 
     } 
} 

處理該消息提交,但未應用新推送代碼的更改。

我發現我唯一的機會應用新的更改是一個git重置 - 與遠程提交ID的硬件。但這樣我必須手動將所有更改應用於代碼。

我不使用其他分支,只有「主」,並且不要使用git commit以外的參數,而不是「-a」,所以我沒有任何線索來說明錯誤的來源。

從我迄今爲止閱讀的內容來看,這可能是一個獨立的HEAD問題,但我不知道爲什麼頭被分離。 如果我在ubuntu機器上進行了本地更改,一切順利。在提取或拉取後,我可以提交併查看遠程計算機上的更改。但我無法應用遠程更改與其他重置 - 哈德。

希望有人可以幫助我。

謝謝,塞巴斯蒂安

+1

它看起來像你推到一個非裸倉庫,這應該非常明確地產生警告,並根據git的版本,一個致命的錯誤。我誤解了嗎? (當推到一個非裸回購,提交被推動,但工作樹是未觸及的。如果你想把它提升到最新,你必須做一個'reset --hard'。理想情況下,你只需要推動裸回購)。 – Cascabel 2010-10-20 13:53:43

回答

1

請勿推送到非裸倉庫。它會更新頭部,但不會更新工作樹,當您稍後查看時會導致出現奇怪的行爲。您可以通過執行git reset --hard來修復它,以將服務器上的工作樹更新爲當前的磁頭。

有兩種方法來解決這個問題:

  1. 初始化服務器上​​的一個新的存儲庫git init --bare
  2. 清除了服務器上的工作樹和.git子目錄中的全部內容移動到頂部-水平。您應該重新命名該存儲庫,以便以.git結尾,因爲這是裸倉庫的慣例。