Git ветки с совершенно разным контентом

Поскольку Git имеет возможность отслеживать (и поддерживать его в чистоте) ветви с совершенно отличным контентом друг от друга, в одном и том же хранилище некоторые проекты (например, сам Git) начали использовать его.

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

Это может быть только я, выходец из SVN, но меня смущает отсутствие "общего" в этих ветках. Развитие / постановка / производство отраслей; те, кого я понимаю. Ветки за неполные функции; конечно, я тоже этим занимаюсь. Черт возьми, у тебя есть документация с одной веткой на язык. Но нет общих файлов?

Является ли это просто (возможно, недоиспользуемой и / или недооцененной) функцией в Git, к которой все должны относиться и к которой следует привыкнуть, или, возможно, опасным злоупотреблением со стороны кого-то, кому лень не достаточно дифференцировать два аспекта одного и того же проекта?

7 ответов

Решение

Я лично не буду хранить разный контент в разных ветках; в случае с документами и кодом я бы просто создал myproject.git и myproject-docs.git (и вложил в документ документы, если это было необходимо для процесса сборки).

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

Git отслеживает скоординированные изменения (текстовых) файлов в проекте, поэтому он не знает и не заботится о том, являются ли ветви объединяемыми или нет. Наличие независимых веток в репозитории Git похоже на наличие независимых проектов в репозитории Subversion, что является обычной практикой (из-за накладных расходов svn).

Поскольку структура данных Git сильно отличается от структуры SVN, вы можете делать с ними разные вещи. В SVN ветвь функций несколько необычна, а ветвь функций, которая не часто сливается со стволом, может быть "неприятным запахом", признаком того, что программист "потемнел" и создает код, который никогда не сможет интегрированы в проект. В Git ветвь функций - это совершенно безопасный и разумный рабочий процесс.

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

Когда я получил больше опыта в Git, то, что было странным, стало другим. Затем мне стало интересно, что я могу сделать с этим другим инструментом.

Я бы сказал, что это скорее ленивый обходной путь для того факта, что Git в настоящее время не может обрабатывать несколько проектов, хранящихся в одном репозитории. Вы можете сделать это, но нет никакого способа снести только тот, который вы хотите.

Я говорю "ленивый", потому что добавить эту функцию было бы не слишком ужасно, когда сами разработчики git обнаружили необходимость в ней (для хранения документов). Так как они использовали этот странный хак для веток, их стимул решить проблему для всех остальных значительно уменьшился.

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

Лично я до сих пор на заборе по этому поводу. Я понимаю, почему это может быть выгодно, но я не совсем уверен, что это лучший путь.

Я думаю, что это зависит от вашего проекта.

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

С другой стороны, я не буду хранить документы для своих проектов на работе, так как я буду редактировать их, кроме как на тикете типа "давайте обновим документы". На работе я не хочу, чтобы мои документы смешивались с моим источником, я просто хочу источник (типичное представление программиста, я знаю).

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

Это немного странно, когда вы привыкли к модели Subversion, представляющей дерево пользователям, но как только вы привыкнете к модели, это станет намного менее запутанным.

Git-репозиторий - это просто дерево объектов, которые объясняют, как преобразовать каталог из одного состояния в другое. У этих объектов есть родитель. Некоторые объекты имеют двух (или более) родителей; сливается. Некоторые объекты не имеют родителя; начальный коммит.

Насколько я понимаю, внутренне модель Subversion аналогична минусу концепции происхождения слияний. Это просто новые коммиты с удобной командой (svn merge) для исправления различий между двумя другими коммитами.

Я на самом деле использую эту функцию довольно часто для управления файлами конфигурации, которые запускались из одного каталога на разных хостах, например /etc/apache2, Это все равно что сказать: "Это альтернативное начало этого материала, но оно заброшено". Это позволяет мне сохранять состояние некоторых файлов перед тем, как перезаписать их, но не нужно беспокоиться о том, правильно ли они сливаются или вообще связаны с основной веткой.

В Subversion мне пришлось бы хранить эту резервную копию в каком-то не связанном месте (где-нибудь zip-файл) или в подкаталоге в хранилище. Кроме того, в Subversion, если я удаляю любую ссылку на эти файлы в текущем представлении дерева, становится очень трудно найти их снова.

Мнение и то, как я его использую и почему оно может показаться неправильным. В моем случае я создаю API для продукта. Теперь мне нужны разные возможности или функции, и я хочу разделить каждую возможность для продаж. Таким образом, я могу взимать разную плату за каждое обновление, оставляя другие ветки в исходном состоянии. Все ветки обновляемые. $$ Примеры: Версия Main предназначена для тестирования и разработки и не выпущена. Версия ветки 1.0- имеет базовые виджеты. Ветка версии 1.2- добавлены новые виджеты. Branch Professional- все возможности

Каждый со своей ценой.

Так что для продажи того, что вы разрабатываете, это отличный способ отслеживать.

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

Всего наилучшего вам всем.

Другие вопросы по тегам