После этого вы можете просто запустить:
из каталога репозитория git, лучше всего подходит для меня.
Это потянет все последние, включая подмодули.
- 10 Да, ответ с наибольшим количеством голосов был лучшим способом сделать это в 2009 году, но теперь это определенно проще и интуитивно понятнее.
- 2 @MichaelScottCuthbert, спасибо, я уверен, что через 3 года эта команда тоже будет безумной
- 5 Тем не менее, это не проверяет последнюю ревизию из подмодуля, а только последнюю ревизию, которую отслеживает родительский модуль.
- 4 @NathanOsman, что вы хотите … вы получите неработающий код, если не будете следовать отслеживанию родительских версий. Если вы сопровождаете родительский элемент, вы можете обновить его самостоятельно и зафиксировать.
- 2 Да, но, насколько я понимаю, ОП не хотела этого.
Примечание: это с 2009 года и, возможно, тогда это было хорошо, но сейчас есть варианты получше.
Мы используем это. Это называется :
Просто поместите его в подходящий каталог bin (/ usr / local / bin). Если в Windows вам может потребоваться изменить синтаксис, чтобы он работал
Обновить:
В ответ на комментарий оригинального автора о включении всех HEAD всех подмодулей — это хороший вопрос.
Я почти уверен что не имеет команды для этого внутри. Для этого вам нужно будет определить, что на самом деле означает HEAD для подмодуля. Это может быть так же просто, как сказать самая современная ветка и т. д.
После этого создайте простой сценарий, который выполняет следующие действия:
- проверять для «модифицированных» репозиториев. Об этом свидетельствует первый символ строк вывода. Если суб-репо изменено, возможно, вы НЕ захотите продолжить.
- для каждого указанного репо, cd в его каталог и запустите . Проверить на наличие ошибок.
- В конце я предлагаю вам распечатать дисплей для пользователя, чтобы указать текущий статус подмодулей — возможно, предложить им добавить все и зафиксировать?
Я хотел бы упомянуть, что этот стиль не совсем то, для чего были разработаны подмодули git. Как правило, вы хотите сказать, что «LibraryX» имеет версию «2.32», и будет оставаться так, пока я не скажу «обновить».
В некотором смысле это то, что вы делаете с описанным скриптом, но в большей степени автоматически
Требуется осторожность!. Обновление 2:
Обновление 2:
Если вы работаете на платформе Windows, вы можете попробовать использовать Python для реализации скрипта, поскольку он очень эффективен в этих областях. Если вы используете unix / linux, я предлагаю просто сценарий bash.
Нужны пояснения? Просто оставьте комментарий.
- Не думаю, что я этого хочу. Разве это не потянет версию подмодулей, с которыми в последний раз был зафиксирован суперпроект. Хочу вытащить головную версию всех подмодулей.
- 3 Это отлично работает и работает не только для обновления подмодулей, но и для их первой загрузки, если это то, что вам нужно.
- Я просто получаю: «Для текущей ветки нет информации для отслеживания. Укажите, с какой веткой вы хотите объединиться». Что бы я ни старался: /
- 10 Почему бы не создать для него псевдоним? а затем используйте его как без скриптов.
- Спасибо, по какой-то причине, хотя у меня есть git 1.9.1, мне пришлось выполнить после первого рывка, в который были включены подмодули, чтобы все заработало правильно.
Хенрик на правильном пути. Команда foreach может выполнять любой произвольный сценарий оболочки. Могут быть два варианта получения самой последней версии:
а также,
Это будет проходить через все инициализирован подмодули и запустить заданные команды.
В Windows у меня работало следующее.
- 6 Это явно не то, о чем просила ОП. Он будет обновляться только до связанной фиксации подмодуля, а не до последней.
- 52 Однако это единственное, что на этой странице заставило git извлекать подмодули, когда я впервые проверил репо.
- 2 Также можно использовать: git submodule update —init —recursive (особенно если рассматриваемый подмодуль — RestKit из свежего клона)
Может случиться так, что ветвью по умолчанию ваших подмодулей является не , вот как я автоматизирую полное обновление подмодулей Git:
из многих ответов на многие вопросы этот сработал для меня (2019, ошибка github с определенными хэш-идентификаторами)
редактировать:
—— Устаревший комментарий ниже ——
Разве это не официальный способ сделать это?
Использую каждый раз. Пока проблем нет.
Редактировать:
Я только что обнаружил, что вы можете использовать:
Что также будет рекурсивно вытягивать все подмодули, то есть зависимости.
- 5 Ваш ответ не отвечает на вопрос OP, но чтобы сделать то, что вы предложили, вы можете просто сказать
- 2 Понятно, нужна последняя версия. Что ж, это может быть полезно, если есть вложенные подмодули:
- 1 Я не мог заставить какой-либо из них что-либо загрузить — однако «git submodule update —init —recursive» у меня работал.
Инструмент 1: Добавление членов команды
Как правило, существует два способа настройки Github для совместной работы:
- Организации. Владелец организации может создавать множество команд с разными уровнями доступа для различных репозиториев
- Сотрудники. Владелец репозитория может добавлять коллабораторов с доступом Read + Write для одного репозитория
Organizations
Если вы контролируете несколько команд и хотите установить разные уровни доступа для каждой команды с различными членами и добавить каждого участника в разные репозитории, то организация будет для вас наилучшим вариантом. Любая учетная запись пользователя Github уже может создавать бесплатные организации для репозиториев с открытым исходным кодом. Чтобы создать организацию, просто перейдите на страницу настроек своей организации:
Чтобы получить доступ к странице команд для вашей Организации, вы можете просто перейти на , чтобы просмотреть их или даже посетить Для создания новых команд с тремя уровнями доступа, такими как:
- Pull Only: выборка и слияние с другим репозиторием или локальной копией. Доступ только для чтения.
- Push and Pull: (1) наряду с обновлением удаленного репозитория. Читайте + Запись.
- Push, Pull & Administrative: (1), (2) наряду с правами на информацию о выставлении счетов, созданием команд, а также удаление аккаунтов организации. Чтение + запись + доступ администратора
Соавторы
Коллабораторы (соавторы) используются для предоставления возможности «читать + писать» в один репозиторий, принадлежащий личной учетной записи. Чтобы добавить Collaborators (другие личные учетные записи Github), перейдите на страницу :
После этого каждый соавтор увидит изменение статуса доступа на странице репозитория. После того, как у нас есть доступ на запись к репозиторию, мы можем сделать , поработать над изменениями, сделать для извлечения и слияния любых изменений в удаленном репозитории и, в конечном счете, , для обновления удаленного репозитория с собственными изменениями:
Что такое подмодули Git
Подмодули в Git — это просто стандартные репозитории Git. Никаких модных инноваций, все те же репозитории Git, которые мы все так хорошо знаем. Это тоже часть мощи субмодулей: они такие надежные и простые, потому что они «утомительны» (с технологической точки зрения) и прошли полевые испытания.
Единственное, что делает репозиторий Git подмодулем, — это то, что он помещается в другой, родительский репозиторий Git.
Помимо этого, подмодуль Git остается полностью функциональным репозиторием: вы можете выполнять все действия, которые вы уже знаете из своей «нормальной» работы с Git — от изменения файлов до фиксации, извлечения и отправки. В подмодуле возможно все.
Добавление подмодуля
Возьмем классический пример и предположим, что мы хотим добавить в наш проект стороннюю библиотеку. Прежде чем мы перейдем к какому-либо коду, имеет смысл создать отдельную папку, в которой такие вещи могут иметь дом:
Теперь мы готовы добавить сторонний код в наш проект — но упорядоченно, используя подмодули. Допустим, нам нужна небольшая библиотека JavaScript для преобразования часовых поясов:
Когда мы запускаем эту команду, Git начинает клонировать репозиторий в наш проект в виде подмодуля:
И если мы посмотрим на нашу папку с рабочей копией, мы увидим, что файлы библиотеки действительно прибыли в наш проект.
«Так в чем разница?» вы можете спросить. В конце концов, файлы сторонней библиотеки находятся здесь, как если бы мы скопировали их. Ключевое отличие в том, что они содержатся в собственном репозитории Git ! Если бы мы просто загрузили несколько файлов, добавили их в наш проект, а затем зафиксировали их — как и другие файлы в нашем проекте — они были бы частью того же репозитория Git. Подмодуль, однако, следит за тем, чтобы файлы библиотеки не «просачивались» в репозиторий нашего основного проекта.
Посмотрим, что еще произошло:.gitmodulesв корневой папке нашего основного проекта был создан новый файл. Вот что он содержит:
Этот.gitmodulesфайл — одно из нескольких мест, где Git отслеживает подмодули в нашем проекте. Другой.git/config, который теперь заканчивается так:
И, наконец, Git также хранит копию.gitрепозитория каждого подмодуля во внутренней.git/modulesпапке.
Все это технические детали, которые вам не нужно запоминать. Однако это, вероятно, поможет вам понять, что внутреннее обслуживание подмодулей Git довольно сложно
Вот почему важно убрать одну вещь: не связывайтесь с настройкой подмодуля Git вручную! Если вы хотите переместить, удалить или иным образом манипулировать подмодулем, сделайте себе одолжение и не пытайтесь сделать это вручную. Либо используйте соответствующие команды Git, либо графический интерфейс рабочего стола для Git, например «Tower», который позаботится об этих деталях за вас
Давайте посмотрим на статус нашего основного проекта, теперь, когда мы добавили подмодуль:
Как видите, Git рассматривает добавление подмодуля как изменение, как и любые другие. Соответственно, мы должны зафиксировать это изменение, как любое другое:
Совместная работа и обновление проектов
Не так уж много команд в Git требуют сетевого подключения для своей работы, практически все команды оперируют с локальной копией проекта.
Когда вы готовы поделиться своими наработками, всего несколько команд помогут вам работать с удалёнными репозиториями.
git fetch
Команда связывается с удалённым репозиторием и забирает из него все изменения, которых у вас пока нет и сохраняет их локально.
Мы познакомились с ней в разделе Получение изменений из удалённого репозитория — Fetch и Pull главы 2 и продолжили знакомство в разделе Удалённые ветки главы 3.
Мы использовали эту команду в нескольких примерах из раздела Участие в проекте.
Мы использовали её для скачивания запросов на слияние (pull request) из других репозиториев в разделе Ссылки на запрос слияния главы 6, также мы рассмотрели использование для работы с упакованными репозиториями в разделе Создание пакетов главы 7.
Мы рассмотрели тонкую настройку в главе и Спецификации ссылок.
git pull
Команда работает как комбинация команд и , т. е. Git вначале забирает изменения из указанного удалённого репозитория, а затем пытается слить их с текущей веткой.
Мы познакомились с ней в разделе Получение изменений из удалённого репозитория — Fetch и Pull главы 2 и показали как узнать, какие изменения будут приняты в случае применения в разделе Просмотр удаленного репозитория главы 2.
Мы также увидели как она может оказаться полезной для разрешения сложностей при перемещении веток в разделе Меняя базу, меняй основание главы 3.
Мы показали как можно использовать только URL удалённого репозитория без сохранения его в списке удалённых репозиториев в разделе Извлечение удалённых веток главы 5.
И наконец мы показали как проверять криптографические подписи полученных коммитов, используя опцию в разделе Подпись коммитов главы 7.
git push
Команда используется для установления связи с удалённым репозиторием, вычисления локальных изменений отсутствующих в нём, и собственно их передачи в вышеупомянутый репозиторий.
Этой команде нужно право на запись в репозиторий, поэтому она использует аутентификацию.
Мы познакомились с этой командой в разделе Отправка изменений в удаленный репозиторий (Push) главы 2.
Там мы рассмотрели основы обновления веток в удалённом репозитории.
В разделе Отправка изменений главы 3 мы подробнее познакомились с этой командой, а в разделе Отслеживание веток главы 3 мы узнали как настроить отслеживание веток для автоматической передачи на удалённый репозиторий.
В разделе Удаление веток на удалённом сервере главы 3 мы использовали флаг для удаления веток на сервере, используя .
На протяжении раздела Участие в проекте мы показали несколько примеров использования для совместной работы в нескольких удалённых репозиториях одновременно.
В разделе Публикация изменений подмодуля главы 7 мы использовали опцию чтобы удостовериться, что все подмодули будут опубликованы перед отправкой на проекта на сервер, что может быть реально полезным при работе с репозиториями, содержащими подмодули.
В разделе Прочие хуки на стороне клиента главы 8 мы поговорили о триггере , который может быть выполнен перед отправкой данных, чтобы проверить возможность этой отправки.
Наконец, в разделе Спецификации ссылок для отправки данных на сервер главы 10 мы рассмотрели передачу данных с полным указанием передаваемых ссылок, вместо использования распространённых сокращений.
Это может быть полезным если вы хотите очень точно указать, какими изменениями хотите поделиться.
git remote
Команда служит для управления списком удалённых репозиториев.
Она позволяет сохранять длинные URL репозиториев в виде понятных коротких строк, например «origin», так что вам не придётся забивать голову всякой ерундой и набирать её каждый раз для связи с сервером.
Вы можете использовать несколько удалённых репозиториев для работы и поможет добавлять, изменять и удалять их.
Эта команда детально рассмотрена в разделе Работа с удалёнными репозиториями главы 2, включая вывод списка удалённых репозиториев, добавление новых, удаление или переименование существующих.
Она используется практически в каждой главе, но всегда в одном и том же виде: .
git archive
Команда используется для упаковки в архив указанных коммитов или всего репозитория.
Мы использовали для создания тарбола ( файла) всего проекта для передачи по сети в разделе Подготовка релиза главы 5.
git submodule
Команда используется для управления вложенными репозиториями.
Например, это могут быть библиотеки или другие, используемые не только в этом проекте ресурсы.
У команды есть несколько под-команд — , , и др. — для управления такими репозиториями.
Эта команда упомянута и полностью раскрыта в разделе Подмодули главы 7.
prev | next
Инструмент 8: документация
В этом разделе мы рассмотрим два метода создания документации:
- Формальная документация: Github Wiki для создания документации для исходного кода
- Неофициальная документация: Github Hubot документирует обсуждения между членами команды и автоматизирует поиск информации, взаимодействуя с бот-чатом!
- Упоминания, ярлыки и эмози
Github Wiki
В каждом репозитории может быть создана Github Wiki, и это может оказаться очень удобно иметь в одном репозитории как исходный код, так и документацию для него. Чтобы создать Wiki, просто перейдите на вкладку Wiki в главном заголовке, и вы готовы к созданию страниц с информацией. Сама Wiki имеет собственное управление версиями, и данные могут быть клонированы на наш локальный компьютер для обновлений или даже автономного доступа.
Одна вещь, которую я нахожу очень полезной, — это интеграция Github Wiki в основной проект исходного кода, так что мне не нужно поддерживать два отдельных проекта git. Для этого я добавляю Wiki git repo как субмодуль из ветки master. Если вы используете Travis CI или любой другой CI, убедитесь, что инструмент сборки игнорирует подмодуль wiki. Для файла Travis CI добавьте следующее:
Затем добавьте wiki-подмодуль git в основной репозиторий кода:
Теперь Wiki будет выглядеть как подмодуль в основном проекте с исходным кодом.
Github Hubot
Hubot — это просто бот-чат, который может получать информацию или предоставлять уведомление при подключении к Github коммитам, issues или активности. В команде, которая стремится значительно сократить количество встреч или даже полностью устранить их, Hubot с интерфейсом чата среди членов команды помогает документировать каждую отдельную дискуссию. Это, безусловно, способствует гибкому графику работы, так как никто не должен присутствовать одновременно для обсуждения. Предупреждение: Hubot ужасно вызывает привыкание!
Итак давайте начнем с настройки Hubot, размещенным на Heroku, и ботом с интерфейсом чата Campfire! Для обоих и Heroku и Campfire есть бесплатные версии, с которым можно начать.
- Мы воспользуемся версией Hubot от Github’s Campfire. Если вы хотите, вы можете выбрать адаптеры для других чатов, таких как Skype, IRC, Gtalk и т.д.
- Откройте новую учетную запись Campfire только для Hubot, и эта учетная запись создаст новую комнату для чата, в которую все остальные будут приглашены позже.
- Разверните Hubot на Heroku с помощью этой инструкции, приведенной на Hubot Wiki. Не волнуйтесь, если URL-адрес приложения heroku дает сообщение , поскольку по умолчанию еще нечего делать.
- С учетной записью Hubot Campfire пригласите себя. Теперь войдите в свою учетную запись Campfire и выполните команду . Эта команда предоставит вам все доступные команды для hubot.
- Попробуйте что-нибудь, например, или .
- Затем добавим скрипт Hubot. Существует множество доступных команд с иллюстрациями.
- В качестве примера мы добавим скрипт github-commits, чтобы каждый раз, когда есть фиксация, Hubot уведомит нас об этом в чате. Поместите файл внутри папки .
- Обновите файл с соответствующими зависимостями, как указано в начале каждого файла сценария hubot, в комментариях.
- Разверните изменения на Heroku еще раз с помощью .
- Перейдите в репозиторий на Github, чье уведомление об фиксации будет отображаться в чате. Добавьте веб-хук в настройки репозитория. В случае с указанным сценарием «github-commit» webhook будет
- В следующий раз, когда в репозитории будет фиксация, Hubot будет об этом говорить и писать в чат!
Ознакомьтесь с другими скриптами Hubot, связанными с Github, или если вы хотите написать один, есть крутой учебник по этому поводу! Короче говоря, Hubot может значительно добавить веселья в документировании и уведомлении командных дискуссий о важных коммитах, проблемах и действиях, происходящих с нашими репозиториями на Github. Попробуйте его!
В качестве заключительной заметки о командной работе на Github, вот несколько советов по производительности:
- Упоминания. В любой текстовой области мы можем указать другого пользователя github с , и пользователь получит уведомление о комментарии
- Клавиши быстрого доступа — нажмите Для доступа к клавишам быстрого доступа Github на любой странице.
- Emoji — Используйте список Emoji, Github textareas также поддерживает вставку этих значков. Попробуйте их и повеселитесь со своими товарищами по команде!
Клонирование проекта с помощью подмодулей Git
В нашем примере выше мы добавили новый подмодуль в существующий репозиторий Git. Но как насчет «наоборот», когда вы клонируете репозиторий, который уже содержит подмодули?
Если бы мы выполнили обычную операцию git clone в командной строке, мы бы загрузили основной проект — но мы обнаружили бы, что любая папка подмодуля пуста! Это еще раз является ярким доказательством того, что файлы подмодулей разделены и не включены в их родительские репозитории.
В таком случае, чтобы заполнить подмодули после клонирования их родительского репозитория, вы можете просто выполнить их git submodule update —init —recursiveвпоследствии. Еще лучший способ — просто добавить —recurse-submodulesопцию сразу при звонке git clone.
Инструмент 5: Управление проектами
В то время как issues Github имеют возможности управления проектами с помощью Issues и Milestones, некоторые команды могут предпочесть другой инструмент из-за других функций или существующего рабочего процесса. В этом разделе мы увидим, как мы можем связать Github с двумя другими популярными инструментами управления проектами — Trello и Pivotal Tracker. С помощью сервисов Github мы можем автоматизировать задачу обновления с помощью коммитов, проблем и многих других действий. Эта автоматизация помогает не только экономить время, но и повышает точность обновлений для любой команды разработчиков программного обеспечения.
Github и Trello
Trello обеспечивает простой, визуальный способ управления задачами. Используя Agile Software Development, карточки Trello могут эмулировать простую виртуальную Kanban Board. В качестве примера мы автоматически создадим карточку Trello всякий раз, когда будет появляться новый пул реквест с помощью Github Service Hooks. Давайте пройдем через все шаги!
- Откройте свой аккаунт в Trello, если у вас его еще нет, и создайте новую доску Trello.
- Перейдите в репозиторий Github> Настройки> Хуки для сервисов> Trello
- Получите в разделе «Примечания по установке» № 1 с гиперссылкой, предоставленной для аутентификации.
- В разделе Примечания по установке #2 используйте URL-адрес для создания форматированной в json структуры, которая дает нам для каждой карточки Trello. является частью URL-адреса, когда мы посещаем доску на странице . можно создать с помощью гиперссылки, указанной в разделе Примечания по установке #1.
- Вернитесь в сервисные хуки Github, введите и . Установите Active, Test Hook, и теперь все настроено на автоматическое обновление каждый раз, когда будет новый пул реквест.
- В следующий раз, когда появится запрос, у карточки Trello Pull Request автоматически будет новый элемент!
Github и Pivotal Tracker
Pivotal Tracker — еще один легкий гибкий инструмент управления проектами, в котором планирование на основе истории позволяет команде легко взаимодействовать, мгновенно реагируя на различные изменения и прогресс проекта. Основываясь на текущем прогрессе команды, он также может создавать диаграммы для анализа скорости команды, итераций разработки, релизов и прочего. В этом кратком примере мы автоматически доставим историю, связав ее с коммитом на Github!
- Создайте новый проект в Pivotal Tracker с новой Story которая должна быть сделана.
- Перейдите в профиль> API-токен (справа внизу). Скопируйте указанный API токен.
- Вернитесь в репозиторий Github> Настройки> Хуки для сервисов> Pivotal Tracker. Вставьте токен, установите флажок Активно и нажмите «Обновить настройки». Теперь все настроено на автоматическое предоставление данных для Pivotal Tracker Stories из коммитов на Github!
- Наконец, мы зафиксируем наши изменения и добавим идентификатор трекера в сообщение фиксации в формате
- Теперь, когда мы вернемся к Pivotal Tracker, мы увидим, что история была автоматически доставлена со ссылками на конкретный коммит Github, который показывает изменения файла!
С примерами Trello и Pivotal Tracker ясно, что мы можем тесно связать наш список задач и обновления с нашими коммитами. Это огромная экономия времени при работе в команде, и это повышает точность при связывании задач с точными фиксациями. Хорошей новостью является то, что если вы уже используете другие инструменты управления проектами, такие как Asana, Basecamp и другие, вы также можете создать Service Hooks аналогичным образом. Если для вашего текущего инструмента управления проектами нет существующих сервисных хуков, вы даже можете их создать сами!
Использование Github не для разработки
Большинство думает использовать Github только для программных проектов. В конце концов, Github был создан специально для создания кода. Но есть некоторые классные репозитории Github, которые используются для проектов, не связанных с кодом, и они были одинаково великолепны для сотрудничества и обсуждения. Поскольку эти проекты также доступны с открытым исходным кодом, и каждый может внести свой вклад, быстро исправлять ошибки, легко сообщать об ошибках и эффективно сотрудничать с единомышленниками. Просто ради интереса, вот некоторые из них:
- Исправления для дома: отслеживание проблем в качестве инструмента мониторинга
- Книги: Маленькая книга по MongoDB, Основы Backbone
- Тексты песен: JSConfEU Тексты песен
- Найти друга: boyfriend_require
- Наставничество: Wiki
- Геномические данные: эпидемия Ash Dieback
- Блоги: CSS Wizardry
И интересно, что думает об этом команда Github?
Инструмент 6: Непрерывная интеграция
Непрерывная интеграция (CI) является важной частью всех проектов разработки программного обеспечения, с которыми работают команды разработчиков. CI гарантирует, что, когда разработчик выкатывает свой код, автоматическая сборка (включая тесты) быстро обнаруживает ошибки интеграции
Это определенно уменьшает ошибки интеграции и делает быструю итерацию намного более эффективной. В этом примере мы увидим, как можно использовать Travis CI вместе с Github для CI для обнаружения ошибок, а также для рекомендаций слияния, когда проходят все тесты.
Настройка Travis CI
Мы будем использовать простой проект «hello world» для node.js вместе с grunt.js в качестве инструмента сборки для настройки Travis CI проекта. Вот файлы, находящиеся в проекте:
- Файл — это проект nodejs. Здесь мы намеренно не будем оставлять точку с запятой, чтобы грант не смог собрать билд:
- определяет зависимости:
- Инструмент сборки имеет для простоты только одну задачу (линтинг) :
- — это файл конфигурации Travis, который заставит Travis запускать наши тесты:
- Затем войдите в Travis со своей учетной записью Github и включите привязку репозитория под вкладкой репозитория.
- Если прошлый шагне вызывает сборку, нам придется вручную настроить сервисный хук. Чтобы настроить его вручную, скопируйте токен под вкладкой профиля.
- Вернитесь в репозиторий Github, чтобы настроить сервисные хуки Github Travis с помощью токена.
- Сначала нам нужно сделать вручную для запуска первой сборки Travis, и если все будет в порядке, просто посетите , чтобы увидеть что сборка прошла!
Travis CI и пул реквесты
Раньше, без какого-либо CI в процессе пул реквеста, этапы выполнялись примерно так: 1) создание запроса (2) слияние (3), тестируем все ли работает. Когда Travis CI подключится к пул реквесам, мы сможем инвертировать шаги 2 и 3, что еще больше ускорит принятие решений о том, следует ли сливать изменения, так как Travis даст нам статус билда для каждого пул реквеста. Давайте посмотрим, как это сделать.
- Отправьте пул реквест с успешным билдом, и Travis сделает свою магию, чтобы вы знали, что слияние будет успешным еще даже до самого слияния
- Если билд с этим пул реквестом падает, Travis также предупредит вас.
- Если мы нажмем на кнопку красного предупреждения, она также будет ссылаться на страницу travis, чтобы показать нам детали сборки.
Travis CI с Github чрезвычайно полезен для команд из-за автоматических сборок и немедленного уведомления. Это, безусловно, делает цикл исправления ошибок намного короче. Если вы используете Jenkins, еще один популярный инструмент CI, то вы тоже можете настроить сервисные хуки Github.
Хранение кода отдельно
Чтобы понять, почему подмодули Git действительно являются бесценной структурой, давайте рассмотрим случай без подмодулей. Когда вам нужно включить сторонний код (например, библиотеку с открытым исходным кодом), вы, конечно, можете пойти простым путем: просто загрузите код с GitHub и скопируйте его куда-нибудь в свой проект. Хотя этот подход, безусловно, быстрый, он определенно грязный по двум причинам:
- Копируя сторонний код в свой проект грубой силой, вы эффективно смешиваете несколько проектов в один. Граница между вашим собственным проектом и проектом другого человека (библиотеки) начинает стираться.
- Всякий раз, когда вам нужно обновить код библиотеки (потому что ее сопровождающий предоставил отличную новую функцию или исправил неприятную ошибку), вам снова придется загружать, копировать и вставлять. Это быстро становится утомительным процессом.
Общее правило в разработке программного обеспечения «держать отдельные вещи отдельно» существует не просто так. И это, безусловно, верно для управления сторонним кодом в ваших собственных проектах. К счастью, концепция подмодуля Git была создана именно для таких ситуаций.
Но, конечно, субмодули — не единственное доступное решение для такого рода проблем. Вы также можете использовать одну из различных систем «менеджеров пакетов», которые предоставляют многие современные языки и фреймворки. И в этом нет ничего плохого!
Однако вы можете возразить, что архитектура подмодулей Git имеет несколько преимуществ:
- Подмодули обеспечивают согласованный и надежный интерфейс — независимо от того, какой язык или фреймворк вы используете. Особенно если вы работаете с несколькими технологиями, у каждой из них может быть свой собственный менеджер пакетов со своим набором правил и команд. С другой стороны, субмодули всегда работают одинаково.
- Не каждый фрагмент кода может быть доступен через диспетчер пакетов. Возможно, вы просто хотите поделиться своим кодом между двумя проектами — ситуация, когда подмодули могут предложить самый простой рабочий процесс.