git-эквивалент статуса svn -u - PullRequest
45 голосов
/ 16 июля 2009

Что такое git-эквивалент svn status -u или более многословный svn status --show-updates. Команда svn status --show-updates показывает обновления, которые команда svn update принесет с сервера.

Спасибо!

Ответы [ 7 ]

34 голосов
/ 16 июля 2009

Я не могу придумать способ сделать это без фактической загрузки обновлений (возможно, кто-то еще). Предполагая, что вы находитесь в ветке по умолчанию "master", а восходящий поток, из которого будут поступать эти гипотетические обновления, является удаленным "origin" по умолчанию, попробуйте ....

git fetch
git log --name-only ..origin/master

Обратите внимание на двойные точки .. ни на одну точку или на элипсис 1 .

Это даст вам список записей журнала для изменений, которые относятся только к восходящему потоку, с затронутыми именами файлов, вы можете изменить параметры для git log, чтобы получить больше или меньше информации.

Обратите внимание, что git "выбирает" эти обновления не то же самое, что применять их к вашей локальной ветке. Вы, без сомнения, уже знаете, как это сделать с помощью git pull.


1 Откуда происходят двойные точки, name1..name2 указывает диапазон. Если name1 опущен, вместо него используется HEAD. Этот синтаксис относится ко всем коммитам, доступным с name2 назад, но не включая HEAD. [ "Мерзавец снизу вверх" ]

30 голосов
/ 17 июля 2009

Оба Martinho Fernandes и tialaramex ответы правильно описывают, что вам нужно сделать. Позвольте мне описать почему так оно и есть.


1012 * Subversion * Subversion является централизованной системой контроля версий. Это означает, что он работает в режиме клиент-сервер: сервер хранит все данные о версии (хранилище), клиент имеет только рабочий каталог (файлы) плюс некоторые административные и вспомогательные данные. Это означает, что для большинства команд клиент должен связаться с сервером. Это также означает, что существует много команд, запрашивающих состояние хранилища на сервере или конфигурацию сервера, например «svn status --show-updates». (Sidenote: одни вспомогательные данные, которые Subversion хранит на клиенте, являются «нетронутой» версией файлов, что означает, что для проверки изменений, которые вы сделали, не требуется подключаться к серверу (что медленно) ... но это также означает, что извлечение SVN может быть больше, чем в Git). «svn update» (требуется перед фиксацией, если в репозитории есть какие-либо изменения в данной ветке) загружает последнюю версию с удаленного и объединяет (пытается объединить) изменения, которые вы сделали с изменениями с удаленного. ИМХО, этот рабочий процесс обновления перед фиксацией не очень проводящий. Гит

Git - это распределенная система контроля версий. Это означает, что он работает по принципу peer-to-peer: каждый «клиент» имеет все данные о версиях (полный репозиторий). Центральный репозиторий является центральным только из-за социальных соглашений, а не технических ограничений. Это означает, что при обращении в другое удаленное хранилище количество команд, «выполненных удаленно», очень мало. Вы можете запросить ссылки (главы или ветки и теги) с помощью «git ls-remote» (и «git update show»), вы можете получить (получить) или отправить (опубликовать) данные с помощью «git fetch» ​​(или «git»). удаленное обновление ") /" git push ", и если сервер настроен на это, вы можете получить снимок состояния удаленного хранилища с помощью" git archive --remote ".

Таким образом, чтобы проверить коммиты, которые находятся в удаленном репозитории, но отсутствуют в вашем репозитории, вы должны загрузить данные на свой компьютер. Но на самом деле «git pull» - это не что иное, как «git fetch», который загружает данные, и «git merge», который их объединяет (с небольшим количеством сахара для подготовки сообщений коммита и выбора ветви для слияния). Затем вы можете использовать «git fetch» ​​(или «git remote update»), изучить вновь внесенные коммиты с помощью «git log» и «gitk» (не ограничиваясь фиксированным выводом), а затем, если все в порядке, объединить изменения с помощью « git merge ".

Это относится не только к Git, но и ко всем распределенным системам управления версиями, хотя способ представления извлеченных SCM извлеченных, но необработанных данных может отличаться (Git использует ветви удаленного отслеживания в пространстве имен 'remote / / *', Mercurial from что я понимаю, использует неназванные головы).


НТН

13 голосов
/ 16 июля 2009

Если вы получите:

git fetch <remote>

вместо вытягивания:

git pull <remote>

с пульта, вы можете проверить, что изменилось с помощью git log. Чтобы применить изменения:

git merge <remote>/<remote-branch>
4 голосов
/ 04 февраля 2013

Вы можете использовать git ls-remote для вывода списка ссылок SHA в удаленном хранилище; Итак, вы можете увидеть, есть ли какие-либо изменения, сравнив выходные данные:

$ git show-ref origin/master     # <-- Where this repo thinks "origin/master" is
5bad423ae8d9055d989a66598d3c4473dbe97f8f refs/remotes/origin/master
$ git ls-remote origin master    # <-- Where "origin" thinks "master" is
060bbe2125ec5e236a6c6eaed2e715b0328a9106    refs/heads/master

Если они отличаются, то есть выборки:

$ git remote update
Fetching origin
...
From github.com:xxxx/yyyy
5bad423..060bbe2  master     -> origin/master
3 голосов
/ 25 ноября 2011

Для меня, просто чтобы отобразить файлы, которые будут изменены, это:

git fetch (1)
git diff --name-only ..origin/master (2)
  1. Извлекает изменения в «базе данных» Git (только для каталога .git) и не изменяет файлы.
  2. Показывает имена файлов, которые будут изменены после слияния

Для обновления файлов (не только Git "database") выполните git merge

2 голосов
/ 19 ноября 2012

git fetch && git log --name-status ..origin/master действительно показывает журналы, которые будут объединены. Тем не менее, это также тянет изменения. Технически невозможно сделать то же самое, что и svn status -u, но git fetch настолько быстр, что обычно это не имеет значения

Если перед загрузкой вам абсолютно необходим журнал, единственным способом будет подключиться (SSH или эквивалентный) к удаленному устройству и выдать git log там.

2 голосов
/ 19 ноября 2012

Gits дает нам больше инструментов для проверки «обновления». Сначала вы должны «загрузить» актуальное состояние хранилища:

git fetch

Теперь вы можете получить список измененных файлов:

git log --name-status ..origin/master

Дополнительно, вы можете увидеть полный список изменений с помощью diff:

git diff ..origin/master

Значение начальных букв: добавлено (A), скопировано (C), удалено (D), изменено (M), переименовано (R), изменено (T), Unmerged (U), неизвестно (X) ), или их спаривание было сломано (B)

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