Каковы основные понятия git, github, fork & branch.Как git сравнивается с SVN? - PullRequest
19 голосов
/ 09 февраля 2012

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

Мой опыт работы с VCS начался с Source Safe, а затем перешел на SVN и TFS.Я думаю, что застрял в старом образе системы CVS, как SVN и TFS.

То, что в Git считается серверной и клиентской сторонами.Из того, что я понял, нет четкого различия между ними.

В техническом смысле, что означает вилка.Это «тип» ветки?

Wat означает ветка в git?Это так же, как в SVN?

Также я искал хорошую визуализацию основных концепций Git, но не нашел ни одного, который бы работал для меня.

Ответы [ 5 ]

38 голосов
/ 05 марта 2012

Вот как понять Git:

  1. Забудьте все, что вы знаете о других VCS (временно!)
  2. Прочитайте Притча о Git . На самом деле прочитайте это, хотя, если вы будете скользить, вы пропустите материал и просто попытаетесь заполнить пробелы с вашими существующими знаниями SCM, что вас и отбрасывает.На самом деле, если вы действительно хотите понять, прочитайте этот пост вслух .

По своей сути, Git - это просто способ сохранить и восстановить снимки .Каждый снимок имеет «ID» (SHA1) и может иметь один или несколько «ссылок» (указателей) на него.Отделение?Просто более дружелюбное имя для конкретного снимка.Метки?То же самое.ГОЛОВА?Это просто «местоимение» для текущего снимка.Удобно, что каждый из этих снимков идет с описанием того, что изменилось - это описание является сообщением фиксации.

9 голосов
/ 09 февраля 2012

Git - это DVCS ( Распределенная Система контроля версий)

В Git (локально) есть каталог (.git /) в корневом каталоге проекта, в который вы фиксируете свои файлы.

Git - это DVCS ( Distributed Система контроля версий), которая позволяет вам часто сохранять копии («версии») файлов с возможностью объединения работ, выполненных более чем одним человеком, и у вас также есть способность работать в автономном режиме.

Git отличается от более традиционных CVS (систем управления версиями кода), таких как SVN (Subversion) или CVS, которые имеют ветви, но не имеют понятия «локальный и удаленный» (ваши коммиты напрямую на удаленный). С помощью git вы сначала фиксируете свой локальный репозиторий, а затем отправляете эти изменения на удаленный компьютер. Это поощряет более частую фиксацию и работу, выполняемую небольшими порциями. Он также намного лучше поддерживает работу в автономном режиме, поскольку вы можете выполнять фиксацию в автономном режиме, а затем синхронизировать и извлекать / нажимать при следующем подключении.

Git сохраняет каждое изменение в файле, сохраняя весь файл. В этом отношении он отличается от svn, и вы можете перейти к любой отдельной версии, не «воссоздавая» ее с помощью дельта-изменений.

Git не блокирует файлы и требует эксклюзивной блокировки для редактирования (вспоминаются более старые системы, такие как pvcs). На самом деле он выполняет потрясающую работу по объединению изменений файла (в одном файле!) Вместе во время извлечения или извлечения. Единственное время, когда вам нужно внести изменения вручную, это если два изменения затрагивают одну и ту же строку (и) кода.


Филиалы

Это когда вы хотите сохранить основной код, сделать копию (ветвь) и затем работать в этой ветке. Когда вы закончите, вы сливаете ветку обратно в главный репозиторий. Одним из примеров этого может быть, если вы работаете над обновлением до новой версии.
Некоторые магазины и отдельные лица выполняют всю работу, будь то функция, исправление ошибки или рутинная работа, в отдельных ветвях с отдельным процессом и / или назначенным лицом для объединения этих веток в мастер.
Таким образом, с веткой вы управляете ветвью, тогда как с вилкой кто-то еще контролирует принятие кода обратно. В любом случае это стандартное использование.

Github

github (удаленный) - это удаленный источник, в который вы обычно отправляете и извлекаете эти зафиксированные изменения, если у вас есть (или добавлены) такой репозиторий.
Так что локальные и удаленные на самом деле довольно разные.

Когда вы 'форк', т.е. нажимаете - enter image description here, скажем, на github, вы создаете копию кода в вашей учетной записи github. Когда вы делаете это в первый раз, это может показаться немного неуловимым, поэтому следите за тем, чтобы в чьем репозитории была указана база кода - либо первоначальный владелец, либо «пользователь», например, enter image description here

Получив локальную копию, вы можете вносить изменения по своему усмотрению (вытягивая и отправляя их на локальный компьютер). Когда вы закончите, вы отправляете «запрос на извлечение» поверх оригинального владельца / администратора репозитория (звучит странно, но на самом деле вы просто нажимаете на это: - enter image description here), и они «вытягивают» его.

Клонирование

Более распространенной для команды, работающей над кодом, является «клонирование» хранилища (щелкните значок «Копировать» на главном экране хранилища). Затем, локально наберите git clone [paste]. Это настроит вас локально, и вы сможете напрямую перемещать и извлекать файлы в общую папку github.

Визуализация

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

enter image description here

3 голосов
/ 09 февраля 2012

В отличие от CVS и SVN, которые основаны на файлах, Git основан на фиксации. Коммиты живут в репозитории как дерево коммитов. В git-репозитории есть 3 основных раздела: рабочий каталог stage и каталог репозитория.

Git не имеет обязательной концепции центрального хранилища. Каждый клон репозитория содержит полную историю коммитов и коммитов репозитория, который он скопировал.

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

Git - удивительный инструмент. Он служит не только способом контроля версий, но и значительно облегчает совместную работу и эксперименты. И это еще не все.

Я настоятельно рекомендую ProGit Book , чтобы помочь вам узнать больше о том, как и о чем Git.

1 голос
/ 05 марта 2012

Tinkertoys, идеальный инструмент моделирования для узла направленного ациклического графа

Git For Ages 4 And Up - это веселая беседа о Git и предоставляет удивительно полезную визуализация с использованием Tinkertoys .

1 голос
/ 09 февраля 2012

Есть хороший разговор о внутренностях Git Скотт Чакон .

Слайд-шоу с озвучкой: http://blip.tv/scott-chacon/git-talk-4113729
Слайды снова: http://www.slideshare.net/chacon/getting-git
Живая запись разговора: http://vimeo.com/1099027

...