我正在构建一个自动预提交脚本based in the Carlos Buenos Vinos tutorial,但是大问题是:我在开发计算机中使用Windows的公司工作(我知道我知道,我可以'对这个sry什么都不做。)
该脚本具有以下方法:
private function extractCommitedFiles()
{
$output = array();
$rc = 0;
exec('git rev-parse --verify HEAD 2> /dev/null', $output, $rc);
$against = '4b825dc642cb6eb9a060e54bf8d69288fbee4904';
if ($rc == 0) {
$against = 'HEAD';
}
// unix / linux
// exec("git diff-index --cached --name-status $against | egrep '^(A|M)' | awk '{print $2;}'", $output);
// windows
exec("git diff-index --cached --name-status $against | egrep '^(A|M)' | awk '{print $2;}'", $output);
return $output;
}
那么......是否有任何人对下面的线路有相同的命令?
exec("git diff-index --cached --name-status $against | egrep '^(A|M)' | awk '{print $2;}'", $output);
如果我在UNIX / Bash中运行此命令,我必须得到以下结果:
core/web/favicon.ico
core/web/htaccess.txt
core/web/index.html
core/web/slim.php
core/web/swagger/css/print.css
core/web/swagger/css/reset.css
core/web/swagger/css/screen.css
core/web/swagger/css/style.css
core/web/swagger/css/typography.css
core/web/swagger/fonts/DroidSans-Bold.ttf
但是使用exec(' ...没有egrep和awk命令我会得到以下结果:
A core/web/htaccess.txt
A core/web/index.html
A core/web/slim.php
A core/web/swagger/css/print.css
A core/web/swagger/css/reset.css
A core/web/swagger/css/screen.css
A core/web/swagger/css/style.css
A core/web/swagger/css/typography.css
A core/web/swagger/fonts/DroidSans-Bold.ttf
谢谢你们!
答案 0 :(得分:2)
首先,该命令是一个不好的例子。几乎没有必要在同一个管道中使用grep
和awk
,因为awk
功能更强大。因此,命令应缩短为
awk '/^(A|M)/ {print $2}'
其次,即使这是一个糟糕的例子,因为git diff-index
有各种输出选项,包括--name-only
和--diff-filter
,可以合并为
git diff-index --cached --name-only --diff-filter=AM $against
答案 1 :(得分:0)
您可以下载Windows工具的Windows版本,并将bin文件夹添加到PATH变量中。
http://gnuwin32.sourceforge.net/packages/gawk.htm http://gnuwin32.sourceforge.net/packages/grep.htm
对于" egrep"你可以使用" grep -E"。 "呆子"将完成像" awk"在你的情况下。