繁体   English   中英

git 命令在子进程运行时返回错误,但在正常运行时不返回

[英]git command returns an error when run with subprocess but not when run normally

我正在尝试获取此命令的 output: git diff-tree --name-status {old_sha} {new_sha} (显示哈希之间的提交名称)

运行该命令通常会返回预期结果。 这是我在 python 中尝试过的:

new_commits = subprocess.run(["git", "diff-tree", "--name-status", old_sha, new_sha], capture_output=True).stdout.decode()

new_commits = subprocess.getoutput(["git", "diff-tree", "--name-status", old_sha, new_sha])

它们都在 python shell 中工作,并且都返回 git 使用消息:

usage: git [--version] [--help] [-C <path>] [-c <name>=<value>]
           [--exec-path[=<path>]] [--html-path] [--man-path] [--info-path]
           [-p | --paginate | -P | --no-pager] [--no-replace-objects] [--bare]
           [--git-dir=<path>] [--work-tree=<path>] [--namespace=<name>]
           <command> [<args>]

These are common Git commands used in various situations:

start a working area (see also: git help tutorial)
   clone      Clone a repository into a new directory
   init       Create an empty Git repository or reinitialize an existing one

work on the current change (see also: git help everyday)
   add        Add file contents to the index
   mv         Move or rename a file, a directory, or a symlink
   reset      Reset current HEAD to the specified state
   rm         Remove files from the working tree and from the index

examine the history and state (see also: git help revisions)
   bisect     Use binary search to find the commit that introduced a bug
   grep       Print lines matching a pattern
   log        Show commit logs
   show       Show various types of objects
   status     Show the working tree status

grow, mark and tweak your common history
   branch     List, create, or delete branches
   checkout    Switch branches or restore working tree files
   commit     Record changes to the repository
   diff       Show changes between commits, commit and working tree, etc
   merge      Join two or more development histories together
   rebase     Reapply commits on top of another base tip
   tag        Create, list, delete or verify a tag object signed with GPG

collaborate (see also: git help workflows)
   fetch      Download objects and refs from another repository
   pull       Fetch from and integrate with another repository or a local branch
   push       Update remote refs along with associated objects

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

If there's a different way to get the info, like GitPython, a solution like that would also be great.

原来我是个白痴。 git diff-tree --name-status显示文件的名称,而不是提交消息。 我试过这个:

g = git.Git("/home/pi/pi")
loginfo = g.log(f'{old_sha}..{new_sha}','--pretty=format:"%s"')

它工作得很好。 我在这个帮助下想出了这个解决方案: https://stackoverflow.com/a/20072186/15212888

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM