2013-05-14 67 views
2

如何推送到非裸Git存儲庫,自動添加並提交工作樹中的任何更改,然後重新簽出當前分支以反映推動?任何缺點Git推送到非裸回購,保存當前工作樹

添加一個鉤子上的遠程(非裸露的回購協議)運行git add . && git commit -m "Automated commit" && git reset --hard

在那裏該方法:

我在想這樣的事情?有沒有另外一種方法呢?


(聲明:我知道,這不是最理想的情況,但這是我們所擁有的在我的公司,我希望把它作爲精簡越好,而不需要每個人都徹底改變他們的方式做事)

謝謝!

回答

1

亂搞後我發現了一個很好的解決方案。

前收到鉤: 檢查是否有任何變化,工作目錄,添加/提交了這些,然後提醒他/她需要推

#!/bin/sh 
cd ../ 
unset GIT_DIR 
CHANGED=$(git diff-index --name-only HEAD --) 
if [ -n "$CHANGED" ]; then 
    git add -u . 
    git commit -m "Automated commit" 
    echo "There were uncommitted changes in the working directory...please pull them and push your changes again" 
    exit 1 
fi 

後收到鉤前合併用戶:強制檢出當前分支,以便更改將顯示在工作目錄中。這將覆蓋工作目錄中的任何更改,但這些更改將由預接收掛接添加/提交/合併。

#!/bin/sh 
cd ../ 
unset GIT_DIR 
branch=$(git branch | sed -n -e 's/^\* \(.*\)/\1/p') 

git checkout -f $branch 


echo "Update pushed to branch $branch and checked out in the website directory" 
+0

我覺得很不喜歡這些腳本,因爲它們是蹩腳的:1)爲什麼沒有'set -e -u'?如果腳本的任何部分失敗會發生什麼? 2)爲什麼'git-branch | sed'雜技而不是'git rev-parse HEAD'? 3)在文檔中,當鉤子運行時,假定某個當前目錄是假定的?爲什麼'GIT_DIR'明確未設置? – kostix 2013-05-15 10:24:19

+0

因此,如果您有更好的答案,請提供答案。我拿了git分支| sed從堆棧溢出的另一個問題。我做了一次檢查,看看當前目錄是什麼,原來是.git目錄的根。有一個問題,如果你使用CD,如果你希望git命令使用當前目錄而不是GIT_DIR的值,你必須明確地取消設置GIT_DIR。 – jraede 2013-05-16 02:38:40

+0

我沒有副手答案,我想指出[貨物崇拜編程](http://en.wikipedia.org/wiki/Cargo_cult_programming),無意識地複製和粘貼隨機代碼不是一件好事實踐。這就是爲什麼它是一個評論 - 它並不涉及問題本身。 – kostix 2013-05-16 07:56:56