修复 msysGit Portable $HOME 位置

2023-12-05

我已在闪存驱动器上成功安装并配置了 msysGit Portable,并使用它来拉取和推送 GitHub 存储库。然而,我似乎总是不得不拼凑 SSH 支持。

具体来说,为了让 SSH 找到我的密钥文件,我必须遵循这些说明启动第二个实例ssh-agent进而ssh-add我每次运行 git-bash.bat 时的密钥。

使用输出ssh -v [email protected]调试时我看到 msysGit 默认在我的 Windows 用户目录中查找密钥。它不能那样做;我需要它在便携式驱动器上自己的目录中查找。

如何强制 $HOME 成为程序自己的文件夹?

更新损坏的 Vox 链接

指示来自这一页类似于我最初发布的现已损坏的链接。引用如下。还有这里的Vox 原始文章的网络存档.

但是,如果您尝试这样做并得到:

% ssh-add
Could not open a connection to your authentication agent. 

那么您的会话没有在 ssh-agent 下运行。您可以通过运行以下命令在代理下重新启动新 shell 来解决此问题:

exec ssh-agent bash 

您可以在其中将 bash 替换为您选择的 shell。完成此操作后,您应该能够运行 ssh-add 来加载该 shell 的密钥。


用于启动 git bash 的命令是:

C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"

我刚刚在 DOS 会话中尝试了以下操作:

C:\>C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"
VonC@XXX /c/
$ echo $HOME
/c/Users/VonC

默认情况下,$HOME$%HOMEPATH%,但如果我强制使用%HOME%:

set HOME=/another/path

然后启动相同的 bash 会话:

C:\>C:\Windows\SysWOW64\cmd.exe /c ""C:\Prog\Git\1.7.1\bin\sh.exe" --login -i"
VonC@XXX /c/
$ echo $HOME
/another/path

因此,如果您通过脚本将 bash 调用包装起来,将 HOME 设置为:

  • %~dp0:USB 闪存盘上包装程序的路径
  • or %~d1\your\path: with %~d1是驱动器号(如果您的包装器位于 USB 密钥上)

,您应该能够将 HOME 强制设置为您需要的任何值。


注(2011 年 11 月):从那时起,OP dgw写了他的自己的包装器:

git-bash-portable.bat:

@echo off
rem Copyright (C): 2010 Voyagerfan5761
rem http://technobabbl.es/

set USERPROFILE=%~dp0
set HOMEDRIVE=%~d0
set HOMEPATH=%~p0
set HOME=%~dp0
set HISTFILE=%USERPROFILE%.bash_history
rem set BASHRC=%USERPROFILE%.bashrc

git-bash.bat

文章《适用于 Windows 的便携式 Git:设置$HOME允许完全可移植性的环境变量(包括用于 GitHub 的 SSL 密钥和配置)”还添加有用的信息。

但是,如果您将 Git 安装在便携式驱动器上,您将希望您的设置随安装一起移动 - 如果它在其他计算机上可能不存在的文件夹中查找它们,显然它们不会这样做。

因此,我们需要做的是告诉 Portable Git 将其自己文件夹中的特定位置视为主文件夹;这样我们就可以将整个 Git 文件夹复制到任何我们喜欢的地方,并且设置也会随之移动。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

