Как проверить ветку с помощью GitPython

Я клонировал репозиторий с помощью GitPython, теперь я хотел бы проверить ветку и обновить рабочее дерево локального репозитория содержимым этой ветки. В идеале я также мог бы проверить, существует ли ветвь, прежде чем делать это. Это то, что у меня есть до сих пор:

import git

repo_clone_url = "[email protected]:mygithubuser/myrepo.git"
local_repo = "mytestproject"
test_branch = "test-branch"
repo = git.Repo.clone_from(repo_clone_url, local_repo)
# Check out branch test_branch somehow
# write to file in working directory
repo.index.add(["test.txt"])
commit = repo.index.commit("Commit test")

Я не уверен, что поставить вместо комментариев выше. документация, кажется, дает пример того, как отсоединить HEAD , но не как получить именованную ветку.


person Alex Spurling    schedule 18.12.2017    source источник


Ответы (1)


Если ветка существует:

repo.git.checkout('branchename')

Если не:

repo.git.checkout('-b', 'branchename')

В основном, с GitPython, если вы знаете, как это сделать в командной строке, но не в API, просто используйте repo.git.action("your command without leading 'git' and 'action'"), например: git log --reverse => repo.git.log('--reverse')

person Arount    schedule 18.12.2017
comment
Спасибо, вы знаете, как проверить, существует ли локальная ветка? - person Alex Spurling; 18.12.2017
comment
Да. Я даже знаю двух из них! И я, конечно, могу представить еще больше за несколько минут! Но все они не так хороши, потому что все основаны на одном и том же. GitPython только вычисляет и пересылает командные строки git в ОС и анализирует результат. Лучшее, что вы можете сделать, это try что-то и ожидать git.exc.GitCommandError. Если это произойдет, ветка не существует ИЛИ вы испортили свой код. Что проверить: repo.git.checkout('branchename') или repo.git.rev_parse('--verify', 'branchname'). Он не делает то же самое с git, но дает точно такой же результат. - person Arount; 18.12.2017
comment
@Arount Я применяю первую команду, которую вы указали, и пока я не получаю сообщение об ошибке. Не похоже, что репо переключает ветку? Что я могу упустить? - person Kyle Swanson; 11.04.2019
comment
@Arount написал мой вопрос здесь -› stackoverflow.com/questions/55622824/ - person Kyle Swanson; 11.04.2019
comment
Я не могу сказать этого достаточно, но спасибо. Последняя часть вашего ответа, наконец, заставила меня понять этот пакет. Я пытаюсь понять это 2 дня подряд. Должен быть первым в документации GitPython. - person Daniel Lavedonio de Lima; 17.06.2020