Где находится рабочий каталог git? - PullRequest
2 голосов
/ 12 марта 2011

Товарищи по программированию, сегодня мое первое погружение в git с использованием Tower на Mac - жизнь слишком коротка, чтобы возиться с командной строкой;)

Я прочитал несколько вступлений и учебных пособий, но никто не ответил на вопрос, который яПишу о.У меня возникли проблемы с пониманием концепции рабочего каталога в git против SVN.

Что я сделал:

  1. Я создал локальное хранилище и указал его в папке, где находятся мои файлы проекта.
  2. Добавил и зафиксировал все файлы впапка.
  3. Отредактировал файл.Показан как измененный.
  4. Добавлен и зафиксирован файл.

Эти шаги сработали.

До сих пор меня не спрашивали о местонахождении рабочего каталога, и я не могу извлечь главный HEAD (опция отключена).Мой вопрос: моя исходная папка выступает в качестве рабочей папки для проверки?Когда работает команда checkout?Играется только когда у меня несколько веток?

Надеюсь, кто-нибудь сможет уточнить это, прежде чем я пойду дальше.

Ответы [ 3 ]

9 голосов
/ 12 марта 2011

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

Рабочий каталог имеет то же значение: это каталог, в котором вы извлекли хранилище (или тот, в котором вы создали локальное хранилище), и где находятся файлы, с которыми вы непосредственно работаете. Однако то, что SVN вызывает извлечение (а именно, копирование содержимого удаленного хранилища и «связывание» вашего хранилища с удаленным), называется клонированием в git. В git checking означает переключение на другую ветку или ревизию.

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

В git есть только один репозиторий, который содержит всю историю развития в виде ациклического графа ревизий. У ревизии есть один или два родителя, и, учитывая ревизию, любое количество ревизий может иметь его в качестве родителя (так много ревизий может ответвляться от одной ревизии, и ревизия может быть объединением двух последовательностей ревизий). В любой момент времени вы можете оформить конкретную ревизию. Эта операция сделает содержимое рабочего каталога таким же, каким оно было во время указанной ревизии (другими словами, оно «воспроизведет» все ревизии от начальной ревизии до указанной).

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

Наконец: в SVN HEAD ссылается на «основную» ветвь; в git он ссылается на коммит или ветвь, которые вы в данный момент извлекли.

5 голосов
/ 12 марта 2011

Немного более короткий ответ на ваши вопросы:

  • да, ваша исходная папка действует как рабочая папка для текущей ветки
  • нет команды checkout, к которой вы привыкли; вместо git checkout используется для переключения между ветвями
  • Вы можете переключиться на ветку master , которая создана по умолчанию - это будет заголовок по сравнению с SVN (но он не называется HEAD)
1 голос
/ 12 марта 2011

Subversion засоряет вашу рабочую копию «скрытыми» папками «.svn», которые содержат метаданные и копии исходных данных оформления заказа.Git помещает свои данные в одну папку .git в корневом каталоге проекта.

Если вы создадите новый репозиторий git с git init, вы сможете увидеть эту папку '.git' с волшебством командной строки ls -al (я уверен, что Mac OS также позволяет это графически).

Практически все, что вы делаете с git (кроме fetch, pull, pull), использует local репозиторий, скрытый в папке '.git'.Это одна из причин, которая делает Git таким быстрым.Если вы клонировали из другого хранилища, вы сначала зафиксировали бы свои изменения локально, а затем отправили их (в любое удобное для вас место) обратно в «origin».

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...