从python调用git C/path/to/dir失败,从cons运行

2024-06-24 13:19:26 发布

您现在位置:Python中文网/ 问答频道 /正文

我正在编写一个git服务器端钩子,它需要检查是否对不同的git文件夹(不同于该钩子所在的裸git存储库)进行了任何修改。为此,我编写了一个pre-receive钩子,并尝试使用git status --porcelain。脚本必须选择需要检查的文件夹,但现在我决定硬编码所有路径,直到我使其工作。你知道吗

到目前为止,当我把这个钩子作为python脚本运行时,它会给出正确的结果,但是当我把它作为钩子运行时,它会给我一个错误。你知道吗

UPD值得一提的是,该脚本是在ubuntulinux机器上执行的。在pyton上可以运行什么或者其他进程可以启动什么进程上有什么限制吗?升级版

以下是脚本本身:

#!/usr/bin/env python

import sys
import subprocess
import string
import os

print "PRE-RECEIVE HOOK >>>"

def git(args):
    dirname = os.path.dirname("/home/git/repos/branchone/gitremote/")
    print "Dirname = " + dirname
    pr = subprocess.Popen( ["git","-C", dirname,  "status", "--porcelain"], shell = False, stdout = subprocess.PIPE, stderr = subprocess.PIPE)
    (details, error) = pr.communicate()
    print details, error
    details = details.strip()
    if error != "":
        print "Errors: " + error
        return None
    return details

def pwd():
    pwd = subprocess.Popen("pwd", stdout = subprocess.PIPE)
    details = pwd.stdout.read().strip()
    print "PWD:. " + details

def main():
    git([])
    pwd()

if \__name__ == "\__main__":
    main()

sys.exit(2)

以下是我从cosole中对它的称呼:

root@remine-vm:/home/git/repos/gitremote.git# ./hooks/pre-receive
PRE-RECEIVE HOOK >>>
Dirname = /home/git/repos/branchone/gitremote
 M eden
?? fruit
?? snake

以下是我尝试将某个东西推到遥控器时的反应:

Push: Not all refs have been pushed.
$ git.exe push --porcelain --progress --recurse-submodules=check origin refs/heads/branchone:refs/heads/branchone
'branchone' rejected (non-fast-forward)
Counting objects: 7, done.
Delta compression using up to 8 threads.
Total 6 (delta 0), reused 0 (delta 0)
remote: PRE-RECEIVE HOOK >>>
remote: Dirname = /home/git/repos/branchone/gitremote
remote:  fatal: Not a git repository: '.'
remote: 
remote: Errors: fatal: Not a git repository: '.'
remote: 
remote: PWD:. /home/git/repos/gitremote.git
error: failed to push some refs to 'root@redmine-vm:/home/git/repos/gitremote.git'

Tags: importgit脚本homeremotepwderrordetails