我们有一个Upstart服务/作业,它使用git repo的本地克隆。使用符号链接重新定位数据文件夹后,我们现在收到以下错误消息:
无法运行' git fetch' for / var / company / service / src / program repo; 详细信息:致命:不是git存储库(或任何父级安装点 / data)停止在文件系统边界 (未设置GIT_DISCOVERY_ACROSS_FILESYSTEM)。
如何为服务设置GIT_DISCOVERY_ACROSS_FILESYSTEM?
答案 0 :(得分:2)
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错误消息就消失了。
答案 1 :(得分:2)
以下是我更喜欢的替代方案(如果我已正确推断出您问题的所有细节):
删除克隆目录中的.git -> <location_on_other_filesystem>/
符号链接
在其位置创建一个名为.git
的纯文本文件,其内容为gitdir: <location_on_other_filesystem>
。
为了将来参考,git clone
和git init
都支持--separate-git-dir <git_dir>
选项,在设置repo / clone时完成相同的操作。
答案 2 :(得分:0)
在您的终端上键入此内容,然后按Enter:-
<div>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
<span>Hello, World!</span>
</div>
这将消除错误