2014-01-09 88 views
0

我有一個用於git的Atlassian Stash服務器。Git遠程服務器上的預推對象? git ls-tree

我正在尋找一個腳本,它將運行java代碼格式化程序作爲預接收鉤子(在將更改推送到存儲庫之前)。

所以,我所希望做的是做藏匿服務器本身的工作,而另一臺服務器上執行的工作,併發送回狀態(0或1)藏匿服務器。

我已經用Python寫了腳本,它在遠程服務器上用「GET oldrev newrev」作爲HTTP GET方法調用cgi(python)腳本。一旦我在遠程服務器上獲得了STDIN值(ref oldrev newrev),我創建了一個dir,git init,git remote add origin URL和git fetch(我甚至嘗試了git pull)來獲取reporsitory的最新內容/對象希望得到未被推送到存儲庫但是在預推送階段環境中的對象。

散列或SHA鍵或者說是在預推階段目標的「NEWREV」鍵:36ac63fe7b15049c132c310e1ee153e044b236b7

現在,當我運行「git的LS-樹36ac63fe7b15049c132c310e1ee153e044b236b7 Test.java」目錄內我上面創建,它給了我錯誤。

「致命的:不是樹對象

現在,我的問題是:

如何獲得一個遠程服務器上的對象?

什麼可能是我運行的git命令會在那個階段給我那個對象?

有沒有其他方式做到這一點?

它是否有任何意義我上面問過。如果我不清楚,請告訴我,我會盡力清理更多。

非常感謝任何/所有的幫助?

回答

0

java代碼格式化爲預先收到鉤

不要這樣做。您試圖在開發者背後運行相當於git filter-branch的效果。不要這樣做。

有沒有其他方式做到這一點?

如果要以特定方式格式化入站代碼,請驗證入站文件。如果沒有完成,請列出它們並拒絕推送。

如何在遠程服務器上獲取該對象?

您不能獲取任意對象,只能通過ref(分支或標記)名稱獲取。預接收鉤子在任何refs被更新之前運行,所以沒有ref指定入站提交。

+0

感謝您的回覆jthill。但我正在尋找一個「不正常」的解決方案來解決這個問題,因爲我面臨的問題也不是很正常。 我也知道要做的代碼格式和驗證入站文件,並拒絕推送,我已經有了運行。但是,我期望在遠程服務器上執行此操作,而在Stash服務器上執行** NOT **操作。 你或任何人都知道如何創建臨時文件並將其指向另一個SHA和不同的目錄。 –

+0

@MurtazaPitalwala請描述問題?你想在這裏離開什麼?減少服務器上的CPU負載,是什麼? – jthill

+0

問題是,我必須找出在將提交推送到主分支之前執行java格式檢查和其他檢查的方法**在遠程服務器**上,不在存儲服務器上。我傾向於,因爲裁判沒有被推動/承諾,所以現在還不可能。 一種方法我想到: 1.使用/ git的貓*藏匿服務器上的物理文件系統 2.然後將文件(S)上傳到遠程服務器 3.一旦文件上.java文件上傳在遠程服務器上執行工作 4.將響應(0或1)發送回存儲服務器。 –