设置GIT_DISCOVERY_ACROSS_FILESYSTEM以允许服务访问存储在符号链接下的git repo

时间:2018-01-17 01:06:40

标签: git symlink upstart

我们有一个Upstart服务/作业,它使用git repo的本地克隆。使用符号链接重新定位数据文件夹后,我们现在收到以下错误消息:

  

无法运行' git fetch' for / var / company / service / src / program repo;   详细信息:致命:不是git存储库(或任何父级安装点   / data)停止在文件系统边界   (未设置GIT_DISCOVERY_ACROSS_FILESYSTEM)。

如何为服务设置GIT_DISCOVERY_ACROSS_FILESYSTEM?

3 个答案:

答案 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 clonegit 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>

这将消除错误