#git #github
#git #github
Вопрос:
Я пытался развернуть свой исходный код на Github. Затем я сначала добавил исходный код github в удаленный исходный код следующим образом:
$ git remote add origin git@github.com:user_name/foo_bar.git*
Затем я попытался запустить команду «git push», чтобы загрузить исходный код в свою удаленную учетную запись github, как показано ниже.
$ git push
Enter passphrase for key '/c/Users/mylaptop/.ssh/id_rsa':
No refs in common and none specified; doing nothing.
Perhaps you should specify a branch such as 'master'.
fatal: The remote end hung up unexpectedly
error: failed to push some refs to 'git@github.com:user_name/foo_bar.git'
Как я узнал из railstutorial.org Я знаю, что если я использую «git push» в первый раз, он вернет ошибку, ожидающую, что я укажу параметры ‘origin master’. Но в следующий и последующие разы я могу запустить только «git push», для меня это будет работать корректно. В чем причина этого? как я и думал, команда по умолчанию всегда ссылается на ветку «master».
Любое четкое объяснение было бы действительно оценено.
Ответ №1:
При первом выполнении git push
в origin нет удаленной ветви с именем master.
После того, как ветка будет создана, вы можете использовать git push
, и она будет ссылаться на удаленную ветку с тем же именем, что и у ветки, в которой вы находитесь в данный момент.
Ответ №2:
По умолчанию git push origin
выполняется отправка во origin
все локальные ветви, которые имеют то же имя, что и ветка на origin
.
Если вы вводите git push
без указания origin
, имя целевого репозитория выводится из удаленной ветви, отслеживаемой веткой, в которой вы находитесь. Итак, если вы master
отслеживаете origin/master
ветку, git push
это похоже на git push origin
.
Ответ №3:
В репозиториях Git есть такая концепция «отслеживания». Итак, с точки зрения git, он может знать, что основная ветвь отслеживает origin / master. Если он видит эту связь, когда вы выполняете git push
, тогда он говорит: «О, ну, он нажимает с master, который отслеживается с помощью origin / master. Это должно быть то, куда он хочет, чтобы оно шло. «
Однако до вашего первого нажатия git не знает об этой взаимосвязи, что означает, что ваша команда (потенциально) неоднозначна. Вы можете прочитать официальную документацию об этом поведении в главе книги Git об отслеживании.
Примечание: Смотрите комментарий Джефроми ниже. Он указывает на некоторые неточности в моем объяснении, которые могут быть важны, в зависимости от вашего варианта использования.
Комментарии:
1. Это не совсем правильно, и этот отрывок из книги по Git тоже немного вводит в заблуждение. (Я думаю, что он пытается просто не выдавать ложную информацию, но все же.) По умолчанию
git-push
выполняется переход к ветвям с тем же именем, полностью игнорируя отслеживание ветвей. Если вы хотите, чтобы она использовала ветви отслеживания, вы должны установитьpush.default
значениеtracking
. Однако в обычных случаях все будет просто работать — все ветви отслеживают ветви с одинаковым именем, и вы избегаете случайного нажатия на свои личные локальные ветви, потому что они не существуют на удаленном компьютере.2. Блин, ты прав. Я использую git уже около 9 месяцев, успешно настроил два частных сервера git — и мне все еще есть чему поучиться. Такова жизнь. Спасибо за комментарий! 🙂