如何将 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 工具 - 从 awkzcat。但是我错过了 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

以下是您可以遵循的步骤。

  1. 进入以下link https://sourceforge.net/projects/gnuwin32/files/

  2. 找出你遗漏的任何命令 这里我需要 zip 和 bzip2 作为 zip 命令。因为zip命令依赖于bzip2.dll到运行。否则你会得到错误“加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录”。

  3. 解压下载的文件 在这里,我在 bin 文件夹中为“zip.exe”下载“zip-3.0-bin.zip”,为“bzip2.dll”下载“bzip2-1.0.5-bin.zip”。 /bin/.exe

  4. 将命令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 如下:

  1. 在 windows 上安装 7-zip。
  2. 将 7-zip 文件夹 (C:\Program Files-Zip) 添加到 PATH
    gitbash exp: export PATH=$PATH:"C:\Program Files-Zip" (临时)
    在 Windows 上,添加 PATH 如下图 (permanent)

  1. 7z.exe 的副本复制为 zip.exe
  2. 重新打开 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

  1. Navigate to this sourceforge page
  2. 下载zip-3.0-bin.zip
  3. 在压缩文件中,在 bin 文件夹中,找到文件 zip.exe
  4. 将文件 zip.exe 解压到您的 mingw64 bin 文件夹(对我来说:C:\Program Files\Git\mingw64\bin
  5. Navigate to to this sourceforge page
  6. 下载bzip2-1.0.5-bin.zip
  7. 在压缩文件中,在 bin 文件夹中,找到文件 bzip2.dll
  8. 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.exevoila

$ 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

完成! :)