2017-02-20 54 views
1

Я хочу проверить, есть ли у меня последняя версия программы. У меня есть моя программа, разделенная на bitbucket.org, и я хочу, чтобы мой код на C++ написал мне, если мне нужно вытащить последнюю версию или у меня уже есть последняя версия.Как проверить, требуется ли pull с помощью libgit2 в C++?

ответ

1

Во-первых, вы должны получить, чтобы получить состояние удаленных ветвей отслеживания. Нет другого способа проверить, была ли ваша ветка обновлена ​​на пульте дистанционного управления. Для этой цели многие инструменты автоматически выбираются периодически (например, каждые 10 минут).

Затем сравните местную ветку с ее восходящим потоком. Один из способов сделать это с помощью libgit2 - использовать функциональность revwalk. Если вы выберете git_revwalk_push_ref вверх по течению и git_revwalk_hide_ref, то локальная ветка, пройдя по диапазону, вы можете подсчитать, сколько коммитов находится за вашей локальной ветвью. Сделайте противоположное, чтобы получить количество коммитов вперед.

Пример:

git_revwalk *walker; 
git_revwalk_new(&walker, repo); 
git_revwalk_push_ref(walker, "refs/remotes/origin/master"); 
git_revwalk_hide_ref(walker, "refs/heads/master"); 

git_oid id; 
int count = 0; 
while (!git_revwalk_next(&id, walker)) 
    ++count; 

// 'count' is the difference between remote and local 
+0

Хорошо, но, например, функция git_revwalk_push_ref имеет два параметра: 1, git_revwalk * ходить ||||| 2, const char * refname ||||| Что я должен передать как имя? –

+0

Я уже извлек данные, и мне нужен какой-то эквивалент этого в libgit2: git diff

+0

Я добавил пример. –