Вам нужно «удаленное обновление» перед «вытягиванием» в Git?

Предполагая, что я сделал следующее из c:\, как правильно получить последний код из удаленного источника?

# Create repo...
mkdir Test
cd Test
git init
...create files
git add .
git commit -a -m "Init Commit"

# Clone repo...
cd ..
git clone Test TestClone

# Edit original
cd Test
...edit files
git commit -a -m "Init Edit"

# Go back to Clone
cd ..\TestClone

# Get latest code
# Now what??? pull or update then pull

person Terry    schedule 29.04.2011    source источник


Ответы (3)


Git автоматически настроит удаленный origin в вашем клонированном репозитории и настроит ваши ветки для слияния с их эквивалентами в origin при извлечении.

Все, что вам нужно сделать, это git pull в этом случае.

person meagar    schedule 29.04.2011
comment
@sehe: да, нужна память ECC :) - person sehe; 29.04.2011
comment
объединяются из своих эквивалентов... Я думал (и я новичок в Git), что pull всегда объединяется в текущей ветке (независимо от имени). git pull ‹remote› ‹remoteBranchName› так я понял. Таким образом, независимо от того, в какой ветке я находился локально, мастер git pull origin вытаскивал основную ветку из удаленного источника? - person Terry; 29.04.2011
comment
@Terry Терри Я имел в виду, что git во время клонирования настроит ваши локальные ветки на слияние с эквивалентными удаленными ветвями. Позже, когда вы вытянете, git объединит вашу текущую ветку с любой удаленной веткой, которую он настроен отслеживать. Это не обязательно удаленная ветвь с тем же именем (т.е. эквивалент); локальная ветка my_feature может быть настроена, например, для отслеживания удаленной ветки some-remote/some-other-feature. Извините за путаницу. - person meagar; 29.04.2011
comment
И последний вопрос... когда вы ссылаетесь на источник (удаленный) в любых командах, всегда ли он попадает на настоящий удаленный сервер, а не на какую-то локальную копию удаленного сервера? т. е. git diff --name-status master..origin/master — соответствует ли это реальному исходному коду или «репозиторию» в локальном каталоге /remotes/origin/master, это ссылка, которая меня смущает. - person Terry; 29.04.2011
comment
@Terry Git всегда будет работать с локальными данными. Вы должны fetch/update remote получить последние данные с удаленного устройства; pull, что эквивалентно fetch, за которым следует merge, сделает это за вас. - person meagar; 29.04.2011
comment
@meagar - Последний вопрос (и я знал, что выборка, слияние, даже извлечение;)) ... выполняет ли git push (на удаленный) неявное извлечение? Поиск в Google, но не находит очевидное совпадение, чтобы ответить на вопрос. - person Terry; 05.05.2011
comment
@Terry Терри Нет, но отправка не удастся, если локальная ветвь не обновлена. - person meagar; 05.05.2011
comment
@meagar - Блин, я не уточнил, я имел в виду pull после твоего слияния? Это означает, что если я выполню push в случае успеха, гарантированно ли у меня будет последний код? (набрав, что я думаю, что нет, но исходя из фона VSS, я бы лучше спросил) - person Terry; 06.05.2011
comment
@Terry Терри Мой ответ был точным, ты думаешь об этом задом наперед. Дело не в наличии самого последнего кода после отправки; отправка просто не будет работать, если у вас уже нет последней версии кода. Вы должны получить и объединить (т. е. получить) любые изменения перед отправкой собственных изменений. Слияние всегда выполняется на вашем компьютере, а не на удаленном, поэтому вы всегда должны объединять изменения с удаленного компьютера локально, прежде чем отправлять свои изменения обратно. - person meagar; 06.05.2011

Другие сказали вам короткую версию: просто pull. Но поскольку вы на самом деле спросили об удаленном обновлении...

remote update — это команда высокого уровня для «обновления всего, что нам известно с удаленных устройств». Он извлекает новые ветки, может обрезать старые и может делать это для произвольных групп удаленных серверов или для всех. Он обновляет только ветки удаленного отслеживания (с такими именами, как origin/master); он не касается ваших ветвей. Если вам нужно такое обновление, эта команда для вас. Довольно часто хочется проверить, что находится на удаленном сервере, без фактического слияния чего-либо с какой-либо из ваших веток, и возможность обрезать устаревшие ветки тоже довольно приятна.

Если все, что вы хотите сделать, это объединить соответствующую удаленную ветку с вашей текущей, git pull — правильная команда. Да, он обновит некоторые удаленные ветки в процессе, но это не его основная цель.

person Cascabel    schedule 29.04.2011

Прочитав справку по git, я думаю, remote update похож на fetch.

git pull объединяет git fetch и git merge. Таким образом, выполнение git pull позволит получить изменения с пульта и объединить их с вашим рабочим деревом.

Вы делаете git fetch, когда хотите получать обновления с пульта, но не хотите, чтобы они смешивались с вашими локальными изменениями. Это полезно для перехода в автономный режим, проверки новой локальной ветки (не связанной с вашей текущей веткой) и просто проверки того, над чем работают другие.

Вам нужно будет только сделать git remote update для причудливых удаленных манипуляций. Дополнительное обсуждение этого вопроса< /а>.

Поэтому, чтобы просто получить последнюю версию, используйте git pull.

person idbrii    schedule 29.04.2011