Как позволить git проверять наличие обновлений на главном сервере? - PullRequest
4 голосов
/ 08 октября 2011

У меня очень плохие знания о git, и я хотел бы попросить о помощи.

У меня есть приложение linux (-only), которое может быть "загружено" (то есть клонировано) только с помощью git.При запуске приложение должно запросить у git "главный сервер" (github), есть ли обновления.

Предлагает ли git команду для проверки наличия обновления (без реального обновления - только проверка)?Кроме того, может ли мое приложение прочитать возвращаемое значение этой команды?

Ответы [ 3 ]

3 голосов
/ 08 октября 2011

Если вы не хотите объединяться, вы можете просто git fetch yourremote/yourbranch, спецификация удаленного / ветвления обычно равна origin/master. Затем вы можете проанализировать вывод команды, чтобы увидеть, действительно ли присутствуют новые коммиты. Вы можете ссылаться на последний извлеченный коммит как yourremote/yourbranch или, возможно, по symref FETCH_HEAD.

Примечание: Мне напомнили, что FETCH_HEAD относится к последней выбранной ветви. Следовательно, в общем случае вы не можете полагаться на git fetch yourremote с FETCH_HEAD, поскольку первый выбирает все отслеживаемые ветви, поэтому последний может не относиться к yourbranch. Кроме того,

  • В итоге вы получаете больше, чем строго необходимо.
  • также см. ответ Джефроми , чтобы просмотреть, но фактически не загруженные изменения
  • следующие форматы не обязательно являются самыми компактными, просто читаемые примеры.

Тем не менее, вот несколько вариантов проверки обновлений удаленной ветви, которые мы будем обозначать yourremote/yourbranch:

0. Обработка ошибок в следующих операциях:

0.1 Если вы попытаетесь git fetch yourremote, а git выдаст ошибку, такую ​​как

conq: repository does not exist.

это, вероятно, означает, что вы не определили эту удаленную строку. Проверьте заданные вами удаленные строки с помощью git remote --verbose, затем git remote add yourremote yourremoteURI, если необходимо.

0.2 Если git выдает ошибку типа

fatal: ambiguous argument 'yourremote/yourbranch': unknown revision or path not in the working tree.

это, вероятно, означает, что у вас нет yourremote/yourbranch локально. Я оставлю это кому-то более знающему, чтобы объяснить, что значит иметь что-то удаленное локально :-), но здесь скажу только, что вы должны быть в состоянии исправить эту ошибку с помощью

git fetch yourremote

, после чего вы сможете успешно повторить желаемую команду. (При условии, что вы правильно определили git remote yourremote: см. Предыдущий элемент.)

1. Если вам нужна подробная информация, git show yourremote/yourbranch и сравните ее с текущей git show yourbranch

2. Если вы хотите увидеть различия, git diff yourbranch yourremote/yourbranch

3. Если вы предпочитаете сравнивать только по хешу, сравните git rev-parse yourremote/yourbranch с git rev-parse yourbranch

4. Если вы хотите использовать журнал для отслеживания произошедшего, вы можете сделать что-то вроде git log --pretty=oneline yourremote/yourbranch...yourbranch (обратите внимание на использование три точек).

3 голосов
/ 08 октября 2011

Если вы действительно не хотите использовать полосу пропускания и получать новые коммиты, а просто проверить, есть ли что-то, что можно получить, вы можете использовать:

git fetch --dry-run [remote]

, где [remote] по умолчанию origin. Однако вам придется проанализировать вывод, который выглядит примерно так:

From git://git.kernel.org/pub/scm/git/git
   2e49dab..7f41b6b  master     -> origin/master

так что на самом деле намного проще просто извлечь все (git fetch [remote]), а затем посмотреть на diff / log, например. между master и [remote]/master.

1 голос
/ 08 октября 2011

Я бы сказал, что git fetch - это потенциальное решение. Он только обновляет индекс, а не рабочий код. В случае больших наборов коммитов это может потребовать загрузки сжатых файлов / информации, поэтому это может быть больше, чем вы хотите, но это самая полезная загрузка, которую вы можете сделать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...