Как осуществляется управление распределенным исходным кодом Git?

Я новичок в Git, работаю с UNIX SCCS и Microsoft Visual SourceSafe. Я только изучаю Git, и у него, кажется, огромная и болезненная кривая обучения. Я уже видел, как Git удалил все файлы данных, которые я не зафиксировал, что меня беспокоит. (Как утилита может удалять файлы данных без предупреждения, я не понимаю).

Линус Торвальдс в своем видео о Git утверждает, что Git распространяется, рекламирует преимущества распространения, но, кроме всех, у кого есть копия (клон) исходного кода, на самом деле не объясняет, как работает распространение.

Как Git помогает распространению? Как Git помогает восстановить потерянные файлы? Как работает дистрибутив Git? Могу ли я найти, где были распространены файлы? Есть ли учебник по дистрибутиву Git?

Заранее спасибо!


person PalaDolphin    schedule 02.03.2010    source источник
comment
Git не удалит неотслеживаемые файлы в вашем рабочем дереве, если только вы не удалите их явно с помощью git clean (но даже в этом случае вы должны передать флаг -f в git clean, иначе он ничего не удалит).   -  person mipadi    schedule 03.03.2010
comment
См. также stackoverflow.com/questions/645008/, чтобы узнать о разнице между хранилищем линейных версий (ClearCase, но похоже на SCCS) и инструментом DAG VCS (направленный ациклический граф), таким как Git.   -  person VonC    schedule 03.03.2010
comment
... или, если вы сделали git reset --hard.   -  person pioto    schedule 03.03.2010
comment
@pioto: git reset --hard не будет удалять незафиксированные файлы.   -  person mipadi    schedule 03.03.2010
comment
@mipadi: Вероятно, это было небрежное использование слова «не было зафиксировано» в значении «не было совершено изменений». Тем не менее, пункт остается, git ничего не сдул. OP запустил команду, которая делала именно то, что было задокументировано, скорее всего, reset --hard, как предполагает pioto.   -  person Cascabel    schedule 03.03.2010


Ответы (4)


Прочитайте это: http://www.newartisans.com/2008/04/git-from-the-bottom-up.html


Что касается других ваших вопросов:

Как работает Git?

Это недостаточно конкретный вопрос, чтобы на него можно было ответить. Но обычно Git работает, создавая объекты и помещая их в дерево. Объекты соответствуют изменениям, которые вы внесли в свой контент. Деревья сами по себе являются объектами. Git отслеживает изменения, внесенные в содержимое репозитория.

Как работает распространение?

Поскольку все репозитории могут быть серверами, разные репозитории могут сравнивать свои деревья и объекты и определять, какие изменения есть между текущим состоянием одного репозитория и другим. Таким образом, они могут отправлять/извлекать данные из других репозиториев.

Как это помогает?

Если вы не видите, как это может вам помочь, придерживайтесь MVSS.


Я думаю, что могут быть проблемы со словарным запасом. Раздача не является доставкой. Дистрибутив Git означает, что каждый репозиторий является сервером. Это не означает, что он будет отслеживать, где он был клонирован (хотя ваш собственный репозиторий может хранить список удаленных репозиториев, из которых можно извлечь / отправить).

Прочитайте PDF, на который я дал ссылку. Затем создайте репозиторий github, следуя их указаниям. Разветвите чужой репозиторий, любой, просто чтобы посмотреть, как он работает.

person glmxndr    schedule 02.03.2010

Git и Mercurial следуют очень похожим принципам работы с распределенной природой SCM. Я не могу говорить о хороших учебниках по Git, но есть несколько отличных работ по Mercurial.

Понимание Mercurial – содержит полезную информацию по тому вопросу, который вы задаете... что делает это означает, что он будет распространяться?

Книга Mercurial — для более подробных исследований.

person Ben Von Handorf    schedule 02.03.2010

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

Другие системы, такие как SVN (которую Линус упоминает в видео), имеют весь репозиторий на одном сервере. Каждый толкает и тянет с этого сервера.

Опять же, глядя на git, мои коммиты изолированы от моего компьютера. Когда я готов предоставить их другим, я публикую свои дополнения каким-то образом — возможно, на центральном сервере, таком как SVN, но это только один вариант. Я мог бы отправить вам по электронной почте мои изменения.

Предотвращение потери данных

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

Сравните это с SVN (или другими центральными репозиториями): если вы потеряете жесткий диск сервера, вам придется восстановить репозиторий из последней резервной копии, если у вас есть резервная копия. Это означало бы, что кто-то должен управлять сервером и обеспечивать выполнение резервных копий и т. д. В некотором смысле DVCS делает это по своей сути.

Конечно, есть и потеря данных из-за таких ошибок, как случайное удаление файлов, но это относится ко всем VCS.

person Frank V    schedule 02.03.2010
comment
Я думаю, здесь важно подчеркнуть, что слово, распространяемое в DVCS, означает именно то, что у нескольких людей есть клоны репозитория; Линус объяснил, как работает распространение в этом видео. - person Cascabel; 03.03.2010

Вероятно, вы перешли на другую ветку. Запустите git branch, чтобы увидеть, какие у вас есть ветки, затем git co <branchname>.

Лично я очень ненавижу git. Большая кривая обучения и странный интерфейс командной строки. Но сейчас это лучший выбор. Так что наслаждайтесь! Ах да, не изучайте VSS, если у вас тоже нет, вы научитесь ОЧЕНЬ ОЧЕНЬ плохим привычкам. VSS — это все, чего не должно быть в системе управления версиями.

person Byron Whitlock    schedule 02.03.2010
comment
за исключением того, что это не позволило бы ему изменить ветку с незафиксированными изменениями без сохранения - person Tesserex; 03.03.2010
comment
Если вы перейдете на другую ветку в git, когда у вас есть незафиксированные изменения, эти изменения будут перенесены в новую ветку. Так что этого не могло быть. проверить этот пример: gist.github.com/905515 - person thekindofme; 06.04.2011