windows 10上 portableGit 的用户目录修改与 ssh 非默认设置

portableGit 配置在 win10 上默认保存在 C:/Users/[User]下。存在以下问题:1. 在 windows 的用户目录下会同时存在 linux 与 windows 的文件,杂乱无章;2. 不符合 portable 属性,不能做到任意副本直接复制后的配置完全相同。

我的解决方案如下:

修改用户目录

这里 给出了修改环境变量的方法,个人不推荐,这需要改变系统配置,也不满足 portable 的要求。考虑到 windows 的环境变量应该是共享到 git 所在的 msys 环境中的,可以直接在 msys 的 shell 启动脚本中定义 HOME 变量。以下几个方案都是可以的

推荐方案

在 shell 的全局加载脚本中定义 HOME 变量,git shell 的全局脚本为 $安装目录$/etc/bash.bashrc。在末尾追加:

#  user add 231215
export HOME=/home/[username]
# the home directory is in gitdir/home/[username]
# your need create the folder first

一旦完成,你就可以在重新定义的 HOME 目录下建立一个 .bashrc 文件作为运行 git bash 的用户启动脚本。

基于以上设置,我使用 conemu 作为运行 git 的默认终端,具体的配置为:

  1. 在conemu 的设置菜单中新建名为 Bash::Git 的任务,将该任务指定为启动任务。任务设置中的命令组如下(cmd 命令):
set "STARTUP_CMD=echo 'Portable Git Bash' && echo 'config file is /d/Portable/PortableGit/home/[username]/.bashrc'" && D:\Portable\PortableGit\bin\sh.exe --login -i
  1. 在 HOME 目录下建立一个 .bashrc 文件,其中添加以下内容:
# user add 231214
cd /e/
clear
[[ $STARTUP_CMD ]] && {
  declare +x STARTUP_CMD
  eval "$STARTUP_CMD"
  unset STARTUP_CMD
}

以上就完成了用户目录的重定义以及 conemu 中启动 git bash 的设置。

简化的方案

此外,也有一种讨巧的方法设置 HOME 目录。就是不在 bash.bashrc 中指定,而是在 conemu 中设置启动任务时指定。这是可以的,但我不推荐,因为不能做到所有设置完全在 git 内部设置完成,一旦单独复制出 git 目录,HOME 目录的设置就不起作用了。这种方式只需要在 conemu 的启动命令组中增加一个定义 HOME 变量的 cmd 命令:

set "HOME=D:\Portable\PortableGit\home\[username]" &&  set "STARTUP_CMD=echo 'Portable Git Bash' && echo 'config file is /d/Portable/PortableGit/home/[username]/.bashrc'" && D:\Portable\PortableGit\bin\sh.exe --login -i

可行但不推荐的方案

最后也可以在 etc/profile 文件中加入HOME 变量的定义来代替在 bash.bashrc 中定义:

HOME=/d/Portable/PortableGit/home/[username]

windows 下 git ssh 的目录修改以及多 ssh key 设置

ssh 的密钥对与配置文件默认在 C:/Users/[username]/.ssh 目录下,同样不利于前面提到的对 git 便携要求。而且 windows 上的 git bash 中的 ssh 命令就是调用 windows 系统本身的 ssh 命令,这会导致即使更改了 git 的 HOME 目录,git 中 ssh 命令的目录并不会更改,两者之间不是同步的。更改 ssh 目录比较麻烦。可以这样做。

  1. ssh-keygen -t rsa -C "[xxx@xxx.com](mailto:xxx@xxx.com)"命令生成密钥对时,在交互时指定存储位置为 [HOME]/.ssh/id_rsa

  2. 测试时,使用 ssh -i [HOME]/.ssh/id_rsa -T [git@github.com](mailto:git@github.com) ,即使用 -i 参数显示指定私钥的路径。

  3. ssh 的默认目录是 C:/Users/[username]/.ssh,但是可以用 -i 参数以及 -F 参数显式指定私钥以及配置文件来保证 ssh 对相关文件的正确访问。显然为了实现便携的目标,ssh 目录下不存在任何文件,因此不能通过 ssh 配置实现上述目的。不过 git bash 的确提供了解决方案。git bash 中可以设置 GIT_SSH_COMMAND 环境变量或者通过修改 core.sshCommand 变量来改变 ssh 的默认行为。考虑持久化优先选择定义 core.sshCommand 的方式。两种方法如下(主要参考这里 的方案):

GIT_SSH_COMMAND="ssh -i ~/.ssh/id_rsa_example -F /dev/null" git subcommand
git config --global core.sshCommand "ssh -i ~/.ssh/id_rsa_example -F ~/.ssh/config"

后续对 ssh 的进一步配置,就可以在 ~/.ssh/config 文件中定义了。

参考链接:

https://www.cnblogs.com/chenxiaomeng/p/15050139.html

https://stackoverflow.org.cn/questions/18702660

https://www.cnblogs.com/chenkeyu/p/10440798.html