Хотите проверить, существует ли хранилище и является ли оно публичным (gitpython) - PullRequest
1 голос
/ 26 марта 2019

Используя Python и GitPython, со списком репозиториев git от разных пользователей, мне нужно проверить, существует ли репозиторий и является ли он общедоступным.

Имея это в виду и думая о GitHub, если он запрашивает имя пользователя и пароль, я знаю, что хранилище выходит за рамки моих критериев. Поэтому я могу игнорировать это.

import git

class User():
    def __init__(self, a, b, c):
        self.name = a
        self.git_user = b
        self.git_repos = c

user = User('John', 'john1234', 'fake_one')

try:
    git.Repo.clone_from(f'https://github.com/{user.git_user}/' + \
        f'{user.git_repos}.git', f'temp/{user.name}/')
except git.exc.GitError:
    print(f'ERROR! {user.name}: {user.git_user}/{user.git_repos} does not exist')

Этот код работает, поэтому я вхожу с любым именем пользователя и соответствующим паролем (включая пустые), когда хранилище не найдено как общедоступное. Есть ли способ игнорировать (отправляя пустые строки) или перехватывать (какое-то исключение?) Имя пользователя / пароль?

Обратите внимание, что если бы я мог проверить наличие (публичного) хранилища, я мог бы использовать эту информацию для предотвращения неуместного "клона" ...

1 Ответ

0 голосов
/ 26 марта 2019

Я понял это, благодаря ответу Lacho Tomov на этот вопрос: Git push требует имя пользователя и пароль

Код с требуемым поведением:

import git

class User():
    def __init__(self, a, b, c):
        self.name = a
        self.git_user = b
        self.git_repos = c

user = User('John', 'john1234', 'fake_one')

try:
    git.Repo.clone_from(f'https://null:null@github.com/{user.git_user}/' + \
        f'{user.git_repos}.git', f'temp/{user.name}/')
except git.exc.GitError:
    print(f'ERROR! {user.name}: {user.git_user}/{user.git_repos} does not exist')

Обратите внимание, что null в https://null:null@github.com/{user.git_user}/ может быть другой строкой (хотя и не пустой).

Если у кого-то есть более питонный / правильный способ сделать это, пожалуйста, не стесняйтесь обновить этот ответ.

...