如何在Windows上的“git bash”安装中添加man和zip功能

133
我在Windows上使用git bash - 这是通过集成的bash使用Windows版的git。显然它使用了MINGW/MSYS基础。(@VonC更新:自Q4 2015以来,它现在使用msys2,因为msysgit已经过时
因此,已经安装了许多MSYS工具-从awkzcat。但是我错过了man命令和将多个文件压缩为zip文件的zipunzip存在!)。
我应该从哪里安装它们?我不想安装另一个MINGW系统!有没有办法只向git bash安装中添加一些预编译工具?
22个回答

104

以下是另一组略有不同的指令,用于在Windows上为git bash安装zip

  1. 进入此 SourceForge 页面。
  2. 下载 zip-3.0-bin.zip
  3. 在压缩文件中的 bin 文件夹中找到文件 zip.exe
  4. 将文件 zip.exe 解压至您的 mingw64 bin 文件夹(对于我来说是: C:\Program Files\Git\mingw64\bin)。
  5. 进入此 SourceForge 页面。
  6. 下载 bzip2-1.0.5-bin.zip
  7. 在压缩文件中的 bin 文件夹中找到文件 bzip2.dll
  8. bzip2.dll 解压至您的 mingw64\bin 文件夹中(与上述相同的文件夹:C:\Program Files\Git\mingw64\bin)。

6
这个东西就像魔法一样有效 - 虽然我不知道为什么它需要bzip2.dll文件。 - Jeremy Ninnes
1
这个方法可行!请确保复制的是 bzip2.dll 而不是像我试过但行不通的 bzip2.zip - duyn9uyen
谢谢这个快速提示。最近我试图安装大型软件包时填满了系统磁盘,系统管理员对我很生气。今天我需要一个小的后门方式来完成工作,这正是我需要的。 - J B
1
2022年,这对于一个Windows迷仍然有效。非常感谢。 - HackerMan0
2
C:/Program Files/Git/mingw64/bin/zip.exe: 加载共享库时出错: ?: 无法打开共享对象文件: 没有那个文件或目录。你有什么线索可以解决这个问题吗?我已经将zip-3.0-bin.zip\bin\zip.exebzip2-1.0.5-bin.zip\bin\bzip2.dll两个文件都复制到了Git/mingw64/bin目录下。 - Rod911

66

以下是将 7-zip 添加到 gitbash 的步骤:

  1. 在 Windows 上安装 7-zip。
  2. 将 7-zip 文件夹 (C:\Program Files\7-Zip) 添加到 PATH 中。
    gitbash 中执行:export PATH=$PATH:"C:\Program Files\7-Zip"临时
    在 Windows 上添加 PATH,如下图所示(永久

enhanced picture with better blackening

  1. 复制一份 7z.exe 并重命名为 zip.exe
  2. 重新打开 gitbash。完成!

这样,在我的笔记本电脑上可以正常运行。

如果跳过第 3 步,仍然可以使用 7z 而不是 zip 来调用 zip 命令。

总结: 在 windows 中基于 Path 运行 Gitbash,您可以运行已经添加到 Windows PATH 中的任何命令。


5
这对我有用,但是我没有发现需要进行第三步,我使用了7z命令代替。例如:7z a -r zipped_filename.zip * - martti d
@linuxeasy 我记得我以前从来没有做过那个。 - nokieng
1
感谢 @nokieng。第三步正是我在安装Sdkman时寻找的特定需求。 - Dexter
太好了!这是一个简单、易用且有效的技巧,不仅完美地解决了问题,还节省了很多时间:) 谢谢。我之前也遇到了同样的情况,现在可以顺利安装sdkman了。 - itsraghz
1
这对我有用,省去了在GitBash上安装zip的步骤,因为出于某种莫名其妙的原因,它没有包管理器。 - SystemsInCode

45

2016年:可以从GoW (Gnu On Windows)安装zip命令,但是不提供man命令(太大了)。

需要注意的是,如果您想从GoW添加zip命令,则仍然必须下载和安装整个GoW系统。然后,您可以从bin目录中删除其他命令,但请确保在目录中保留所需的dll文件。

2021年更新:Windows 10默认安装tar/zip。
可使用基于7-zip的解决方案,请参见下文。


