2012-03-28 10 views
9

私は以下の問題があります。私は特定のディレクトリにCDに「-受け取るポスト」を更新し、その後、そのようにそれを展開することでレポを引っ張ってきた:私は私のローカルマシン上に「Gitのプッシュ原点マスター」を実行するたびにgit post-receiveが正しく動作しない

#!/bin/bash 
cd /var/www/site 
git pull origin master 

は、しかし、私は取得します次:まだ

Counting objects: 5, done. 
Delta compression using up to 2 threads. 
(etc..) 
remote: fatal: Not a git repository: '.' 

とき、私は手動でCD /var/www/siteに、それは見事に働くgit pull origin masterを行います。

#!/bin/bash 
cd /var/www/site || exit 
unset GIT_DIR 
git pull origin master 
exec git-update-server-info 

を次のように

答えて

14

利用設定を解除GIT_DIRあなたはここにGIT_DIRに関する詳細な情報を見ることができます。 Git Loves the Environment

+0

、私は必要なものだけ。なぜこれを行う必要があるのか​​説明してもらえますか? – andy

+2

'GIT_DIR'は、さまざまなgitコマンドに設定できる環境変数の1つです。ポスト受信フックでは、 '$ GIT_DIR'は常に(?)が' .'にセットされます。他の場所で 'cd'しても、' git pull'は '$ GIT_DIR'が' .'に設定されているのを見て、 '.'でリポジトリを見つけようとしますが、あなたは移動しました。これをクリアすると、gitは "通常の"動作に戻ります( './。git'を見て、あなたが' cd'-edされた場所で)。 – torek

2

もう1つの方法として、コマンドで作業ディレクトリとgitディレクトリを指定できます。

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git <command> 

例えば:ブリリアント

git --work-tree=/home/user/repos/my_app --git-dir=/home/user/repos/my_app/.git status 
関連する問題