如何将 man 和 zip 添加到 Windows 上的 "git bash" 安装
How to add man and zip to "git bash" installation on Windows
我从 2015 年第 4 季度开始使用 git bash
on Windows - that is git
for Windows via the integrated bash
. Apparently it uses the MINGW
/MSYS
underpinning. (Update from @VonC: It now uses msys2 since msysgit is obsolete。)
所以已经安装了很多 MSYS
工具 - 从 awk
到 zcat
。但是我错过了 man
命令和 zip
将多个文件压缩成一个 zip 文件(unzip
存在!)。
我可以从哪里安装它们?我不想安装另一个副本MINGW
系统!有什么方法可以将一些预编译工具添加到 git bash
安装中吗?
2016:zip
命令可以从 GoW (Gnu On Windows) 安装。 man
未提供(太大)。
但是需要注意的是,如果你只是想要从GoW添加zip
命令,仍然需要下载并安装整个GoW系统.然后您可以从 bin
目录中删除其他命令,但是请确保将所需的 dll 保留在目录中。
2021 年更新:tar/zip 默认安装在 Windows 10.
下面提供了基于 7-zip 的解决方案。
您可以通过将 man <command>
映射到 <command> --help | less
来模仿 shell 中一小部分人的行为
不幸的是,在我的机器上 bash 别名不会向位置参数添加标志,它会尝试将 运行 标志作为命令并失败(alias man=" --help"
不会工作)。
并且不允许使用名为 man()
的函数!
幸运的是,bash 函数和别名的组合可以实现此映射。将下面的代码放在您的 ~/.bashrc 中(如果不存在,请创建一个)。别忘了 source ~/.bashrc
.
# man command workaround: alias can't pass flags, but can't name function man
m() {
"" --help | less
}
alias man="m"
它不会为您提供完整的手册页,但如果您要查找的只是有关命令及其标志的基本信息,那么这可能就是您所需要的。
我很高兴在这个问题上分享我的经验,这个问题是我从第一天开始玩 Groovy 两年后才知道的。我的方法需要在 Windows OS.
中安装 git
for Windows
这些步骤用于安装 7z
command-line 实用程序,其行为与 zip
:
略有不同
- 从 its official website 下载并安装 7-Zip。默认安装在Windows10的
/c/Program Files/7-Zip
目录下
- 运行 git Bash 在管理员权限下,导航到目录
/c/Program Files/Git/mingw64/bin
,您可以 运行 命令 ln -s "/c/Program Files/7-Zip/7z.exe" 7z.exe
我很确定它能帮到你很多。相信我!
您可以从 http://gnuwin32.sourceforge.net/packages.html 安装单独的 GNU 工具,例如 zip
。
然后在启动脚本中添加 "/c/Program Files (x86)/GnuWin32/bin"
到 PATH
,例如 .profile
、.bash_profile
、.bashrc
等
以下是您可以遵循的步骤。
找出你遗漏的任何命令
这里我需要 zip 和 bzip2 作为 zip 命令。因为zip命令依赖于bzip2.dll到运行。否则你会得到错误“加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录”。
解压下载的文件
在这里,我在 bin 文件夹中为“zip.exe”下载“zip-3.0-bin.zip”,为“bzip2.dll”下载“bzip2-1.0.5-bin.zip”。 /bin/.exe
将命令exe文件复制到git-bash文件夹
这里我将“zip.exe”和“bzip2.dll”复制到\Git\usr\bin。
参考Link
https://ranxing.wordpress.com/2016/12/13/add-zip-into-git-bash-on-windows/
git-archive
,无需任何安装即可创建zip-archive。
mkdir workrepo
cd workrepo
git init
cp -r [target_file_or_dir] .
git add .
git commit -m commit
git archive -o ../myarchive.zip @
cd ..
rm -rf workrepo
以下脚本可能有用:
zip.sh foo.zip target_file_or_dir
#!/usr/bin/bash
set -eu
unset workdir
onexit() {
if [ -n ${workdir-} ]; then
rm -rf "$workdir"
fi
}
trap onexit EXIT
workdir=$(mktemp --tmpdir -d gitzip.XXXXXX)
cp -r "" "$workdir"
pushd "$workdir"
git init
git config --local user.email "zip@example.com"
git config --local user.name "zip"
git add .
git commit -m "commit for zip"
popd
git archive --format=zip -o "" --remote="$workdir" HEAD
7-zip 可以添加到 gitbash
如下:
- 在 windows 上安装 7-zip。
- 将 7-zip 文件夹 (
C:\Program Files-Zip
) 添加到 PATH
在 gitbash
exp: export PATH=$PATH:"C:\Program Files-Zip"
(临时)
在 Windows 上,添加 PATH
如下图 (permanent)
- 将
7z.exe
的副本复制为 zip.exe
- 重新打开
gitbash
。完成!
这样,它就可以在我的笔记本电脑上运行了。
如果您跳过第 3 步。您仍然可以将 zip 命令调用为 7z
而不是 zip
结论:Gitbash
是 运行ning 基于 windows Path
,我认为您可以 运行 添加到 Windows PATH
.
关于zip
,您可以使用下面的perl
脚本来打包文件:
#!/usr/bin/perl
use IO::Compress::Zip qw(:all);
$z = shift;
zip [ @ARGV ] => $z or die "Cannot create zip file: $ZipError\n";
如果你让它可执行,将它命名为 zip
,并把它放在你的 $PATH
中,你可以 运行 像这样:
zip <em>archive.zip</em> <em>文件...</em>
但是它不适用于目录。无需安装任何东西,因为 perl
并且所有必需的模块都已经存在于 Git 中用于 Windows 安装。
关于 man
,至少 git
有这样调用的文档:
git <em>选项</em> --help
它将在您的默认浏览器中打开。
如果您也愿意安装 CygWin,可以将 CygWin 路径添加到您的 GitBash 路径中,如果有 zip 就可以。例如添加
PATH=$PATH:/c/cygwin/bin
export PATH
给你的.bashrc
;注意:我会把它放在路径的 end 处,而不是开头。
由于 CygWin 具有基于 UI 的安装程序,因此可以轻松添加或删除 zip 或 man 等应用程序。
你可以通过说
找出每个路径的 windows
`cygpath -w /bin`
在各自的 shell 中。
这是另一组略有不同的说明,用于在 windows 上为 git bash
安装 zip
:
- Navigate to this sourceforge page
- 下载
zip-3.0-bin.zip
- 在压缩文件中,在
bin
文件夹中,找到文件 zip.exe
。
- 将文件
zip.exe
解压到您的 mingw64
bin 文件夹(对我来说:C:\Program Files\Git\mingw64\bin
)
- Navigate to to this sourceforge page
- 下载
bzip2-1.0.5-bin.zip
- 在压缩文件中,在
bin
文件夹中,找到文件 bzip2.dll
- 将
bzip2.dll
解压缩到您的 mingw64\bin
文件夹(与上面相同的文件夹:C:\Program Files\Git\mingw64\bin
)
在 msys2 中,我通过安装 man-db 恢复了 git help <command>
的功能:
|prompt> pacman -Syu man-db
|prompt> git help archive
对于 zip 功能,我也使用 git archive
(类似于 yukihane 的回答)。
我使用 choco
作为我的 Windows 包管理器。
我使用 PowerShell
使用 choco
安装 7zip(您必须是管理员才能使用 Choco)
PS > choco install 7zip.install
打开另一个 gitbash
终端并找到 7z.exe
可执行文件
$ which 7z
/c/ProgramData/chocolatey/bin/7z
将 7z.exe
直接复制到 zip.exe
和 voila
$ cp /c/ProgramData/chocolatey/bin/7z.exe /c/ProgramData/chocolatey/bin/zip.exe
这是另一个我没有注意到的 7-Zip 选项:
创建一个名为 zip:
的脚本
$ vi ~/bin/zip
参考 7z 指定 add 命令后跟参数:
#!/bin/bash
/c/Progra~1/7-Zip/7z.exe a "$@"
最终使其可执行
$ chmod ugo+x ~/bin/zip
这有助于 ytt 构建脚本。
+ zip ytt-lambda-website.zip main ytt
7-Zip 18.01 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-01-28
Scanning the drive:
2 files, 29035805 bytes (28 MiB)
Creating archive: ytt-lambda-website.zip
Add new data to archive: 2 files, 29035805 bytes (28 MiB)
这是我的经验,我无法在笔记本电脑中 运行 和 exe 或 .msi 文件。所以从 https://github.com/bmatzelle/gow/wiki 下载文件 > 立即下载并下载源代码 (Zip) 并将此文件解压缩到一个文件夹中,并使用文件夹名称更新路径变量。
这对我有用。
ln -s /mingw64/bin/ziptool.exe /usr/bin/zip
虽然这个问题在 man
方面已经得到了相当彻底的回答,但这里还没有强调一种压缩的替代方法。 @Zartc 提请我注意 是 一个内置的 zip 压缩实用程序:ziptool
。然而,在尝试使用它时,我发现它离替代品很近,您需要指定每个单独的文件和文件夹。所以我深入研究了文档并进行了试验,直到我有了一个 bash 函数,它可以完成所有繁重的工作,并且可以非常类似于基本的 zip -qrf name *
压缩调用:
zipWithZiptool() {
# Docs: https://libzip.org/documentation/ziptool.html
targetFilePath=""
shift
args=() # collect all args in an array so spaces are handled correctly
while IFS=$'\n\r' read -r line; do
if [[ -d "$line" ]]; then
args+=("add_dir" "$line") # Add a single directory by name
else
# add_file <pathInZip> <pathToFile> <startIndex> <length>
args+=("add_file" "$line" "$line" 0 -1)
fi
done <<< "$(find "$@")" # call find with every arg to return a recursive list of files and dirs
ziptool $targetFilePath "${args[@]}" # quotation is important for handling file names with spaces
}
例如,您可以通过这样调用来压缩当前目录的内容:
zipWithZiptool "my.zip" *
在Windows上,您可以使用tar而不是 zip.
tar -a -c -f output.zip myfile.txt
与
相同
zip output.zip myfile.txt
无需安装任何外部压缩工具。
在 windows
上安装 SDKMAN 的步骤
运行 Windows 终端机 管理员权限。打开gitbash里面。 (Ctrl + Shift + 4)
winget install -e --id GnuWin32.Zip
mkdir ~/bin
cp /usr/bin/unzip ~/bin/zip
curl -s "https://beta.sdkman.io" | bash
source "/c/Users/ajink/.sdkman/bin/sdkman-init.sh"
sdk selfupdate force
以后可以这样安装Java
sdk install java 17.0.2-open
完成! :)
我从 2015 年第 4 季度开始使用 git bash
on Windows - that is git
for Windows via the integrated bash
. Apparently it uses the MINGW
/MSYS
underpinning. (Update from @VonC: It now uses msys2 since msysgit is obsolete。)
所以已经安装了很多 MSYS
工具 - 从 awk
到 zcat
。但是我错过了 man
命令和 zip
将多个文件压缩成一个 zip 文件(unzip
存在!)。
我可以从哪里安装它们?我不想安装另一个副本MINGW
系统!有什么方法可以将一些预编译工具添加到 git bash
安装中吗?
2016:zip
命令可以从 GoW (Gnu On Windows) 安装。 man
未提供(太大)。
但是需要注意的是,如果你只是想要从GoW添加zip
命令,仍然需要下载并安装整个GoW系统.然后您可以从 bin
目录中删除其他命令,但是请确保将所需的 dll 保留在目录中。
2021 年更新:tar/zip 默认安装在 Windows 10.
下面提供了基于 7-zip 的解决方案。
您可以通过将 man <command>
映射到 <command> --help | less
不幸的是,在我的机器上 bash 别名不会向位置参数添加标志,它会尝试将 运行 标志作为命令并失败(alias man=" --help"
不会工作)。
并且不允许使用名为 man()
的函数!
幸运的是,bash 函数和别名的组合可以实现此映射。将下面的代码放在您的 ~/.bashrc 中(如果不存在,请创建一个)。别忘了 source ~/.bashrc
.
# man command workaround: alias can't pass flags, but can't name function man
m() {
"" --help | less
}
alias man="m"
它不会为您提供完整的手册页,但如果您要查找的只是有关命令及其标志的基本信息,那么这可能就是您所需要的。
我很高兴在这个问题上分享我的经验,这个问题是我从第一天开始玩 Groovy 两年后才知道的。我的方法需要在 Windows OS.
中安装git
for Windows
这些步骤用于安装 7z
command-line 实用程序,其行为与 zip
:
- 从 its official website 下载并安装 7-Zip。默认安装在Windows10的
/c/Program Files/7-Zip
目录下 - 运行 git Bash 在管理员权限下,导航到目录
/c/Program Files/Git/mingw64/bin
,您可以 运行 命令ln -s "/c/Program Files/7-Zip/7z.exe" 7z.exe
我很确定它能帮到你很多。相信我!
您可以从 http://gnuwin32.sourceforge.net/packages.html 安装单独的 GNU 工具,例如 zip
。
然后在启动脚本中添加 "/c/Program Files (x86)/GnuWin32/bin"
到 PATH
,例如 .profile
、.bash_profile
、.bashrc
等
以下是您可以遵循的步骤。
找出你遗漏的任何命令 这里我需要 zip 和 bzip2 作为 zip 命令。因为zip命令依赖于bzip2.dll到运行。否则你会得到错误“加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录”。
解压下载的文件 在这里,我在 bin 文件夹中为“zip.exe”下载“zip-3.0-bin.zip”,为“bzip2.dll”下载“bzip2-1.0.5-bin.zip”。 /bin/.exe
将命令exe文件复制到git-bash文件夹 这里我将“zip.exe”和“bzip2.dll”复制到\Git\usr\bin。
参考Link https://ranxing.wordpress.com/2016/12/13/add-zip-into-git-bash-on-windows/
git-archive
,无需任何安装即可创建zip-archive。
mkdir workrepo
cd workrepo
git init
cp -r [target_file_or_dir] .
git add .
git commit -m commit
git archive -o ../myarchive.zip @
cd ..
rm -rf workrepo
以下脚本可能有用:
zip.sh foo.zip target_file_or_dir
#!/usr/bin/bash
set -eu
unset workdir
onexit() {
if [ -n ${workdir-} ]; then
rm -rf "$workdir"
fi
}
trap onexit EXIT
workdir=$(mktemp --tmpdir -d gitzip.XXXXXX)
cp -r "" "$workdir"
pushd "$workdir"
git init
git config --local user.email "zip@example.com"
git config --local user.name "zip"
git add .
git commit -m "commit for zip"
popd
git archive --format=zip -o "" --remote="$workdir" HEAD
7-zip 可以添加到 gitbash
如下:
- 在 windows 上安装 7-zip。
- 将 7-zip 文件夹 (
C:\Program Files-Zip
) 添加到PATH
在gitbash
exp:export PATH=$PATH:"C:\Program Files-Zip"
(临时)
在 Windows 上,添加PATH
如下图 (permanent)
- 将
7z.exe
的副本复制为zip.exe
- 重新打开
gitbash
。完成!
这样,它就可以在我的笔记本电脑上运行了。
如果您跳过第 3 步。您仍然可以将 zip 命令调用为 7z
而不是 zip
结论:Gitbash
是 运行ning 基于 windows Path
,我认为您可以 运行 添加到 Windows PATH
.
关于zip
,您可以使用下面的perl
脚本来打包文件:
#!/usr/bin/perl
use IO::Compress::Zip qw(:all);
$z = shift;
zip [ @ARGV ] => $z or die "Cannot create zip file: $ZipError\n";
如果你让它可执行,将它命名为 zip
,并把它放在你的 $PATH
中,你可以 运行 像这样:
zip <em>archive.zip</em> <em>文件...</em>
但是它不适用于目录。无需安装任何东西,因为 perl
并且所有必需的模块都已经存在于 Git 中用于 Windows 安装。
关于 man
,至少 git
有这样调用的文档:
git <em>选项</em> --help
它将在您的默认浏览器中打开。
如果您也愿意安装 CygWin,可以将 CygWin 路径添加到您的 GitBash 路径中,如果有 zip 就可以。例如添加
PATH=$PATH:/c/cygwin/bin
export PATH
给你的.bashrc
;注意:我会把它放在路径的 end 处,而不是开头。
由于 CygWin 具有基于 UI 的安装程序,因此可以轻松添加或删除 zip 或 man 等应用程序。
你可以通过说
找出每个路径的 windows`cygpath -w /bin`
在各自的 shell 中。
这是另一组略有不同的说明,用于在 windows 上为 git bash
安装 zip
:
- Navigate to this sourceforge page
- 下载
zip-3.0-bin.zip
- 在压缩文件中,在
bin
文件夹中,找到文件zip.exe
。 - 将文件
zip.exe
解压到您的mingw64
bin 文件夹(对我来说:C:\Program Files\Git\mingw64\bin
) - Navigate to to this sourceforge page
- 下载
bzip2-1.0.5-bin.zip
- 在压缩文件中,在
bin
文件夹中,找到文件bzip2.dll
- 将
bzip2.dll
解压缩到您的mingw64\bin
文件夹(与上面相同的文件夹:C:\Program Files\Git\mingw64\bin
)
在 msys2 中,我通过安装 man-db 恢复了 git help <command>
的功能:
|prompt> pacman -Syu man-db
|prompt> git help archive
对于 zip 功能,我也使用 git archive
(类似于 yukihane 的回答)。
我使用 choco
作为我的 Windows 包管理器。
我使用 PowerShell
使用 choco
安装 7zip(您必须是管理员才能使用 Choco)
PS > choco install 7zip.install
打开另一个 gitbash
终端并找到 7z.exe
可执行文件
$ which 7z
/c/ProgramData/chocolatey/bin/7z
将 7z.exe
直接复制到 zip.exe
和 voila
$ cp /c/ProgramData/chocolatey/bin/7z.exe /c/ProgramData/chocolatey/bin/zip.exe
这是另一个我没有注意到的 7-Zip 选项:
创建一个名为 zip:
的脚本$ vi ~/bin/zip
参考 7z 指定 add 命令后跟参数:
#!/bin/bash
/c/Progra~1/7-Zip/7z.exe a "$@"
最终使其可执行
$ chmod ugo+x ~/bin/zip
这有助于 ytt 构建脚本。
+ zip ytt-lambda-website.zip main ytt
7-Zip 18.01 (x64) : Copyright (c) 1999-2018 Igor Pavlov : 2018-01-28
Scanning the drive:
2 files, 29035805 bytes (28 MiB)
Creating archive: ytt-lambda-website.zip
Add new data to archive: 2 files, 29035805 bytes (28 MiB)
这是我的经验,我无法在笔记本电脑中 运行 和 exe 或 .msi 文件。所以从 https://github.com/bmatzelle/gow/wiki 下载文件 > 立即下载并下载源代码 (Zip) 并将此文件解压缩到一个文件夹中,并使用文件夹名称更新路径变量。 这对我有用。
ln -s /mingw64/bin/ziptool.exe /usr/bin/zip
虽然这个问题在 man
方面已经得到了相当彻底的回答,但这里还没有强调一种压缩的替代方法。 @Zartc 提请我注意 是 一个内置的 zip 压缩实用程序:ziptool
。然而,在尝试使用它时,我发现它离替代品很近,您需要指定每个单独的文件和文件夹。所以我深入研究了文档并进行了试验,直到我有了一个 bash 函数,它可以完成所有繁重的工作,并且可以非常类似于基本的 zip -qrf name *
压缩调用:
zipWithZiptool() {
# Docs: https://libzip.org/documentation/ziptool.html
targetFilePath=""
shift
args=() # collect all args in an array so spaces are handled correctly
while IFS=$'\n\r' read -r line; do
if [[ -d "$line" ]]; then
args+=("add_dir" "$line") # Add a single directory by name
else
# add_file <pathInZip> <pathToFile> <startIndex> <length>
args+=("add_file" "$line" "$line" 0 -1)
fi
done <<< "$(find "$@")" # call find with every arg to return a recursive list of files and dirs
ziptool $targetFilePath "${args[@]}" # quotation is important for handling file names with spaces
}
例如,您可以通过这样调用来压缩当前目录的内容:
zipWithZiptool "my.zip" *
在Windows上,您可以使用tar而不是 zip.
tar -a -c -f output.zip myfile.txt
与
相同zip output.zip myfile.txt
无需安装任何外部压缩工具。
在 windows
上安装 SDKMAN 的步骤运行 Windows 终端机 管理员权限。打开gitbash里面。 (Ctrl + Shift + 4)
winget install -e --id GnuWin32.Zip
mkdir ~/bin
cp /usr/bin/unzip ~/bin/zip
curl -s "https://beta.sdkman.io" | bash
source "/c/Users/ajink/.sdkman/bin/sdkman-init.sh"
sdk selfupdate force
以后可以这样安装Java
sdk install java 17.0.2-open
完成! :)