【问题标题】:Set GIT_DISCOVERY_ACROSS_FILESYSTEM to allow service to access git repo stored under a symlink设置 GIT_DISCOVERY_ACROSS_FILESYSTEM 以允许服务访问存储在符号链接下的 git repo
【发布时间】:2018-06-25 19:24:29
【问题描述】:

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

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

如何为服务设置 GIT_DISCOVERY_ACROSS_FILESYSTEM?

【问题讨论】:

    标签: git symlink upstart


    【解决方案1】:

    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错误消息消失了。

    【讨论】:

      【解决方案2】:

      这是我更喜欢的替代方案(如果我正确推断出您问题的所有细节):

      • 删除克隆目录中的.git -> <location_on_other_filesystem>/符号链接

      • 创建一个名为.git 的纯文本文件,其内容为
        gitdir: <location_on_other_filesystem>

      为了将来参考,git clonegit init 都支持
      --separate-git-dir <git_dir>
      选项,它在您设置 repo/clone 时完成同样的事情。

      【讨论】:

        【解决方案3】:

        在你的终端上输入这个并按回车:-

        git init
        

        这将消除错误

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2022-08-24
          • 2013-04-04
          • 1970-01-01
          • 2020-08-28
          • 2023-04-03
          • 2018-12-10
          • 1970-01-01
          相关资源
          最近更新 更多