python如何使用gitbash执行git命令

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python如何使用gitbash执行git命令相关的知识,希望对你有一定的参考价值。

python脚本,在window下执行git命令

下面是一种解决方案

1 把gitbash 的路径放到系统的Path环境变量里 我的是 C:\\Program Files (x86)\\Git\\bin

2 这时候 你在系统命令行里就可以用git了

3 在python里倒入 os 模块 然后执行

os.system('git') 就可以了

C:\\Users\\Administrator>python
Python 2.7.8 (default, Jun 30 2014, 16:08:48) [MSC v.1500 64 bit (AMD64)] on win3
Type "help", "copyright", "credits" or "license" for more information.
>>> import os
>>> os.system('git')
usage: git [--version] [--help] [-C <path>] [-c name=value]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p|--paginate|--no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

The most commonly used git commands are:
   add        Add file contents to the index
   bisect     Find by binary search the change that introduced a bug
   branch     List, create, or delete branches
   checkout   Checkout a branch or paths to the working tree
   clone      Clone a repository into a new directory
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   fetch      Download objects and refs from another repository
   grep       Print lines matching a pattern
   init       Create an empty Git repository or reinitialize an existing one
   log        Show commit logs
   merge      Join two or more development histories together
   mv         Move or rename a file, a directory, or a symlink
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects
   rebase     Forward-port local commits to the updated upstream head
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index
   show       Show various types of objects
   status     Show the working tree status
   tag        Create, list, delete or verify a tag object signed with GPG

'git help -a' and 'git help -g' lists available subcommands and some
concept guides. See 'git help <command>' or 'git help <concept>'
to read about a specific subcommand or concept.
1
>>>

参考技术A

代码如下:

#!/usr/bin/env python# -*- coding: utf-8 -*-# 

@name   : find_t.py# @author : cat# 

@date   : 2017/8/2.import osimport timedef bash_shell(bash_command):
"""
python 中执行 bash 命令     :param bash_command:
:return: bash 命令执行后的控制台输出
"""
try:       

return os.popen(bash_command).read().strip()    

except:        return Nonedef find_target(target_path="./../", key='.git'):
"""

查找目标目录所在的目录 : 如 

/aa/bb/.git --> return /aa/bb/
:param target_path:
:param key: target
:return:
"""
walk = os.walk(target_path)    

for super_dir, dir_names, file_names in walk:        

for dir_name in dir_names:            

if dir_name == key:

dir_full_path = os.path.join(super_dir, dir_name)                

# print(dir_full_path, super_dir, dir_name, sep=" ## ")

yield super_dirif __name__ == '__main__':

print("start execute bash ...........")

st = time.time()
cwd = os.getcwd()    

# this for repo
f

or repo_path in find_target(os.getcwd(), key='.repo'):

os.chdir(repo_path)       

if repo_path == os.getcwd():

print('find repo in -->', repo_path)

print(bash_shell('pwd'))

print(bash_shell('repo forall -c git config core.fileMode false --replace-all'))        

else:

print('error in chdir 2 '.format(repo_path))        

if os.getcwd() != cwd:

os.chdir(cwd)       

if os.getcwd() != cwd:

print('change 2 cwd FAIL !!!  '.format(cwd))    

# this for git

for git_path in find_target(os.getcwd(), key='.git'):

os.chdir(git_path)       

if git_path == os.getcwd():

print('find git in -->', git_path)

print(bash_shell('pwd'))

print(bash_shell('git config --global core.filemode false'))        

else:

print('error in chdir 2 '.format(git_path))        

if os.getcwd() != cwd:

os.chdir(cwd)       

if os.getcwd() != cwd:

print('change 2 cwd FAIL !!!  '.format(cwd))

et = time.time()

