【问题标题】:Change user and group of all files in project after git pullgit pull 后更改项目中所有文件的用户和组
【发布时间】:2019-07-28 02:40:52
【问题描述】:

如果我执行git pullgit checkout,用户和组总是更改为root:root

所以我创建了文件.git/hooks/post-merge,内容如下:

#!/bin/sh

chown -R mycompany:www /srv/www/vhosts/mycompany

exec git-update-server-info

文件有执行权限

但它不起作用,调用git pull 后没有任何变化。

【问题讨论】:

  • 当你看到merge时,这是一个像在gitlab或github中的例子。 - 显示删除了哪些行,+ 显示添加了哪些行。
  • 好的,我明白了,所以他的例子不起作用。我从我的问题中删除了它。
  • 你可以试试他的例子,只需删除 +-- git pull HUB master 行并尝试它。同时更改分支名称。
  • 不起作用。为什么我的代码没有被调用?

标签: git hook


【解决方案1】:

首先要检查:你的钩子是可执行的吗?
作为in this example

运行chmod +x post-merge 使其可执行,然后将其放入.git/hooks/

然后在其中至少添加一个回显,以检查它是否执行。

请注意,挂钩只会在成功合并后运行,这意味着如果拉取导致快进合并(HEAD 移动,不需要实际合并),挂钩将不会运行。

另一种方法是尝试和use setuid/setgid 强制处理(Git,作为 root)以正确的用户身份运行(先决条件:chown 为这些文件设置正确的用户/组)

【讨论】:

  • 感谢您的回答。是的,正如我之前写的那样,该文件是可执行的,我还添加了 echo 语句,但没有打印任何内容。
  • 所以你说如果git pull 返回Already up-to-date 那么钩子不会被调用?只有在有新文件的情况下?
  • @Black Inly 如果有新文件要合并。如果拉取只在提交之上添加新提交(快进合并),则挂钩不需要运行。
  • 但这也是我需要它运行的一个用例,因为我的文件所有者和组总是被root:root 覆盖。不可能吗?
  • @Black setgid 会更实用吗? stackoverflow.com/a/29838913/6309:至少该组是正确的。
猜你喜欢
  • 2018-05-29
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2015-01-20
相关资源
最近更新 更多