Git - сравнивать локальное и удаленное без предварительной загрузки? - PullRequest
7 голосов
/ 27 сентября 2011

Я искал вокруг и не нашел ответа на этот вопрос.

У меня есть приложение, работающее на Heroku.Со своего локального компьютера я обычно внедряю и просто:

git add .
git commit -m "whatever change, I know I can add and commit at the same time..."
git push <the-heroku-repo>

Затем он поднимается, и ветка master в приложении Heroku обновляется.Пока все хорошо.

Сейчас.Я хочу иметь другую машину, которая будет автоматически извлекать из репозитория Heroku и обновлять себя.

Так что я делаю это с помощью:

git clone <the-heroku-repo>

, который получает мне приложение, и я могу видетьКонфигурация git с этим:

core.repositoryformatversion=0
core.filemode=true
core.bare=false
core.logallrefupdates=true
remote.origin.fetch=+refs/heads/*:refs/remotes/origin/*
remote.origin.url=git@heroku.com:theapp.git
branch.master.remote=origin
branch.master.merge=refs/heads/master

Чтобы обновить этот новый репозиторий, я могу сделать всего лишь попытку:

git pull origin

Или я могу получить и объединить:

git fetch origin
git merge origin/master

МОЙ ВОПРОС

Между приведенным выше извлечением и объединением я могу проверить, какие изменения сделаны, выполнив:

git log -p master..origin/master

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

Спасибо.

1 Ответ

15 голосов
/ 27 сентября 2011

Хотя вы можете получить некоторую сводную информацию о ветвях в репозитории origin, используя:

git remote show origin

... вам нужно каким-то образом извлечь ветки из origin в ваш репозиторий, чтобысравнить их.Это то, что делает git fetch.При запуске git fetch origin по умолчанию будут обновляться только так называемые «ветви удаленного отслеживания», такие как origin/master.Это просто магазин, в котором находилась соответствующая ветвь в origin при последнем получении.Все ваши местные филиалы, над которыми вы работали, не затрагиваются git fetch.Таким образом, это безопасно сделать:

git fetch origin
git log -p master..origin/master

... и затем, если вы довольны этим, вы можете слиться с или перейти на origin/master.


Iпобуждает вас не беспокоиться о ресурсах (дисковом пространстве или пропускной способности), задействованных в команде git fetch origin.git эффективно отправляет только те объекты, которые необходимы для обновления веток удаленного отслеживания, которые обновляются, и если у вас нет необычно больших файлов, сохраненных с вашим исходным кодом, это не должно иметь большого значения.Кроме того, часто бывает полезно иметь полную историю веток из другого репозитория, даже если вы не планируете их использовать, например, чтобы вы могли изучить эту историю разработки.

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