如何在 Windows 上将 man 和 zip 添加到“git bash”安装中
Posted
技术标签:
【中文标题】如何在 Windows 上将 man 和 zip 添加到“git bash”安装中【英文标题】:How to add man and zip to "git bash" installation on Windows 【发布时间】:2016-12-11 11:55:41 【问题描述】:我在 Windows 上使用 git bash
- 即通过集成的 bash
用于 Windows 的 git
。显然它使用了MINGW
/MSYS
基础。 (@VonC 更新:现在是 uses msys2,自 2015 年第四季度以来 msysgit is obsolete。)
所以已经安装了很多 MSYS
工具 - 从 awk
到 zcat
。但是我想念man
命令和zip
将多个文件压缩成一个zip 文件(unzip
存在!)。
我可以从哪里安装它们?我不想安装另一个MINGW
系统!有什么方法可以在git bash
安装中添加一些预编译工具?
【问题讨论】:
【参考方案1】:2016:可以从GoW (Gnu On Windows) 安装zip
命令。未提供man
(太大)。
需要注意的是,如果您只想从 GoW 添加zip
命令,仍然需要下载并安装整个 GoW 系统。然后您可以从bin
目录中删除其他命令,但请确保将所需的dll 保留在该目录中。
2021 年更新:tar/zip 默认安装在 Windows 10 上。 下面提供了基于 7-zip 的解决方案。
【讨论】:
感谢您对msys2
的澄清。
不确定是否要安装 GoW - 这会复制大多数已经存在的命令。所以也许最好从 msys2 本身重新开始,然后添加git
、zip
和man
到它...
你可以只提取你需要的zip.exe。
我有一台受控的笔记本电脑,无法将内容安装到典型目录中。我可以将“zip”放在我的路径中,但是 DLL 呢?
@AsGoodAsItGets 我同意。我已经编辑了这个(旧的)答案来表达这么多。【参考方案2】:
7-zip可以添加到gitbash
,如下:
-
在 Windows 上安装 7-zip。
将 7-zip 文件夹 (
C:\Program Files\7-Zip
) 添加到 PATH
在gitbash
exp:export PATH=$PATH:"C:\Program Files\7-Zip"
(临时)
在 Windows 上,添加 PATH
如下图所示(永久)
-
将
7z.exe
的副本复制为zip.exe
再次重新打开gitbash
。完成!
这样,它可以在我的笔记本电脑上运行。
如果您跳过第 3 步。您仍然可以将 zip 命令调用为 7z
而不是 zip
结论:Gitbash
是基于 windows Path
运行的,我认为你可以运行你添加到 windows PATH
的任何命令。
【讨论】:
这对我有用,但没有发现第 3 步的需要,我改用7z
命令。示例:7z a -r zipped_filename.zip *
@linuxeasy 我记得以前从未这样做过。
谢谢@nokieng。第 3 步是我在寻找在 Windows 上安装 Sdkman 的特定需求。
太棒了.. 这是一个简单、简单且有效的技巧,不仅效果很好,而且节省了很多时间:) 谢谢。我也遇到了同样的情况,现在可以安装 sdkman 了。
这对我有用,让我不必在 gitbash 上安装 zip,由于某些莫名其妙的原因没有包管理器【参考方案3】:
这是另一组稍有不同的说明,用于在 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
)
【讨论】:
这就像魔术一样 - 让我无法理解为什么它需要 bzip2.dll 文件。 这成功了!一定要复制bzip2.dll
而不是bzip2.zip
,就像我尝试过的那样,它不起作用。
感谢您的快速提示。我最近填满了系统盘,试图安装大包,系统管理员寄给我。我需要一个小后门方法来完成今天的工作,而这只是门票。【参考方案4】:
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 "$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
【讨论】:
对于cp
命令:更喜欢使用-a
选项而不是-r
选项。 “所有人”使用 -r
选项,而“所有人”想要 -a
行为...【参考方案5】:
我很高兴分享我在这个问题上的经验,自从我第一次使用 Groovy 以来,我已经两年不知道了。我的方法需要在 Windows 操作系统中安装 git
for Windows。
这些步骤用于安装7z
命令行实用程序,其行为与zip
略有不同:
/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不支持像-j
这样的所有cmd开关【参考方案6】:
我使用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】:您可以通过将man <command>
映射到<command> --help | less
来模仿shell 中的一小部分人行为
不幸的是,在我的机器上,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>
内容的一小部分
创意思维! :-) 我的问题不只是关于man
工具。而且我猜想zip
功能更难用 bash 函数和别名来模拟。 ;-)【参考方案8】:
您可以从http://gnuwin32.sourceforge.net/packages.html 安装单独的 GNU 工具,例如 zip
。
然后在您的启动脚本中添加"/c/Program Files (x86)/GnuWin32/bin"
到PATH
,如.profile
、.bash_profile
、.bashrc
等。
【讨论】:
【参考方案9】:您可以按照以下步骤操作。
转到以下链接 https://sourceforge.net/projects/gnuwin32/files/
找出您缺少的任何命令 在这里,我需要 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。
参考链接 https://ranxing.wordpress.com/2016/12/13/add-zip-into-git-bash-on-windows/
【讨论】:
【参考方案10】:ln -s /mingw64/bin/ziptool.exe /usr/bin/zip
【讨论】:
【参考方案11】:在msys2中,我通过安装man-db恢复了git help <command>
的功能:
|prompt> pacman -Syu man-db
|prompt> git help archive
对于 zip 功能,我也使用 git archive
(类似于 yukihane 的回答)。
【讨论】:
【参考方案12】:这是另一个我没有注意到的 7-Zip 选项:
创建一个名为zip的脚本:
$ vi ~/bin/zip
参考 7z 指定 add 命令后跟 args:
#!/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)
【讨论】:
【参考方案13】:尽管关于man
这个问题已经得到了相当彻底的回答,但这里还没有突出显示另一种压缩方法。 @Zartc 让我注意到 内置了一个 zip 压缩实用程序:ziptool
。然而,在尝试使用它时,我发现它远非直接替换,您需要指定每个单独的文件和文件夹。所以我深入研究文档并进行试验,直到我有一个 bash 函数,它可以完成所有繁重的工作,并且可以非常类似于基本的 zip -qrf name *
压缩调用:
zipWithZiptool()
# Docs: https://libzip.org/documentation/ziptool.html
targetFilePath="$1"
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" *
【讨论】:
这是个好主意。但是,我在我的机器上收到“Git/mingw64/bin/ziptool.exe:加载共享库时出错:?:无法打开共享对象文件:没有这样的文件或目录” @MikaëlMayer 这似乎在这里的几个系统上运行没有问题,所以它可能是一个本地问题。也许这有帮助? github.com/msys2/MINGW-packages/issues/4588【参考方案14】:在 Windows 上,您可以使用 tar 代替 zip。
tar -a -c -f output.zip myfile.txt
与,
zip output.zip myfile.txt
无需安装任何外部压缩工具。
【讨论】:
超级创意,非常聪明。这行得通。【参考方案15】:在 Windows 上安装 SDKMAN 的步骤
以管理员权限运行 Windows 终端。在里面打开 git bash。 (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
完成! :)
【讨论】:
【参考方案16】:关于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>files...</em>
但是它不适用于目录。无需安装任何东西,因为perl
和所有必需的模块都已经存在于 Git for Windows 安装中。
关于man
,至少对于git
,有一个像这样调用的文档:
git <em>option</em> --help
它将在您的默认浏览器中打开。
【讨论】:
【参考方案17】:如果你也愿意安装 CygWin,你可以将 CygWin 路径添加到你的 GitBash 路径中,如果 zip 在那里,它就可以工作。例如添加
PATH=$PATH:/c/cygwin/bin
export PATH
到您的.bashrc
;注意:我会把它放在路径的结束,而不是开始。
由于 CygWin 具有基于 UI 的安装程序,因此可以轻松添加或删除 zip 或 man 等应用程序。
你可以通过说来找出每个窗口的路径
`cygpath -w /bin`
在每个相应的外壳中。
【讨论】:
嗯,我选择 GitBash/MSYS 路径的全部原因是为了避免 Cygwin 的安装程序驱动方法。 - 如果我可以通过 zip 文件或类似文件安装 Cygwin(远离安装程序内下载),这是我的第一选择! 让我猜猜...使用 Linux,您可以运行 Slackware :^)【参考方案18】:这是我的经验,我无法在笔记本电脑中运行和 exe 或 .msi 文件。所以从https://github.com/bmatzelle/gow/wiki 下载文件> 立即下载并下载源代码(Zip)并将此文件解压缩到文件夹中并使用文件夹名称更新路径变量。 这对我有用。
【讨论】:
以上是关于如何在 Windows 上将 man 和 zip 添加到“git bash”安装中的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Windows 上将现有密钥添加到 openssh?
如何在 Windows 上将 NPM 升级到特定版本 6.4.1?
如何在 Windows 上将 docker nginx 与 express 和 react 应用程序连接起来
如何在 Windows 上将 std::filesystem 与 mingw32-make 和 msys2 一起使用