在Git for Windows(Git Bash)中进行包管理?

wz3gfoph  于 2022-11-20  发布在  Git
关注(0)|答案(8)|浏览(174)

我正在阅读git-for-windows的github wiki,上面说msys 2捆绑了pacman:https://github.com/git-for-windows/git/wiki/Package-management
但是当我调用它时,我得到:

$ pacman
bash: pacman: command not found

有人知道发生了什么吗?
这个wiki指的是哪个git版本?
有没有办法在Git for windows中安装额外的软件包到msys 2?

unftdfkk

unftdfkk1#

正如第397期所述:
这是有意的。我们不随Git for Windows一起提供pacman。
如果你对一个完全成熟的包管理器维护的环境感兴趣,你必须给予一试Git for Windows SDK
你在最新的git for Windows(2.5.3)中看到的bash是一个more recent bash than the old msysgit one,它只是用来执行git命令的。
它不是一个成熟的linux环境来安装任何第三方软件包。

警告:评论中的dhj报告

不要使用目录连接将现有的git for windows与msys2主系统链接。
如果您卸载它将决定链接的目录属于它,并删除您的整个主目录,包括子目录,如“下载”。
小心处理msys2。
我不知道git for windows SDK是否也是如此,但是要小心尝试从其他与git for windows集成的系统中获取pacman。

cedebl8k

cedebl8k2#

