Подтвердить что ты не робот

Git толчок оригинальный тормоз: refs/heads/master что это делает

Когда я создаю новое репо в моем репозитории gitolite, мне всегда нужно ввести следующую команду, прежде чем я могу начать нажимать код на сервер.

git push origin master:refs/heads/master

Что он делает?

Я предполагаю, что это связано с тем, что ссылка на голову не указана. Может кто-нибудь объяснить это мне?

4b9b3361

Ответ 1

В эту команду входят три части:

git push

Это вызывает команду push

origin

Это имя пульта, на который вы нажимаете. Это либо один из названных пультов, хранящихся в .git/config (вы можете указать их с помощью git remote), URL-адреса или токена ., что означает текущий репозиторий.

master:refs/heads/master

Это называется "refspec", и вы можете прочитать об этом на странице руководства для git push. Но в целом он состоял из двух частей, разделенных двоеточием. Первая часть - это имя локальной ветки, а вторая часть - это название ветки в удаленном репозитории (в данном случае origin). Этот конкретный refspec можно сократить до master:master.

В общем, можно еще больше сократить refspec. Просто указывая master, поскольку refspec эквивалентен использованию того же имени на пульте дистанционного управления, поэтому master совпадает с master:master.

Ответ 2

master:refs/heads/master - это refspec.

refspecs имеют вид +<src>:<dst>

Итак, здесь master - это ссылка на ваше местное репо, которое вы нажимаете на refs/heads/master refspec на пульте дистанционного управления (источник). master сокращен для refs/heads/master.

Фактически вы можете просто сделать git push origin master, в результате чего он будет нажимать master на вашем локальном сервере для управления на удаленном компьютере. Только когда вы хотите нажать другой вариант, вам нужно явно указать референт назначения.

Также просто git push также имеет поведение по умолчанию, которое, вероятно, не было бы до того, как вы сделали первый щелчок и создали ветвь (мастер) на пульте дистанционного управления. Так что вам показалось бы, что вам нужно выполнить команду, о которой вы упоминали. Обратитесь к руководству

Ответ 3

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

P.S. На самом деле вам нужно только git push origin master. То, что он делает, толкает вашего локального мастера на gitolite repo как master, так как вы не указали другое имя. Если вы сказали git push origin master:foo, то ветвь, которую вы назовете "master", будет называться "foo" на гитолите.

P.P.S. Вы можете переключать поведение по умолчанию по умолчанию между "ничего", "совпадением" (по умолчанию), "отслеживанием" / "вверх по течению" и "текущим". См. Настройки для "push.default" на странице git -config.

Ответ 4

Он настраивает отслеживание для вас. Вы можете использовать сокращенное обозначение:

git push origin master

Часть после двоеточия - это название ветки на удаленном репо. Если вы опустите его, git предполагает, что вы хотите иметь то же имя.

Надеюсь, что это поможет.