如何强制 Git for Windows 的 bash-shell 不将路径字符串转换为 Windows 路径?

Posted

技术标签:

【中文标题】如何强制 Git for Windows 的 bash-shell 不将路径字符串转换为 Windows 路径?【英文标题】:How to force Git for Windows' bash-shell to not convert path-string to windows path? 【发布时间】:2019-03-27 10:29:32 【问题描述】:

我正在使用 Git for Windows 为 Windows 的 Docker 工具箱提供的 bash shell。我想将表示 unix 路径的字符串导出到环境变量,然后在 docker 容器中使用。比如:

export MY_VAR=/my/path; docker-compose up

问题是在我的容器中,变量将类似于:

echo $MY_VAR # prints c:/Program Files/Git/my/path

所以看起来 shell(我的猜测)将字符串识别为路径并将其转换为 windows 格式。有没有办法阻止这种情况?

我尝试使用MSYS_NO_PATHCONV=1:

MSYS_NO_PATHCONV=1; export LOG_PATH=/my/path; docker-compose up

但是没有任何效果。

我认为这不是我的 docker-compose 和 dockerfile 的问题,但如果有人感兴趣,我会附上它们。

我的Dockerfile

FROM node:8-slim
RUN mkdir /test \
    && chown node:node /test
USER node
ENTRYPOINT [ "/bin/bash" ]

我的docker-compose.yml

version: '2'
services:
  test:
    build:
      context: .
    image: test
    environment:
      - MY_VAR
    volumes:
      - $MY_VAR:/test
    command: -c 'sleep 100000'

这里的最终目标是使主机上的目录可以从 docker 容器访问(用于日志等)。该目录应由环境变量设置。在docker-compose.yml 中设置目录确实有效,只是不适用于我的用例。

【问题讨论】:

可能是重复的:***.com/questions/34647591/… 或者这个:***.com/questions/7250130/… 【参考方案1】:

似乎一种解决方法是从字符串中删除第一个 / 并将其添加到 docker-compose.yml 中。

docker-compose.yml:

version: '2'
services:
  test:
    build:
      context: .
    image: test
    environment:
      - MY_VAR
    volumes:
      - /$MY_VAR:/test # added '/' to the beginning of the line
    command: -c 'sleep 100000'

然后使用以下命令启动容器:

export MY_VAR=my/path; docker-compose up  # removed the '/' from the beginning of the path.

这看起来更像是一个“幸运”的解决方法,而不是一个完美的解决方案,因为当我将在其他系统上构建它时,我必须提醒自己删除 /。可行但有点烦人。也许有人有更好的主意。

【讨论】:

以上是关于如何强制 Git for Windows 的 bash-shell 不将路径字符串转换为 Windows 路径?的主要内容,如果未能解决你的问题,请参考以下文章

windows下通过代理强制sourcetree git ssh

如何配置git for windows

如何卸载 git-for-windows 并在新位置重新安装?

Windows 10 上的 Git 如何清除密码? Git Credential Manager for Windows

如何使用git for windows上传文件到git仓库

如何使用git for windows上传文件到git仓库