感谢关于 msys2 的澄清。 - halloleo
不确定是否要安装GoW - 这会复制大部分已经存在的命令。所以也许最好从msys2本身重新开始,然后再添加 gitzipman... - halloleo
你可以仅从how中提取所需的zip.exe。 - VonC
我有一台受控笔记本电脑,无法将东西安装到典型目录中。我可以将“zip”放在我的路径中,但是DLL文件怎么办? - tggagne
1
@AsGoodAsItGets 我同意。我已经编辑了这个(旧的)答案来表达这个意思。 - VonC
显示剩余2条评论

19
git-archive 是一个无需安装即可使用的工具,可以创建 zip 压缩文件。
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 目标文件或目录
#!/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 "$2" "$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 "$1" --remote="$workdir" HEAD

1
对于cp命令:更推荐使用-a选项而不是-r选项。 "每个人"都使用-r选项,而"每个人"都想要-a的行为... - syme
这似乎只适用于要压缩的目录处于版本控制下,因此不幸的是不能作为“zip”命令的通用替代品。 - Tustin2121

15

很高兴分享我在使用Groovy时两年来一直不知道的问题。我的方法需要在Windows操作系统中安装git

以下是安装7z命令行实用程序的步骤,它与zip有点不同:

  • 其官方网站下载并安装7-Zip。默认情况下,在Windows 10中,它将安装在目录/c/Program Files/7-Zip下,就像我的情况一样。
  • 以管理员权限运行git Bash,导航到目录/c/Program Files/Git/mingw64/bin,您可以运行以下命令:ln -s "/c/Program Files/7-Zip/7z.exe" 7z.exe

我非常确定这可以帮助您很多。相信我!


不好的是,7zip不支持所有的cmd开关,比如“-j”。 - Fritz

11

Windows 上,你可以使用 tar 代替 zip

tar -a -c -f output.zip myfile.txt

就是说,

zip output.zip myfile.txt

无需安装任何外部压缩工具。


2
超级好的想法,非常聪明。这个可行。 - Sriharsha Kalluru
1
不行。这在Windows中不会生成有效的zip文件,而是会生成tar.gz文件。 - sboisse
由于这是关于git bash的问题,正确的命令应该是tar.exe -a -c -f output.zip myfile.txt。Windows提供了能够创建ZIP文件的BSD tar。Git Bash提供了无法执行相同操作的GNU tar。 - Christian

9

在Windows上安装SDKMAN的步骤

以管理员权限运行Windows终端,在其中打开git bash。(Ctrl + Shift + 4)

enter image description here

winget install -e --id GnuWin32.Zip
mkdir ~/bin
cp /usr/bin/unzip ~/bin/zip
curl -s "https://beta.sdkman.io" | bash
source "${HOME}/.sdkman/bin/sdkman-init.sh"
sdk selfupdate force

你可以这样安装Java。

sdk install java 17.0.2-open

完成啦!:)


2
在路径上无法使用zip,因为它没有与Git bash一起安装。这些命令立即解决了问题,谢谢。 - Tom Nijs
1
在Windows中,使用上述命令在git gui bash中工作得非常顺利。 - undefined

9
我使用 choco 作为我的 Windows 软件包管理器。
我使用 PowerShell 安装 7zip(你必须是管理员才能使用 Choco)。
PS > choco install 7zip.install

打开另一个 gitbash 终端并找到 7z.exe 可执行文件

$ which 7z
/c/ProgramData/chocolatey/bin/7z

直接复制 7z.exezip.exe,然后 voila

$ cp /c/ProgramData/chocolatey/bin/7z.exe /c/ProgramData/chocolatey/bin/zip.exe

2
为什么将7z重命名为zip?7z与zip具有不同的命令行用法。 - Phani Rithvij

6
您可以通过将man <command>映射到<command> --help | less来模拟shell中的一小部分man行为。
不幸的是,在我的机器上,bash别名不会向位置参数添加标志,它会尝试将标志作为命令运行并失败(alias man="$1 --help"无效)。
而一个名为man()的函数是不允许的!
幸运的是,bash函数和别名的组合可以实现这种映射。将下面的代码放在您的~/.bashrc中(如果没有,请创建一个)。不要忘记source ~/.bashrc
# man command workaround: alias can't pass flags, but can't name function man
m() {
    "$1" --help | less
}
alias man="m"

这不会为您提供完整的手册信息,但如果您只需要了解命令及其标志的基本信息,这可能是您所需的全部内容。


有趣的替代方案。+1。虽然 <command> --help 通常只是实际 man <command> 内容的一小部分。 - VonC
创意思维!:-) 不过我的问题并不仅限于man工具。我猜使用bash函数和别名来模拟zip功能更难一些。;-) - halloleo

5

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接