print('\\n\\n    

#### execute finished in :.3f seconds ####'.format(et - st))

print('\\n')    # test for bash_command
# print(bash_shell('git init'))

# print(bash_shell('ls -al'))

如何从 Windows 命令行启动 Git Bash?

【中文标题】如何从 Windows 命令行启动 Git Bash?【英文标题】:How To Launch Git Bash from Windows Command Line? 【发布时间】:2013-06-22 13:59:51 【问题描述】:

我希望是一个简单的问题,但我还没有找到答案。我想从 Windows 批处理文件启动 Git Bash。到目前为止,这是我尝试过的:

    从 Win 7 开始按钮启动 Git Bash

    使用 CTRL+ALT+DEL 将进程标识为“sh.exe”

    使用启动命令从批处理文件启动 sh.exe

     start sh.exe
    

但是,这不会启动完整的 Git Bash 环境。 Git Bash 通常在标题栏中有“MINGW32”,但 sh.exe 有一个完整的路径...Git\bin\sh.exe。我觉得有一些我可能不知道的覆盖或依赖项,也需要加载(拉入?导入?)。

这是我通过搜索网络找到的最佳结果之一,但它对我来说并不完全有意义,我不确定它是否完全适用于我的情况:

Running git from Windows Cmd line: Where are key files?

我是 Windows 批处理脚本领域的初学者。

【问题讨论】:

嗯,它实际上不是 DOS 命令行,除非: (a) 您遇到了某种时间异常并且使用的是 Windows 9x/ME,其中command.com是操作系统中包含的唯一 shell (b) 您在 32 位 NT 系统上,并且您自己调用了command.com,或者是一个旧程序为您完成了它。请参阅What is the difference between CMD and Command prompt in windows? 了解更多信息。 对于batch 文件,这对我有用:start "" "%PROGRAMFILES%\Git\git-bash.exe" --cd-to-home 【参考方案1】:

如果您想从批处理文件启动:

x86

start "" "%SYSTEMDRIVE%\Program Files (x86)\Git\bin\sh.exe" --login

x64

start "" "%PROGRAMFILES%\Git\bin\sh.exe" --login

【讨论】:

谢谢@Endoro!尽管@Klas Mellbourn 的答案对于Powershell 是正确的,但您的答案更正确,因为我是从DOS 批处理文件运行的。添加“start”指令会导致程序异步执行,这正是我所需要的!竖起大拇指! 从批处理文件中打开 Git 批处理窗口后,有没有办法在 Git 批处理窗口中键入和执行命令? @OviC 你确定你的编辑是正确的吗? “Program Files (x86)”只存在于 x64 架构下,适用于 32 位程序。 @Drunix 你是对的,x86 系统中没有“Program Files (x86)\”路径。我做了一个回滚。谢谢。 没有安装在系统盘怎么办?如果没有安装在程序文件中怎么办?【参考方案2】:

我不确定你所说的“完整的 Git Bash 环境”是什么意思,但如果我这样做了,我会得到很好的提示

"C:\Program Files\Git\bin\sh.exe" --login

在 PowerShell 中

& 'C:\Program Files\Git\bin\sh.exe' --login

The --login switch 使 shell 执行登录 shell startup files。

【讨论】:

感谢@Klas Mellbourn。您的回答对 Powershell 有好处,但是如果没有像 Endoro 的回答那样添加“start”指令,它会暂停下一个程序的执行,直到退出 shell,这不是所需的行为,否则我会投票给你。 我使用 Console2 到窗口 cmd,这会导致奇怪的行为。我把它放在一个 .bat 文件中,现在一切正常:@"%SYSTEMDRIVE%\Program Files\Git\bin\bash.exe" --login 这也适用于 Windows Docker 容器中,谢谢【参考方案3】:

我更喜欢使用 git-bash.exe 而不是 sh.exe。

start "" "%ProgramFiles%\Git\git-bash.exe" -c "tail -f /c/Windows/win.ini"

最后调用/usr/bin/bash --login -i可以停止关闭窗口;

start "" "%ProgramFiles%\Git\git-bash.exe" -c "echo 1 && echo 2 && /usr/bin/bash --login -i"

注意:我不确定这是不是一个好方法 :)

【讨论】:

不错的答案,但 git-bash 窗口会立即关闭。你知道如何在命令执行完成后禁用自动关闭吗? @Mark 谢谢马克。我在上面的答案中添加了一个示例。不幸的是,我不确定我们应该如何以正确的方式做到这一点,因为我不是 Windows 人 :) [code] start "" "%ProgramFiles%\Git\git-bash.exe" [/code] 很好用! @PauAI 2018 now...我从管理员命令行尝试了start "" "%ProgramFiles%\Git\git-bash.exe",尽管它在新窗口中打开了Git Bash,但键入ls之类的简单命令会导致没有输出.这种方法似乎不允许执行 linux 命令。 ... 编辑:工作,只是花了很长时间(2 分钟)来运行 ls。然后 ls 在不到 1 秒的时间内再次运行。 ......很奇怪。【参考方案4】:

