2012-12-18 49 views
1

我設置了一個環境,我可以在本地工作站上將更改推送到「Hub」存儲庫(這是一個遠程),然後更新後的掛鉤會自動更新我的存檔網站,這是「總理」。我這樣做是爲了讓我可以看到當我推送到遠程集線器時,我的更改會自動反映到暫存站點中。Post-Update Git Hook沒有找到目錄

此設置基於this文章。我的服務器是Windows 2012,我在服務器和工作站上都​​使用MSysGit(Windows 7)。

當我手動執行所有操作時,一切工作正常 - 從我的本地存儲庫推送到集線器,然後手動提取/合併到素數中。我的問題是當我嘗試通過更新後的掛鉤來完成提取/合併時。

當我提交修改我的樞紐,輸出我得到的是:

c:\Code4X\GIT\stage>git push stage master 
Counting objects: 11, done. 
Delta compression using up to 8 threads. 
Compressing objects: 100% (6/6), done. 
Writing objects: 100% (6/6), 518 bytes, done. 
Total 6 (delta 5), reused 0 (delta 0) 
remote: 
remote: **** Pulling changes into Live [Stage's post-update hook] 
remote: 
remote: hooks/post-update: line 12: cd: /c/websites/myproject.staging: No 
such file or directory 
To w:/stage.git 
    ce1e2ea..93e11f4 master -> master 

我的post-update掛鉤是:

#!/bin/sh 

echo 
echo "**** Pulling changes into Live [Stage's post-update hook]" 
echo 

cd /c/websites/myproject.staging || exit 
unset GIT_DIR 
git pull stage master 

exec git update-server-info 

我能火起來一個bash CMD shell和cd到目錄沒有問題,所以我不知道問題是什麼。

我也試過:

  • 包括混帳\ cmd在我的道路
  • 包圍我想裁談會在有我的家當點#引號(「)
  • 路徑!/ C/PROGRA〜1/git的/ bin/sh的

希望這件事情很明顯。任何想法來的問題是什麼?

回答

0

的ARTI您使用的參考似乎假定中心和黃金位於同一主機上。也許你在單獨的主機上有這些,因此這意味着更新後的鉤子在沒有/c/websites/myproject.staging的地方運行(它在遠程接收推送時執行)?

此外,儘管作者建議避免推送到非裸存儲庫通常是有效的,但以這種方式編寫pull大致等同於這樣做,因此可能需要更改以將推送鏈接到集線器上的遠程這指向素數)在更新後?這將允許它與駐留在不同主機上的hub和prime一起工作,並完全刪除需要的導航目錄。

1

只是通過做一些有點類似我的項目之一。看起來你有正確的想法。

請嘗試使用相對路徑。

#!/bin/sh 
unset GIT_DIR 
cd .. 
# You are now in the project root 
cd ../project.prime 
git pull stage master 

我想我會讓你知道我在做什麼,因爲這可能會幫助你。該腳本將強制每次回購被更新時更新工作副本:

#!/bin/sh 
unset GIT_DIR 
cd .. 
git checkout -f 
+0

我將不得不放棄一下。我想過相對路徑,但我從來沒有嘗試過。我會讓你知道它是怎麼回事。謝謝! –

0

我找到了答案here:先在掛機後任意git的命令,以「ENV -i」。因此:

cd /path/to/other/repo && env -i git pull 

的原因,如在後詳述,是與GIT_DIR環境變量設置鉤後命令運行,因而,在你的老回購運行看任何git的命令,而不是一個你're-in。「env -i」是取消該變量的一種方式。