我们有一个使用 git repo 的本地克隆的 Upstart 服务/作业。使用符号链接(symbolic link)重新定位数据文件夹后,我们现在收到以下错误消息:
Failed to run 'git fetch' for /var/company/service/src/program repo; Details: fatal: Not a git repository (or any parent up to mount point /data) Stopping at filesystem boundary (GIT_DISCOVERY_ACROSS_FILESYSTEM not set).
如何为服务设置 GIT_DISCOVERY_ACROSS_FILESYSTEM?
最佳答案
GIT_DISCOVERY_ACROSS_FILESYSTEM是 git 在尝试查找 repo 的根目录时查找的环境变量。如果该路径存在于另一个文件系统上,该命令将产生上述错误消息以防止 git 跨越文件系统边界。您可以将该值设置为 true 以允许此操作,并且大多数 init 系统都有方法 add environmental variables for a job/service .
对于 Upstart,我们只需要更新/etc/init/servicename.conf 文件以包含 env 和 export 关键字:
start on runlevel [2345]
stop on runlevel [^2345]
respawn
respawn limit 10 2
chdir /usr/local/servicename
setgid servicegroup
setuid servicename
limit nofile 1000000 1000000
env GIT_DISCOVERY_ACROSS_FILESYSTEM=true
export GIT_DISCOVERY_ACROSS_FILESYSTEM
exec /usr/local/servicename --cfg /etc/servicename.cfg >> /var/log/servicename.log 2>&1
重新加载配置并重新启动服务后,git错误消息消失了。
关于git - 设置 GIT_DISCOVERY_ACROSS_FILESYSTEM 以允许服务访问存储在符号链接(symbolic link)下的 git repo,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48292208/