ここで他の人から掘り下げて助けた後umask、gitの設定に問題があることがわかりました。私が達成したいのは、サーバーでチェックアウトされているすべての git リポジトリで、umask設定がデフォルトで 0002 になることです。すべての post-receive フックでこれを構成する必要はありません...デフォルトですumask。どうすればそれを達成できますか?
私のリポジトリはgit、サーバー上のユーザーで ssh にログインすることでアップロードされます。設定を確認するとumask、これはすでに正しい設定に設定されています。
root@server:~# su git
git@server:~$ umask
0002
ただし、umask > /tmp/debug.logpost-receive フックを挿入すると、そのファイルにumaskは 0077が表示されます。これが異なる原因は何ですか?
ルートサーバーにも同じものがあり、リポジトリをチェックアウトするときにumaskなぜ異なるのかわかりません。umaskユーザーに変更してgitファイルを作成すると、すべてうまくいきます。
git@server:~$ touch newfile
git@server:~$ ls -la
total 8
-rw-rw-r-- 1 git git 0 Aug 6 02:17 newfile
-rw------- 1 git git 0 Aug 6 02:16 post
newfileは私が作成したばかりのpostファイルです。ファイルは git 経由でチェックアウトしたファイルで、明らかに異なるアクセス許可を使用しています。umaskgit ユーザーの .bashrcにも追加しましたが、役に立ちませんでした。
git@server:~$ cat ~/.bashrc
export LANGUAGE="en_US.UTF-8"
export LC_ALL="en_US.UTF-8"
export LANG="en_US.UTF-8"
export LC_TYPE="en_US.UTF-8"
umask 0002
価値のあるものとして、私は gitolite を使用してリポジトリを管理しています。
そして、これは私が使用する受信後フック スクリプトの例です。
#!/bin/sh
export GIT_WORK_TREE=/home/user/www/
git checkout -f