「Git」- 在检出时,保持原文件的所属用户及组

  CREATED BY JENKINSBOT

问题描述

git在checkout时,如果分支里的文件和硬盘中的文件不同,git会创建新文件,并且新文件的用户和组为当前用户及其组。现象如下:

	# ll Config.php
	-rwxr-xr-x 1 www www 2165 Feb 26 17:45 Config.php*
	# git checkout master
	Switched to branch 'master'
	Your branch is behind 'origin/master' by 11 commits, and can be fast-forwarded.
	  (use "git pull" to update your local branch)
	# ll Config.php
	-rw-r--r-- 1 root root 2162 Feb 26 17:45 Config.php

原文件的用户及组为www:www,我使用的root用户检出后成为了root:root。这就比较麻烦了,比如用Samba共享之后,由于Samba的匿名用户为默认的www,而checkout出的文件为root:root,这会导致访问Samba的用户无法保存该文件。

当然可以每次手动执行chown www:www . -R,但这不程序。

解决方案

方法一、使用git hook

在本地仓库的 .git/hooks 下创建 post-checkout 文件,文件的内容如下:

#!/bin/sh
chown www:www . -R

并赋予执行权限:chmod u+x post-checkout

如果是执行git pull(等价于git fetch; git merge操作)操作,需要创建post-update文件,文件内容与post-checkout相同。

方法二、使用www账户

即使用 www 账户来执行 git 相关操作。

参考文献

Is there a way to trigger a hook after a new branch has been checked out in Git?