Это немного странно, когда вы привыкли к модели Subversion, представляющей дерево пользователям, но как только вы привыкнете к модели, это станет намного менее запутанным.
Git-репозиторий - это просто дерево объектов, которые объясняют, как преобразовать каталог из одного состояния в другое. У этих объектов есть родитель. Некоторые объекты имеют двух (или более) родителей; сливается. Некоторые объекты не имеют родителя; начальный коммит.
Насколько я понимаю, внутренне модель Subversion аналогична минусу концепции происхождения слияний. Это просто новые коммиты с удобной командой (svn merge
) для исправления различий между двумя другими коммитами.
На самом деле я использую эту функцию довольно часто для управления файлами конфигурации, которые запускаются из одного каталога на разных хостах, например /etc/apache2
. Это все равно что сказать: «Это альтернативное начало этого материала, но оно заброшено». Это позволяет мне сохранять состояние некоторых файлов перед тем, как перезаписать их, но не нужно беспокоиться о том, правильно ли они объединяются или вообще связаны с основной веткой.
В Subversion мне пришлось бы хранить эту резервную копию в каком-то не связанном месте (где-нибудь zip-файл) или в подкаталоге в хранилище. Кроме того, в Subversion, если я удаляю любую ссылку на эти файлы в текущем представлении дерева, становится очень трудно найти их снова.