我更喜欢,将 git 放入环境变量中,然后调用

c:\Users\[myname]>sh
or 
c:\Users\[myname]>bash

创建环境变量的步骤(Win7)

在桌面上,右键单击计算机图标。 从上下文菜单中选择属性。 点击高级系统设置链接。 单击环境变量。

在用户变量部分,点击新建按钮,将变量名称设置为GIT_HOME,值设置为 (folder-where-you-installed-git)。

对我来说是c:\tools\git,其他人可能有C:\Program Files\Git

找到PATH 环境变量并选择它。单击编辑。 (如果PATH环境变量不存在,点击新建)。

在编辑窗口中,添加新值%GIT_HOME%%GIT_HOME%\bin。单击确定。单击“确定”关闭所有剩余的窗口。 [确保关闭要用于 git 的 CMD] 打开new命令提示符,然后输入shbashgit-bash

【讨论】:

谢谢!我能够以C:\Program Files\Git 使用GIT_HOME,并从CMD 输入git-bash。此外,奇怪的是,虽然您只需键入 PATH 即可查看其内容,但要查看此 git 自定义变量的内容,您必须键入 echo %GIT_HOME% 谢谢,这是一个很好的补充。除此之外,当您拥有 GIT_HOME 变量并使用 git-bash 命令(或 git-cmd )时,它将在新窗口中打开它。如果您添加到“PATH”环境变量,它将在该现有窗口中切换。您也可以键入exit 以“注销” git bash 并仍然保留 DOS 提示符。【参考方案5】:

你可以将git路径添加到环境变量中

对于 x86

%SYSTEMDRIVE%\Program Files (x86)\Git\bin\

对于 x64

%PROGRAMFILES%\Git\bin\

打开cmd,写这个命令打开git bash

sh --login

bash --login

sh

bash

您可以查看此 GIF 图片了解更多详情:

https://media1.giphy.com/media/WSxbZkPFY490wk3abN/giphy.gif

【讨论】:

【参考方案6】:
start "" "%SYSTEMDRIVE%\Program Files (x86)\Git\bin\sh.exe" --login -i

Git bash 将打开。

【讨论】:

【参考方案7】:

https://***.com/a/33368029/15789

我已经在这里发布了答案。

打开一个 Windows 命令窗口,并执行此脚本。如果您的工作目录发生变化,它将在您的工作目录中打开一个 bash 终端,并显示当前的 git 状态。它通过调用 exec bash 保持 bash 窗口打开。

如果您有多个项目,您可以使用不同的项目文件夹创建此脚本的副本,并从主批处理脚本中调用它。

【讨论】:

【参考方案8】:

我使用上述信息来帮助创建更持久的解决方案。以下将创建可用于打开 Git Bash 的别名 sh:

echo @start "" "%PROGRAMFILES%\Git\bin\sh.exe" --login > %systemroot%\sh.bat

【讨论】:

感谢 dpate!我将您的 echo 语句粘贴到命令行并运行 sh 并启动了一个 git-bash 窗口,我能够完美地运行命令。可以在您的答案中添加一些细节来解释这是如何工作的吗?我宁愿学习钓鱼是如何工作的,也不愿有人给我一条鱼,我认为这将有助于其他人寻找一个好的答案。谢谢【参考方案9】:

Endoro 的答案已经过时了,我无法发表评论;

# if you want to launch from a batch file or the command line:

start "" "%ProgramFiles%\Git\bin\sh.exe" --login

【讨论】:

以上是关于python如何使用gitbash执行git命令的主要内容,如果未能解决你的问题,请参考以下文章

如何在mac上装gitbash

如何检测 Python 是不是在 Git Bash 终端或 Windows cmd 中运行?

15-Git使用语法

如何用命令将git bash更新到最新版本

git bash怎么执行node命令

如何用git bash把代码传到git上?