2015-03-11 5 views
2

Я пытаюсь сделать небольшую программу для моих пользователей для основных действий для git и других. И я сталкиваюсь с множеством проблем, чтобы клонировать частный удаленный репозиторий.Clone репозиторий со всей ветвью из удаленного репозитория с GitPython

Я имею следующую конфигурацию: Python 3.4 для Windows GitPython Ssh соединения etablished на удаленном сервере.

Вот мой код:

print(blue + "Where to clone repos ?") 
path_repo = input(cyan + "> " + green) 
try: 
    assert os.path.exists(path_repo) 
except AssertionError: 
    print(red + "Path does not exist") 
continue 
print(blue + "Name of Repos :") 
name_repo = input(cyan + "> " + green) 
remote_path = "[email protected]:/home/git/repos/{0}.git".format(name_repo) 
local_path = "{0}/{1}".format(path_repo, name_repo) 
# Repo.clone_from(remote_path, local_path) 
repo = Repo.clone_from(remote_path, local_path) 
#print(repo.git.fetch()) 
#print(repo.git.pull()) 
#print(repo.git.status()) 

Это не вызывает ошибку, но стоп скрипт в конце и блокирует терминал (дайте мне бесконечную пустую строку без >>>)

После запуска, что, если я поеду в Git Bash и напечатаю git status, у него вроде бы нет ветки, только init. Поэтому я добавляю три последние строки своего кода, чтобы увидеть, что изменилось, но ничего.

Если в Git Bash набираю git pull, он хорошо тянуть мастер филиал ...

Если somenone может решить мою проблему, пожалуйста?

Где я сделал ошибку?

Благодаря

ответ

1

Есть много вопросов, с кодом и подходом вы описываете ...

Один

Прежде всего, у вас есть

continue 

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

Таким образом, кажется, что вы никогда на самом деле клон ничего ...

Два

Чтобы увидеть все ветви находятся в репо, пожалуйста, используйте что-то вроде git branch -va. Боюсь, что git status не для этого.

Три

Так как вы, кажется, уже инициализированного репо каким-то образом, вы не сможете клонировать в том же месте - потому что клонирование создает репозиторий.

Четыре

Кроме того, нет смысла проверять, если каталог существует - потому что git clone создает каталог, если он не существует.


Подводя итог, попробуйте этот простой код ниже.Я прокомментировал строку, которая, вероятно, привела бы к ошибке из-за того, что репо уже существует.

print(blue + "Where to clone repo?") 
path_repo = input(cyan + "> " + green) 
print(blue + "Name of repo:") 
name_repo = input(cyan + "> " + green) 
remote_path = "[email protected]:/home/git/repos/{0}.git".format(name_repo) 
local_path = "{0}/{1}".format(path_repo, name_repo) 
#repo = Repo.clone_from(remote_path, local_path) 
repo = Repo(local_path) 
info = repo.remote('origin').fetch() 
if not info: 
    print('no fetch information') 
for i in info: 
    if i.note: 
     print('fetched, note is: ' + i.note.strip()) 
    else: 
     print('fetched, no note') 
+0

Насколько я вижу, вы не закончили отвечать на вопрос; как получить '--all' передан команде' git clone'. –

+0

Когда я это делаю: '$ git clone --' (нажмите вкладку 2 раза здесь) Я получаю это: ' --bare --local --no-hardlinks --reference --template = --branch - зеркало --origin --shared --upload-pack --depth --no-checkout --quiet --single-branch', так что вы можете видеть опцию '--all' не отображается. И когда я пытаюсь его заставить: '$ git clone --all error: unknown option \' all'' ... такой опции нет. Подробнее здесь: https://git-scm.com/docs/git-clone Итак, чего вы хотите достичь, предоставив несуществующий вариант 'git clone'? – mbdevpl

+0

Кроме того, в исходном вопросе ничего не найдено о флаге '--all'. Во всяком случае, для чего вам это нужно? Git извлекает все удаленные ветви по умолчанию, а затем, если вам нужно какое-либо из них, вы просто выполняете 'git checkout some-branch'. Если он не существует, но существует 'origin/some-branch', будет создана новая ветвь' some-branch', вычеркнута и будет отслеживать происхождение. – mbdevpl

Смежные вопросы