修复 msysGit Portable $HOME 位置 的相关文章

  • 如何记录 ssh 调试信息?

    我需要将 ssh 调试信息的输出写入文件中 这 ssh v email protected cdn cgi l email protection gt result txt ssh v email protected cdn cgi l e
  • git subtree pull -P 不管 总是合并冲突

    问题 即使我没有进行任何更改 每次尝试拉入子树时 我都会遇到合并冲突 我在做什么 In 子树仓库 Make some changes git commit am Changes made git push origin master In
  • Git 无效的修订范围 Symfony2 Composer 外部包

    RuntimeException Failed to execute git log 18efcf67d236d5bbf46ac67820250dffd0474b6e 94e2146f525fa1367e15646fa273e5b34f92
  • 重新打包存储库对于大型二进制文件有用吗?

    我正在尝试将大量历史记录从 Perforce 转换为 Git 并且一个文件夹 现在是 git 分支 包含大量大型二进制文件 我的问题是运行时内存不足git gc aggressive 我的主要问题是重新打包存储库是否可能对大型二进制文件产生
  • 推送时发生 Git 错误 - update_ref 失败

    当我尝试推送本地提交时遇到问题 这可能是在 Android Studio 崩溃时发生的 这是错误 update ref 引用 refs remotes origin master 失败 无法锁定 ref refs remotes origi
  • 分支明显不同,但提交历史是相同的

    git status告诉我我的分支和我在另一个存储库上开始的分支已经分歧 On branch master Your branch and origin master have diverged and have 13 and 13 dif
  • 如何使用交互式变基将提交编辑为未提交?

    我想使用交互式变基来编辑以前的提交 但是当我进入该提交的编辑模式时 所有文件都已提交 我知道我可以进行更改并修改提交 但我希望所有更改最初都未提交 暂存或以其他方式 这样我就可以对其进行编辑 就像在最初提交之前一样 这可能吗 Imagine
  • 远程测试时如何搭建git开发环境

    这似乎是一个愚蠢的问题 但我觉得我对 GIT 相当了解 但我似乎无法按照我的意愿设置我的开发环境 我要么错过了一些非常简单的东西 要么我做错了 我在我的服务器上初始化了一个裸 git 存储库 将其克隆到我的本地计算机 提交我的文件并推送到原
  • git push heroku master 权限被拒绝

    我正在关注 ruby railstutorial 我运行命令 git push heroku master 它吐出了这个错误 Permission denied publickey fatal Could not read from rem
  • git pull,忽略深度,如何不拉取整个历史记录?

    我们有一个巨大的多 GB git 存储库 主要是二进制对象 克隆需要几天时间 实际的主分支 没有历史记录 只有大约 20MB 所以我想 深度为 1 的 git 克隆就是解决办法 然而 现在我需要将某人的更新拉到主服务器 我们没有分支 当我拉
  • 在 github 上的 fork 中跟踪上游的最佳实践

    摘要 对于要维护一组本地更改的上游存储库 处理长期运行跟踪的最佳实践是什么 我想让 github 上的 fork 与上游保持同步 但仍然允许清晰跟踪 fork 特有的更改 对于本次讨论 假设upstream指向主项目存储库并且origin指
  • 如何 git grep 仅一组文件扩展名

    如何执行 git grep 并将检查的文件限制为一组文件 我希望能够 grep cpp 和 h 文件的内容来查找 MyFunc 例如 git grep MyFunc hc 但是 这也匹配 c 文件和 cs 文件 Use git grep M
  • 有谁知道类似于 SVN Time-Lapse View 的 Git 工具 [关闭]

    Closed 这个问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 SVN Time Lapse View 是一个跨平台查看器 可以下载文件的所有修订版本 并允许您通过拖
  • 自动将所有 GitHub 存储库镜像到 gitlab

    对于 GitLab 必须手动为每个存储库设置拉 推镜像 我想知道那里有any way可以自动将所有 Github 存储库同步到 GitLab 这样 当您在 GitHub 中创建新的存储库时 GitLab 中的存储库将自动创建 并充当拉取镜像
  • git 匹配多个单词的标签

    我们可以得到最后一个 git 标签 它以一个单词 例如 TEST 开头 如下所示 git describe tag dirty match TEST 我想知道如何获得最后一个以 word1 开头的标签orword2 例如测试OR跑步 我尝试
  • 格里特:! [远程拒绝] HEAD -> refs/publish/master (没有新的更改)

    我做了一些更改 提交了它们并将分支推送到 Gerrit git push gerrit 现在我的更改没有出现在 Gerrit 中 我认为这是因为我手动推送更改而不是使用git 审查 https github com openstack in
  • git 别名中的 AWK 语句

    我正在尝试创建一个 git 别名来以特定格式打印日志中的所有拉取请求 但是 我在使用 AWK 删除双空格时遇到问题 这是使用以下命令的 git log 的输出 git log merges grep pull request pretty
  • 默认情况下 git merge -Xignore-space-change

    我该如何设置该选项ignore space change对于所有合并使用git config 我也许可以使用别名merge 但因为我希望该设置应用于git stash pop git stash apply git pull and git
  • VS 2015 + Bower:在防火墙后面不起作用

    Problem 在 Visual Studio 2015 中 使用 Bower 我的包在防火墙后面时恢复失败 并出现类似以下内容的错误 ECMDERR 无法执行 git ls remote tags heads git github com
  • 如何克隆特定的 Git 标签

    From git clone 1 手册页 http git scm com docs git clone branch还可以在结果存储库中的该提交处获取标签并分离 HEAD 我试过 git clone branch

随机推荐