Не удается выполнить Git Push с использованием Python (подпроцесс)?

#python #git #ssh

#python #git #ssh

Вопрос:

У меня есть этот скрипт, который должен отправлять файлы из текущего каталога скрипта в репозиторий:

 def pushToGit():
    currDir = os.path.dirname(os.path.realpath(sys.argv[0]))
    try:
        shutil.rmtree(os.path.join(currDir, '.git'))
    except:
        pass
    try:
        cp = cmd.run("git init", check=True, shell=True, cwd=currDir)
        cp = cmd.run(f"git remote add origin git@github.com:johnsmith/repo_hold.git", check=True, shell=True, cwd=currDir   "//")
        cp = cmd.run("git config user.name 'john smith'", check=True, shell=True, cwd=currDir   "//")
        cp = cmd.run("git config user.email 'john@smith.com'", check=True, shell=True, cwd=currDir   "//")
        cp = cmd.run("git add .", check=True, shell=True, cwd=currDir   "//")
        message = f"Some generated message here"
        cp = cmd.run(f"git commit -m '{message}'", check=True, shell=True, cwd=currDir   "//")
        cp = cmd.run("git push -u origin master", check=True, shell=True, cwd=currDir   "//")
        return True
    except Exception as e:
        return False
  

Процесс прост: просто инициализируйте папку, добавьте конфигурацию, добавьте файлы, зафиксируйте с сообщением и нажмите.

В этом примере я пытаюсь использовать метод SSH, поскольку он будет запущен автоматически, поэтому он не может ввести пароль. Ключи SSH находятся в той же папке (для примера) и прикреплены к моей учетной записи GitHub.

Однако я сталкиваюсь со следующей ошибкой:

 * Running on http://127.0.0.1:2897/ (Press CTRL C to quit)
Initialized empty Git repository in C:/Users/John/Desktop/my_repo/.git/
warning: LF will be replaced by CRLF in id_rsa.
The file will have its original line endings in your working directory
error: pathspec 'URL' did not match any file(s) known to git
error: pathspec 'added'' did not match any file(s) known to git
127.0.0.1 - - [08/Sep/2020 22:13:36] "←[37mGET /<url post request here> HTTP/1.1←[0m" 200 -
  

Я не уверен, что вызывает проблему. Я не понимаю ошибку в консоли. Это первый раз, когда я использую метод SSH, но я не понимаю, как я мог бы использовать его неправильно.

Если это поможет, вот как выглядят файлы в каталоге:

Просмотр каталога

Что я делаю не так?

Ответ №1:

Во-первых, добавьте некоторое эхо между вашей командой, чтобы изолировать ту, которая вызывает ошибку.

Во-вторых, добавьте git status для проверки:

  • если вы находитесь в нужном рабочем каталоге
  • состояние файлов

Ошибка типа pathspec 'added'' did not match any file(s) known to git , похоже, указывает на то, что он пытается добавить или зафиксировать файлы, используя вывод предыдущей команды.

Использование gitpython-developers/GitPython было бы безопаснее.