Почему git checkout после git clone? - PullRequest
0 голосов
/ 06 сентября 2018

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

Всякий раз, когда мне нужно что-то извлечь из репозитория git с несколькими проектами внутри ( пример ), я вижу следующие инструкции:

  1. мерзавец клон ххх
  2. кд ххх
  3. git checkout ггг

Это немного озадачивает меня. Поскольку у меня уже есть весь репозиторий, с какой стати я хочу оформить интересующий меня проект, если я могу просто скопировать папку и делать с ней все, что мне нравится?

Ответы [ 2 ]

0 голосов
/ 06 сентября 2018

Примечание: я начал это как комментарий, но он достаточно длинный и действительно может использовать некоторое форматирование, поэтому я переместил его в ответ. Это ответ на ваш комментарий Тиму Байгелейзену:

Если вы ссылаетесь на мой пример ссылки, то проверка "Stereo_image_proc" работает, но я не вижу, чтобы это была одна из ветвей, как получилось?

Причина, по которой git checkout stereo_image_proc не жалуется (и, кажется, ничего не делает, на первый взгляд), заключается в том, что git checkout сама по себе на самом деле представляет собой две разные команды, объединенные в одну. По мнению некоторых людей (в том числе и у меня), это особенность или ошибка: аргумент git checkout может быть именем ветви или путем .

В частности:

  • git checkout <em>branch</em> просит Git переключиться, а иногда даже создать, а затем переключиться на ветку, имя которой вы указываете в командной строке.

    Переключение на ветвь - это удивительно сложный процесс, в конце концов, но он начинается достаточно просто: он меняет понятие Git на HEAD, так что вы находитесь в именованной ветке. У него есть еще одна очень полезная функция: перед тем, как Git фактически переключится на (и / или создаст) эту ветку, Git удостоверится, что это не затмит любую работу, которую вы случайно запустили на неправильно филиал.

  • git checkout <em>name1 name2 ... nameN</em>, с другой стороны, просит Git извлечь определенных файлов из некоторых именованных или подразумеваемых коммитов . Часто это лучше всего записать как git checkout -- <em>file</em>, где -- говорит Git, что имя не должно рассматриваться как имя branch . То есть, предположим, что у вас есть файл с именем master и вы хотите извлечь его: тогда git checkout master не будет работать, потому что это ответвление с именем master, но вы хотите файл с именем master. Так что git checkout -- master говорит Git: не ветвь, файл.

    Когда вы используете этот вид git checkout, вы говорите Git: Я знаю, что начал редактировать какой-то файл или файлы, но теперь я решил, что редактирование этого файла или всех этих файлов было ошибка. Поместите их обратно в исходное состояние, превратив их в предыдущую версию каждого файла. Например, предположим, что у вас есть файл с именем README.txt, вы начали его редактировать, а затем поняли, что вам следует создать новый файл документации. Вы копируете новый материал, добавленный в новый файл, но теперь вы хотите, чтобы README.txt вернулся к тому, что было до того, как вы начали его редактировать. Итак, вы запускаете git checkout README.txt, и стирает ваши изменения в файл.

    Но что касается Git, присвоение имени каталога здесь (или папке, если вы предпочитаете этот термин) означает каждый файл в каталоге, включая любые подкаталоги рекурсивно, Поскольку stereo_image_proc является каталогом, а не именем ветви, вы получаете эту вторую форму git checkout.

Суть в том, что git checkout stereo_image_proc говорит Git стереть все изменения, которые вы внесли в любые файлы в этом каталоге . Если вы не внесли никаких изменений, ну, нет проблем! Но если у вас есть, это может быть довольно пагубным.

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

0 голосов
/ 06 сентября 2018

Первые два шага просто скажут вам git clone, который будет клонирован в какую-то папку, а затем cd в эту папку. Третий шаг был бы необходим, только если вы не хотели бы начать работать с master или веткой по умолчанию этого репо. Обычно после клонирования git по умолчанию выбирается ветвь master. Итак, если ваши инструкции требуют, чтобы вы работали над какой-то другой веткой yyy, тогда третий шаг имеет смысл.

Выполнение git checkout yyy автоматически создаст локальную ветвь с именем yyy , если есть ветка отслеживания в вашем репо с тем же именем. В этом случае он также переключится на эту вновь созданную локальную ветвь.

...