В чем разница между clone и mkdir-> cd-> init-> remote-add-> pull?

NullPointerException s - исключения, возникающие при попытке использовать ссылку, которая указывает на отсутствие местоположения в памяти (null), как если бы она ссылалась на объект. Вызов метода по нулевой ссылке или попытка получить доступ к полю нулевой ссылки вызовет функцию NullPointerException. Они наиболее распространены, но другие способы перечислены на странице NullPointerException javadoc.

Вероятно, самый быстрый пример кода, который я мог бы придумать для иллюстрации NullPointerException, be:

public class Example {

    public static void main(String[] args) {
        Object obj = null;
        obj.hashCode();
    }

}

В первой строке внутри main я явно устанавливаю ссылку Object obj равной null. Это означает, что у меня есть ссылка, но она не указывает на какой-либо объект. После этого я пытаюсь обработать ссылку так, как если бы она указывала на объект, вызывая метод на нем. Это приводит к NullPointerException, потому что нет кода для выполнения в местоположении, на которое указывает ссылка.

(Это техничность, но я думаю, что она упоминает: ссылка, которая указывает на null, равна 't то же, что и указатель C, указывающий на недопустимую ячейку памяти. Нулевой указатель буквально не указывает на в любом месте , который отличается от указаний на местоположение, которое оказывается недопустимым.)

26
задан Rupert Madden-Abbott 5 November 2010 в 18:11
поделиться

1 ответ

Многие команды, будь то команды git или обычные программы, выполняют действия в одну строку, которые вы могли бы сделать в десять раз. Всегда хорошо экономить работу!

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

  • Если по какой-то причине HEAD пульта дистанционного управления не является мастером, клон выполнит Правильно - дать вам ветку, названную так же, как у пульта, а не у мастера. Это редкая, но хорошая деталь, о которой стоит знать.

  • Ваш git pull не будет создавать никаких удаленных веток. Если у удаленного есть несколько веток, клон создает удаленные ветви remotes/origin/foo, remotes/origin/bar, ... в вашем хранилище. git fetch origin позаботится об этом в перечисленных вами шагах.

  • Вы также не настроили свою основную ветвь для отслеживания происхождения, что делает клон. Вы можете добавить это к перечисленным шагам как git config branch.master.remote origin; git config branch.master.merge refs/heads/master. Это очень важно - с вашими шагами, если вы проверили master и набрали git pull, он не будет знать, что делать.

Возможно, я пропустил одну или две вещи. Что касается трудностей, так или иначе, даже если предположить, что вы сгладите все различия между клоном по умолчанию и «ручным клоном», я бы посоветовал не изобретать заново git clone:

  • Это коротко. Зачем работать больше?

  • У него есть удобные опции для изменения его поведения. Такие вещи, как --shared, было бы очень трудно добавить к перечисленным командам.

  • Это гарантированно делать правильные вещи сейчас и в будущем. Что делать, если вы пропустили детали, как те, что выше? Что если git добавил глобальный параметр конфигурации, влияющий на клонов? Вы должны изменить свои команды, чтобы учесть это, но git clone уже знал бы.

  • [1 125]
26
ответ дан Cascabel 5 November 2010 в 18:11
поделиться
Другие вопросы по тегам:

Похожие вопросы: