Git Не извлекает изменения при использовании URL - PullRequest
0 голосов
/ 18 февраля 2020

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

git fetch https://<user>:<pass>@github.com/<org>/<repo>

, который дает вывод:

From https://github.com/<org>/<repo>
 * branch            development -> FETCH_HEAD

Когда я запускаю git status после выполнения выборки, он не обнаруживает самые последние изменения .

Если я запускаю обычный git fetch без URL-адреса и ввожу имя пользователя и пароль вручную, я получаю другой вывод:

From https://github.com/<org>/<repo>
   96353f7..e88782c  development -> origin/development

И затем выполнение git status работает как предсказано и обнаруживает, что в удаленной ветви есть изменения.

Я не очень разбираюсь в Git и чувствую, что упускаю что-то очень очевидное. Если кто-то может указать на мою ошибку, это будет высоко ценится!

РЕДАКТИРОВАТЬ:

Так что, похоже, отсутствующий кусок был для меня, чтобы указать локальную и удаленную ветку после URL:

git fetch https://<user>:<pass>@github.com/<org>/<repo> development:origin/development

Как указывает принятый ответ: если вы не указываете удаленное имя, git помещает удаленные изменения в FETCH_HEAD по умолчанию. Это решается путем явного указания локальной и удаленной ветвей.

Я все еще немного сбит с толку относительно того, почему git fetch знает, что нужно извлечь из удаленного источника по умолчанию, но указание URL меняет это значение по умолчанию. Но это работает сейчас в любом случае

1 Ответ

2 голосов
/ 18 февраля 2020

Git пульты - это имя, связанное с URL. Имя по умолчанию - origin, а URL-адрес обычно совпадает с тем, с которого вы клонировали.

Git хранит снимок удаленных репозиториев в «ветвях удаленного отслеживания». Они имеют форму <remote-name>/<branch>. Когда вы git fetch origin Git отправляет и выбирает изменения из URL-адреса, связанного с origin, и помещает их в удаленные ветви. development -> origin/development говорит вам, что она помещает ветку разработки удаленного в вашу origin/development удаленную ветку.

Когда вы запускаете git fetch https://<user>:<pass>@github.com/<org>/<repo> и даете ему только URL, без имени удаленного, Git не делает есть имя для его удаленного отслеживания ветвей. Так что он просто вставляет их в эфемерный FETCH_HEAD, который записывает ваш последний git fetch. Это то, что development -> FETCH_HEAD говорит вам.


Независимо от всего этого, git status не покажет никаких изменений. git fetch никогда не меняет ни ваши локальные филиалы, ни ваш индекс, ни вашу кассу. только обновит ваши удаленные ветви отслеживания. Это позволяет безопасно запускать git fetch для обновления снимка удаленного репозитория.

Для поиска локальной копии удаленной ветви вы ищете git pull.


Наконец, чтобы избежать необходимости каждый раз вводить имя пользователя и пароль или, что еще хуже, жестко кодировать их в URL, установите Git помощник по учетным данным для безопасного хранения вашего имени пользователя и пароля .

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