1

次の受信後をセットアップしました。

$ cat .git/hooks/post-receive
#!/bin/env sh
git checkout -f

これは実行可能です:

$ l .git/hooks/post-receive
-rwx--x--x 1 nils nils 30 11. Jan 13:17 .git/hooks/post-receive

したがって、ローカル マシンからプッシュすると、チェックアウトされ、ローカルで行った変更が反映されます。しかし、そうではありません。

ローカル:

$ cat > testfile
hello world

$ git add testfile && git commit -m "added testfile" && git push production master
[master 9f5232d] added testfile
 1 files changed, 1 insertions(+), 0 deletions(-)
 create mode 100644 testfile
Counting objects: 4, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (2/2), done.
Writing objects: 100% (3/3), 290 bytes, done.
Total 3 (delta 1), reused 0 (delta 0)
To ssh://[…]/
   88ce501..9f5232d  master -> master

その後、リモートマシンで:

$ git status --short
 D testfile

そのため、作業ツリーにテストファイルがありません

$ git checkout -f 

$ git status
# On branch master
nothing to commit (working directory clean)

何が間違っている可能性がありますか?

4

1 に答える 1

2

チェックアウトが正しい場所で行われるように、 GIT_WORK_TREEを設定する必要があります。

#!/bin/env sh
GIT_WORK_TREE=/var/www/website.org git checkout -f

chmod +xスクリプトを忘れずに、プッシュするユーザーがチェックアウト コマンドを実行する権限を持っていることを確認してください。

于 2012-01-11T14:01:50.010 に答える