Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/git/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
自动脚本确定git是否真的安装在OSX上的最佳方法_Git_Macos - Fatal编程技术网

自动脚本确定git是否真的安装在OSX上的最佳方法

自动脚本确定git是否真的安装在OSX上的最佳方法,git,macos,Git,Macos,我可以通过几种方式找到名为git的可执行文件(基本上相当于哪个git)。但是我知道的所有解决方案都被OSX的伪/usr/bin/git程序打败了,该程序是一个对话框的挂钩,该对话框提供安装Xcode的git(我随后将其称为OSXGit安装程序) 我想检测这种情况,并将git视为未找到,如果这是唯一的情况。我不想执行它来确定,因为我不想触发安装程序对话框 上下文:我想实现以下内容(作为更大的软件安装过程的一部分): 确定是否安装了“真正的”git(即名为git的可执行文件,而不是OS X git

我可以通过几种方式找到名为
git
的可执行文件(基本上相当于
哪个git
)。但是我知道的所有解决方案都被OSX的伪
/usr/bin/git
程序打败了,该程序是一个对话框的挂钩,该对话框提供安装Xcode的
git
(我随后将其称为OSXGit安装程序)

我想检测这种情况,并将
git
视为未找到,如果这是唯一的情况。我不想执行它来确定,因为我不想触发安装程序对话框

上下文:我想实现以下内容(作为更大的软件安装过程的一部分):

  • 确定是否安装了“真正的”git(即名为
    git
    的可执行文件,而不是OS X git安装程序,位于
    路径上)
  • 如果是,承认并尊重它并继续(我已经弄清楚了这一部分)
  • 如果不是,请安装git项目中的一个(我已经解决了这一部分)
如果我能找到一种忽略OSXGit安装程序的方法,我可以根据需要解析
PATH
,自己搜索可执行文件。如果启发法几乎总是正确的话,我对它很满意;我不需要处理边缘情况(比如有人创建一个名为
git
的可执行文件或脚本,它与
git
不兼容)


确定是否在不执行
/usr/bin/git
(并触发安装程序对话框)的情况下在系统上安装了非OS X git安装程序
git
,最好的(最健壮的,其次是最方便的)方法是什么。有些东西无法自动发现,我当然可以拥有
$HOME/bin/git
,它不是
git
,但在我的道路上


您可以做的是将git的路径作为一个具有合理默认值的可配置项,并很好地记录它。
git
程序本身就是这样做的;它将在中查找配置项,并最终允许
git--file configfile
作为覆盖的最后一个选项。

好的,我想我已经找到了启发式的答案

如果:
/Applications/Xcode.app/
不存在

以及:
/Library/Developer/CommandLineTools/
不存在

然后:
/usr/bin/git
是存根,可以忽略它

显然,存在可能的故障案例;人们可以移动这些文件,人们可以创建名为
git
的可执行文件,这些文件与
git
不兼容,但这似乎是99%的解决方案,结果比我想象的要简单一些


我还没有调查如果我安装git项目的
git
会发生什么,以及
路径中会发生什么(Apple non工具还会是第一个吗?)。如果有什么实质性的变化,我会向你汇报;我猜如果苹果的工具仍然是
路径中的第一个
,我会让我的安装过程移动或删除它,或者可能更改它使用的
路径
,或者其他什么。

我愿意相信,如果有人有
git
,那么它实际上就是
git
(或者某种兼容的脚本或别名)。我希望处理的唯一例外是Apple
/usr/bin/git
股票安装,它实际上不是
git
,而是图形Xcode安装程序对话框的挂钩。我想检测这种情况,并将
git
视为在这种情况下未找到。我对问题进行了编辑,以使其更清楚。如果存根git在路径中,并且您使用类似于
git--version
的命令,您是否可以解析结果以确定git是否是存根?哈,在您编写该评论时,我在一个(希望得到改进)的问题中澄清了为什么我不能这样做。因此,不,执行git--version会弹出安装程序对话框(除非有一些巧妙的方法来避免它,或者一些无头操作的技巧之类的)。一种可能是根据文件的大小进行猜测。另一种可能是根据git`
字符串的输出来确定差异。我想到了第一个想法,但没有想到第二个,非常好(谢谢)。我无法方便地进行测试,但是你可以在一个没有安装xcode或命令行工具的系统和一个没有安装xcode或命令行工具的系统上看到
xcode select-p
xcrun-f git
所显示的内容。在启用了系统完整性保护(默认设置)的El Capitan中,甚至连root用户都不能在/usr/bin.Oh-wow中移动或删除东西,谢谢——我不知道/usr/bin就是其中之一我仍然在玩弄其他选择——让我安装的软件尝试改变路径,或者只是玩和使用苹果的软件(并通过运行
/usr/bin/git
来提示人们安装)。