Git for Windows(https://gitforwindows.org/https://git-scm.com/downloads)有Git Bash,但不包括tree
tree可通过pacman(软件包管理器)获得,但仅当您安装“Git for WindowsSDK”时才可用(滚动到https://gitforwindows.org/底部,其中提供了从https://github.com/git-for-windows/build-extra/releases/latest下载安装程序的链接)
The accepted answer非常有帮助。他们提到git-for-windows并不意味着在默认安装中包含pacman
所以我安装了“Git for Windows SDK”,然后在其bash提示符(SDK-64)中运行以下命令来安装当前的树v1.7.0-1(截至2018年8月30日):

[SDK-64: Bash Terminal for Git for Windows SDK]
pacman -S tree
...
Proceed with installation? [Y/n] Y

在我的系统上,Git for Windows SDK安装在:C:\git-sdk-64,所以从我的Git for Windows Bash shell(它没有安装树),我通过tree.exe将它复制到它的/usr/bin目录,例如:

[MINGW64: Bash Terminal for Git for Windows]
cd /usr/bin
cp /c/git-sdk-64/usr/bin/tree.exe .

现在我可以从两个Git Bash shell运行tree v1.7.0了。
为了让其他人甚至是我自己在未来的机器上更容易,我通过在我的Git for Windows SDK Bash终端中运行以下命令来查看pacman从哪里获得tree包:

$ pacman -S --info tree
Repository      : msys
Name            : tree
Version         : 1.7.0-1
Description     : A directory listing program displaying a depth indented list of files
Architecture    : x86_64
...

这里的关键是pacman从“msys”存储库(仅供参考:尽管它说的是msys,但实际上使用的是msys 2),因此我查看了/etc/pacman.d/mirrorlist.msys,第一个镜像指向http://repo.msys2.org/msys/$arch/
所以下次你想要一个不在Git for Windows中的软件包时,你可以从以下网址下载:http://repo.msys2.org/msys/x86_64/(适用于64位)或http://repo.msys2.org/msys/i686/(适用于32位)
例如,树v1.7.0-1的直接下载链接

仅供参考:Git SCM的Windows下载位于https://git-scm.com/download/,从Git for Windows GitHub下载最新版本(https://github.com/git-for-windows/git来自https://github.com/git-for-windows/git/releases/链接)

9nvpjoqh

9nvpjoqh3#

我不想离开我已经在工作的Git for Windows安装,所以我临时做了一点:
1.在其他位置安装Git for Windows SDK。您需要3 GB以上的可用空间。
1.将${git-sdk}/usr/bin/pacman.exe复制到${git}/usr/bin
1.将${git-sdk}/etc/pacman.conf${git-sdk}/etc/pacman.d复制到${git}/etc
1.将${git-sdk}/var复制到${git}/
现在你可以打开Git Bash并运行pacman -S python来在现有的Git for Windows安装程序上安装包了。
你需要对Git for Windows目录有写权限。另外,你的pacman现在认为它安装了很多软件包(来自SDK),但它并没有阻止我使用它。

s4chpxco

s4chpxco4#

“Git for Windows SDK”是5.33GB相比“Git for Windows”691 MB相比“Portable Git”275 MB.我使用精益和平均便携式Git.一开始,似乎没有希望尝试恢复和使用pacman在后两种风格的Git(msys 2),因为谷歌排除了所有的元数据文件在/var/lib/pacman/local.请阅读以下官方解释:
https://wiki.archlinux.org/index.php/Pacman#.22Failed_to_commit_transaction_.28conflicting_files.29.22_error
如果没有这些元数据文件,你就不知道Google选择的msys 2包的确切集合和版本,如果你强制安装或复制msys 2包的当前版本,你就有可能与Google构建和测试的git二进制文件版本不匹配。
直到我发现了这个文件/etc/package-versions.txt,匹配msys 2软件包和版本的清单。现在github中有一个确定的源代码。下面是我如何在Portable Git中恢复pacman:
步骤1:运行以下命令下载/etc/pacman.conf和3个软件包:pacmanpacman-mirrorsmsys2-keyring。这些都是msys 2切换到zstd之前的.xz包。请看下面我的评论。

curl https://raw.githubusercontent.com/msys2/MSYS2-packages/7858ee9c236402adf569ac7cff6beb1f883ab67c/pacman/pacman.conf -o /etc/pacman.conf
for f in pacman-5.2.2-4-x86_64 pacman-mirrors-20201028-1-any msys2-keyring-1~20201002-1-any; 
 do curl https://repo.msys2.org/msys/x86_64/$f.pkg.tar.xz -o ~/Downloads/$f.pkg.tar.xz;
done

步骤2:在根目录下解压缩它们,然后使用以下命令恢复pacman:

cd /
tar x --xz -vf ~/Downloads/msys2-keyring-1~20201002-1-any.pkg.tar.xz usr
tar x --xz -vf ~/Downloads/pacman-mirrors-20201028-1-any.pkg.tar.xz etc
tar x --xz -vf ~/Downloads/pacman-5.2.2-4-x86_64.pkg.tar.xz usr
mkdir -p /var/lib/pacman
pacman-key --init
pacman-key --populate msys2
pacman -Syu

步骤3:接下来的两个命令恢复所有匹配的元数据。第二个命令是多行的,但仍然可以安全地剪切和粘贴(请耐心等待):

URL=https://github.com/git-for-windows/git-sdk-64/raw/main
cat /etc/package-versions.txt | while read p v; do d=/var/lib/pacman/local/$p-$v;
 mkdir -p $d; echo $d; for f in desc files install mtree; do curl -sSL "$URL$d/$f" -o $d/$f;
 done; done

第四步:现在,要求“make”和“zip”是不是太过分了?

pacman -S make zip

瞧,仍然只是一个337 MB意味着小环境,可以扩展和升级!

oxf4rvwz

oxf4rvwz5#

似乎有一个documented way可以做到这一点,而不必安装Git for Windows SDK(非常大)。当我在GitHub issue #1912上询问这一切时,PhilipOakley给了我这个信息的链接。
以下是Git for Windows GitHub wiki page的最新文本:

安装在MSYS 2内部

请注意,Git for Windows不正式支持此方案

(The不支持此方案原因是没有志愿者支持该方案。)

本指南假设您需要64位版本的Git for Windows。

由于Git for Windows是基于MSYS 2的,因此可以将git包安装到现有的MSYS 2安装中。这意味着如果您的计算机上已经在使用MSYS 2,则可以使用Git for Windows,而无需运行完整的安装程序或使用便携版。
不过要注意的是,这样做需要注意一些问题。Git for Windows为msys2-runtime创建了一些补丁,但这些补丁还没有被发送到上游。(这是计划好的,但在发行版#284中已经确定,这可能不会发生。)这意味着你必须安装Git for Windows自定义的msys2-runtime,才能在MSYS 2中拥有一个完全工作的git。
以下是要采取的步骤:
1.打开一个MSYS 2终端。
1.编辑/etc/pacman.conf并在[mingw32]之前(在我的机器上是第71行)添加git-for-windows包库:
[git-for-windows] Server = https://wingit.blob.core.windows.net/x86-64
以及可选地,还包括用于 * 相反 * 架构的仅MINGW储存库(即,用于64位SDK的MINGW 32):
[git-for-windows-mingw32] Server = https://wingit.blob.core.windows.net/i686
1.授权签名密钥(可能需要偶尔重复此步骤,直到https://github.com/msys2/msys2/issues/62得到修复)
curl -L https://raw.githubusercontent.com/git-for-windows/build-extra/master/git-for-windows-keyring/git-for-windows.gpg | pacman-key --add - && pacman-key --lsign-key 1A9F3986
1.然后同步新存储库
pacboy update
1.这会更新msys2-runtime,因此会要求您关闭窗口(* 而不是 * 退出pacman进程)。不要惊慌,只需关闭所有当前打开的MSYS 2 shell和MSYS 2程序。仔细检查任务管理器并杀死pacman.exe,因为它在窗口关闭后仍在运行,因为它可能会逗留。一旦所有程序都关闭,再启动一个新的终端。
1.然后 * 再次 * 同步(更新软件包的非核心部分):
pacboy update
1.最后安装Git/cURL包:
pacboy sync git:x git-doc-html:x git-doc-man:x git-extra: curl:x
1.最后,检查在MINGW 64 shell中执行git --version是否一切正常,它应该输出类似git version 2.14.1.windows.1(或更新版本)的内容。
@VonC在评论中指出,在https://github.com/git-for-windows/git/issues/2688的讨论进行到一半时,有人讨论了这种方法可能需要的额外步骤。
而现在,一个潜在的新方法来实现所需的结果了:

  • https://github.com/git-for-windows/git/issues/2688#issuecomment-772311418
qlvxas9a

qlvxas9a6#

已在运行Windows 10 x86_64 1909 10.0.18363.752的msys 2 20190524和运行Windows 11 x86_64 21 H2 10.0.22000.434的msys 2 20220128上进行了测试

使用Windows版的常规Git。

1.安装msys2(版本20190524已测试。)或Git for Windows SDK。(未完全测试,但应该可以工作。)两者都包含PacMan和Git。

使用VFS for Git for Windows或Scalar for Git for Windows(又名Microsoft git)。方法#1(有一些限制)

1.安装用于Git的VFS(https://github.com/microsoft/VFSForGit)。
1.安装Microsoft git(https://github.com/microsoft/git),并启用“从命令行和第三方软件安装Git”选项。
1.在msys64\usr\bin\中创建指向C:\Program Files\Git\bin\git.exe的名为“git”的符号链接。
1.克隆新的gvfs存储库。gvfs clone https://dev.azure.com/somebody/_git/somerepo只有gvfs命令不能在msys 2上执行。
1.在msys 2上使用git命令。

使用VFS for Git for Windows或标量for Git for Windows。方法2

建议使用Git的虚拟文件系统(以前是GVFS。官方网站https://vfsforgit.org/)。版本2.22和2.26已经过测试。建议使用标量(官方网站https://github.com/microsoft/scalar),也没有经过完全测试。
1.安装GVFSGit for Windows with GVFS patch。或者在同一台计算机上安装Scalar for GitGit for Windows with Scalar patch不能同时安装。默认安装目标是C:\Program Files\Git
1.将msys 2 x64安装在C:\Program Files\Git以外的位置。默认情况下,它位于C:\msys64中。
1.复制msys 2的文件和子文件夹(/etc和git二进制文件除外。msys 2出厂时不带git。)复制到Git for Windows VFS版本,并将msys 64文件夹中的/etc/pacman.d/etc/pacman.conf复制到Git安装文件夹,覆盖现有文件。它会将msys 2和MinGW运行时更新到最新版本。对于PacMan,所需文件为/usr/bin/pac* ; /etc/pacman.conf ; /etc/pacman.d/ ; /var ; /usr/bin/msys* ;。(未完全测试。)
1.设置终端应用程序。运行C:\Program Files\Git\bin\bash.exe将启动Windows的Git的bash。运行C:\Program Files\Git\usr\bin\bash.exe将启动msys 2的bash。为终端程序配置bash的路径,例如Hyper Terminal。由于Git在系统文件夹中,终端程序应该是以管理员身份运行

  1. Config $PATH GVFS的环境变量。在Git Bash. export PATH=$PATH:/C/Program\ Files/GVFSexport PATH=$PATH:"/C/Program Files/GVFS"中运行此命令。或者在控制面板的系统属性中设置GVFS的环境变量。重新登录才能生效。有时此配置不起作用,但PacMan仍然可以运行。
    1.修正PacMan。为二进制文件设置可执行权限。Fox example. chmod +x /usr/bin/pacman ; pacman-key --init ; pacman-key --populate msys2 ; pacman-key --refresh-keys ; pacman --sync pacman --refresh --sysupgrade --sysupgrade --overwrite "*"。使用选项--overwrite \*,因为一些包是由Git for Windows而不是PacMan安装的。
n9vozmp4

n9vozmp47#

pacman现在使用zstd压缩。所以更新了@michael-chen的场景(我使用wsl的unzstd):

for f in pacman-6.0.1-25-x86_64.pkg.tar.zst pacman-mirrors-20221016-1-any.pkg.tar.zst msys2-keyring-1~20221024-1-any.pkg.tar.zst;   do curl https://repo.msys2.org/msys/x86_64/$f -o ~/Downloads/$f; done
cd /
tar --use-compress-program=unzstd -xvf msys2-keyring-1~20221024-1-any.pkg.tar.zst usr
tar --use-compress-program=unzstd -xvf pacman-mirrors-20221016-1-any.pkg.tar.zst etc
tar --use-compress-program=unzstd -xvf pacman-6.0.1-25-x86_64.pkg.tar.zst usr
mkdir -p /var/lib/pacman
pacman-key --init
pacman-key --populate msys2
pacman -Sy
export URL=https://github.com/git-for-windows/git-sdk-64/raw/main
cat /etc/package-versions.txt | while read p v; do d=/var/lib/pacman/local/$p-$v; mkdir -p $d; echo $d; for f in desc files install mtree; do curl -sSL "$URL$d/$f" -o $d/$f; done; done
qf9go6mv

qf9go6mv8#

从msys 2复制pacman对我来说很有效,最后大多数人忘记了可以使用pacman进行自我更新,如pacman -Syy msys/pacman
1.在msys pacman -Ql pacman中运行
1.复制列出的匹配文件

  • /etc文件/*.conf文件
  • /usr/二进制文件
  • /usr/包含
  • /usr/程式库
  • /var/程式库

1.以及复制数据库

  • /etc/pacman文件系统

1.此时,我已经有了一个工作的pacman,我用pacman -Ss pacman检查它,但有丢失的文件,所以我运行自我刷新pacman -Syy msys/pacman

相关问题