2013-02-21 69 views
2

我想从R内使用git通过curl向github发送命令(即,我试图使this question作为R函数工作)。如果我能找到git.exe的位置,我可以完成此操作。我以为我可以使用Sys.which但它不起作用。找到git.exe的位置

> Sys.which("git") 
git 
"" 

但我知道文件是存在的,当我做:

> system('"C:\\Program Files (x86)\\Git\\bin\\git" --version') 
git version 1.7.11.msysgit.1 

我如何才能找到在Windows git.exe? (也许是我要去了解整个问题错了,因为发生在我身上here

+1

'which'是一个* nix命令。 Windows上的Sys.which只会查看环境路径,所以它不会奇迹般地找到文件。你是否希望在git安装在不同地方的机器上执行此操作? – 2013-02-21 05:41:03

+0

也许看看hadley在'devtools'中做了些什么:https://github.com/hadley/devtools/blob/master/R/install-git.r。检查底部的'git_path'函数。 – Marius 2013-02-21 05:42:15

+0

@Andrew Mao很可能会出现在'Program Files'或'Programs Files(x86)'中,但无法确定用户是否已将文件放置在那里。也许一个'if'' else'先搜索这两个地方,然后如果没有找到搜索其他地方,但如果它不在这两个地方之一,我不知道如何找到它。 – 2013-02-21 05:45:52

回答

5

可以配置list.files()通过最有可能的文件夹做一个递归搜索:

list.files(
    path=c("c:/program files", "c:/program files (x86)"), 
    pattern="git.exe", 
    full.names=TRUE, 
    recursive=TRUE 
) 

在我的机器,这导致:

[1] "c:/program files (x86)/Git/bin/git.exe"    
[2] "c:/program files (x86)/Git/cmd/git.exe"    
[3] "c:/program files (x86)/Git/libexec/git-core/git.exe" 
+1

如果git存储'“c:/Git/bin/git.exe”' – 2013-02-21 06:52:26

+1

@TylerRinker,这里的关键短语*最有可能的文件夹*,我怀疑这将是你必须采取的方法,除非你想要搜索所有驱动器和目录的性能命中。对于Windows(我认为XP和以上版本),你也可以考虑使用'intern = TRUE'对'wmic product get/format:csv'进行系统调用,对其执行'read.csv',并用' grep'和朋友。但是,如果没有找到Git(比如[昨天演示](http://stackoverflow.com/a/14971683/1270695)),那么检查可能的位置并集成用户提示可能会比较慢 – A5C1D2H2I1M1N2O1R2T1 2013-02-21 08:53:15

0

嘿不知道是否有人会需要这个,现在已经有一段时间了。我从谷歌搜索中蹒跚前行,发现类似的痛点。

但是,我找到了路径。这有点棘手。我想我安装了这个新的GitHub软件包,它将exe放在了一个不同于我预期的路径中。

C:\用户\ your_user_name_here \应用程序数据\本地\ GitHub的\ PortableGit_c7e0cbde92ba565cb218a521411d0e854079a28c \ CMD \ git.exe

  • 这里唯一的CAVET是我加的是git.exe,因为它只会显示的图像和cmd,所以只需知道它是一个应用程序,只需在路径中的git旁边添加.exe文件,然后单击PHP Storm中的测试或您正在使用的任何IDE即可。

希望这可以帮助别人!