我正在用 ruby 编写自己的 git post-receive hook,它类似于这样:
if !File.exists?(rep_dir+repo)
puts "Cloning repository #{repo} into #{rep_dir}."
`cd #{rep_dir}; sudo git clone file:////home/git/repositories/#{repo}.git`
exit
end
此 Hook 是在 gitolite 通用 Hook 中设置的,因此当我推送新存储库的配置时,我会立即将其克隆到新位置。
我还循环 gitolite 配置中的每个项目来检查每个项目是否存在存储库,但这不是我遇到问题的地方。
我的问题是,每当这个脚本运行时我都会得到:
remote: cd: 1: can't cd to /home/<somedir>/repositories/
remote: Cloning repository gitolite-admin into /home/<somedir>/repositories/.
Hook 运行后,存储库未克隆到目标目录。我读到有关取消设置 GIT_DIR 环境变量的信息,但没有成功。
最佳答案
克隆时不必在任何地方进行 cd。
您只需将目标路径作为参数添加到克隆命令即可。
git clone file:///xxx /path/where/to/clone
(确保目标路径不存在,否则git将拒绝克隆)
关于ruby - 如何在我的 git hook 目录之外进行 cd,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14721043/