windows - Windows 7 中非常基本的 git 批处理

标签 windows git bash

概要

使用 .bat 文件将参数传递给 git bash

通过运行批处理文件以其他方式使用 git。

免责声明

类似问题有很多答案,但在尝试过大部分或全部答案后都失败了,我希望你不要第一眼看到我就给我一个重复的戳记。

我的系统

Windows 7,64 位

git 版本 1.9.4.msysgit.2

挑战

我想合理化我的工作流程,从导航到多个 git 存储库并运行 git statusgit add --all 等,到简单地运行一个批处理。

其他帖子肯定表明这是可能的。我认为他们中的大多数人使用 Unix,但是 this one至少让我在 Windows 上运行起来,这样我就可以测试它了。但是,在将命令传递给 git bash 时,我遇到了与该帖子中的 OP 相同的问题,对于像我这样的初学者来说,使用@Erik 的建议似乎有点复杂如果您想在工作流程中包含更多命令,请发布。

按照@inf3rno 在同一篇文章中的建议,我似乎可以更改文件夹但无法使用这样的 git 命令:

set bash=C:\Program Files (x86)\Git\bin\bash.exe
"%bash%" --login -i -c "exec "%1""
cd c:\repos\research
git status
pause

有没有人建议我如何更改上面的代码以使其正常工作?

顺便说一句,其他帖子(如 this one)中的 #!bin\bash 是怎么回事? ?我以为我必须使用 #!Program Files (x86)\Git\bin\bash,但我也没有运气......

无论如何,感谢您的任何建议!

最佳答案

首先,卸载 git 1.9.4(msygit,现已过时):git-for-windows将提供 much recent bash (2013 vs. 2005) .

解压即可PortableGit-2.6.1-64-bit.7z.exe在任何你想要的地方,将 C:\path\PortableGit-2.6.1-64-bit\bin 添加到你的 %PATH% 就可以了。

第二,inf3rno's answer是关于执行任何 bash 脚本("%bash%"--login -i -c "exec "%1"":%1 是要执行的 bash 脚本的路径/名称)

在你的 bash 脚本中使用的正确 shebang 应该是#!/bin/bash(参见“What is the preferred Bash shebang?”)

对于最新的 git 2.6,这将是:

c:\prgs\git\PortableGit-2.6.1-64-bit\bin\bash.exe --login -i -c "exec ./myscript"

因为该文件夹应该在您的 %PATH% 中:

bash --login -i -c "exec ./myscript"

myscript 是一个使用 Unix 风格的 eol (LF) 而不是 Windows 风格 (CRLF) 的文件

另请注意,任何名为 git-myscript 的 bash 脚本(甚至在 Windows 上)都可以直接调用:

git myscript

我在 2012 年在“Running a batch file in git shell”中描述了另一种执行 git 命令的方法。
但是对于纯 bash 脚本,您需要使用 bash --login -i -c "exec ./myscript"

要编写具有 unix eol 风格的 bash 脚本,您可以从 Notepad++ 中选择各种编辑器。 , SublimeText 3Atom.io .

关于windows - Windows 7 中非常基本的 git 批处理,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32998906/

相关文章:

javascript - onsubmit不调用chrome中的js函数而是直接提交表单

windows - mapred.JobClient : Error reading task output http:. .. 在 Windows 操作系统上从 Cygwin 运行 hadoop 时

windows - InnoSetup - HKEY_LOCAL_MACHINE 的值怎么加?

git - 为什么git clone改变文件权限

bash - shell 中的 float 比较

windows - 在窗口调整大小时调整 Powershell 屏幕缓冲区的大小

没有互联网的远程主机上的 git 更新/补丁

git - 如何使用 PowerShell 在 Azure DevOps 管道中运行 git Push?

apache - 自动重启 Apache 的 bash 脚本

linux - 使用 Sed 将旧时间戳替换为当前时间戳