Ответы пользователя по тегу Git
  • Git Flow. Как удалить коммиты после удаления ветки?

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

    Вообще то, что у вас на скрине - это нормальная ситуация. Если человеку нужны только коммиты в мастере, то его инструмент должен позволять ему посмотреть только их. Так что это не проблема наличия коммитов, а проблема того, где вы их смотрите.

    Если уж вы действительно считаете, что некоторые коммиты "лишние" и их можно было бы объединить, почитайте про git squash. Только это желательно делать до пуша бранча, и уж точно до мёржа - сейчас мёрж-коммит намертво прицеплен к последнему коммиту из фичебранча.

    Вообще почитайте лучше еще про Git и про ваш UI к нему, удаление коммитов из середины смёрженного бранча с точки зрения Git - абсолютно бредовая затея. В частности, почитайте про то, что такое ветки: это всего лишь перемещающиеся указатели на коммит, и при удалении ветки коммиты удалятся только в том случае, если они не были никуда зацеплены (смёржены). После мёржа удаление ветки - это лишь удаление указателя, которое как бы говорит нам, что разработка этого бранча закончена, и дальнейших коммитов в рамках этого бранча уже не будет.
    Ответ написан
  • Как правильно настроить git?

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

    А так действительно могу предложить только subtree. Хотя смысла в такой организации работы, конечно, не вижу.
    Ответ написан
    2 комментария
  • GIT как правильно пользоваться?

    Нужно и ли ставить git на VPS-Сервер?

    Не обязательно, зависит от того, какой вариант доступа вы выберете - через SSH, по HTTP или вообще поставите какой-нибудь Gitlab или Stash (только тут уже зависит от мощностей вашего VPS, не факт что хватит). Гуглите инструкции по установке (git over ssh, git over http), и смотрите, что вам нужно на сервере.

    Учитывает ли GIT изменения в MySql?Если кто то допустим добавит новую таблицу

    Git к реляционным СУБД прямого отношения не имеет, и непосредственно учитывать изменения в БД он не может в принципе. Git работает с файлами и файловой системой, фактически это многоверсионная файловая система поверх обычной ФС, с ветвящимся версионированием. Для ветвящегося версионирования непосредственно в БД сейчас нет распространенных решений (существует пара реализаций, но вы не захотите с ними иметь дело). Поэтому разработчики решают задачу версионирования и обновления данных и схемы с помощью специальных скриптов - "миграций", которые хранят в обычных текстовых файлах в Git. Это могут быть как обыкновенные SQL-скрипты, так и скрипты под конкретный фреймворк/библиотеку для работы с БД. При разработке проекта каждый раз когда необходимо изменить схему или начальные данные в БД, пишется миграция, которая обновляет схему или данные в БД при деплое проекта. Гуглите "PHP migrations" и обрящете.

    Нужен ли github?Или другие подобные сайты

    Вам решать. Если у вас есть VPS и вы готовы настроить там Git для совместной работы, то гитхаб вам не обязателен. Если не хотите париться, и вам проще заплатить за приватную репу - пожалуйста. Если приватность репозитория вам не нужна - можете прямо сейчас создать организацию на гитхабе и пользоваться.

    Как вообще все это организовать?

    Аспектов всяких много, задавайте конкретные вопросы. В двух словах о налаживании работы веб-студии не расскажешь.

    В интернете толком не нашел примеров использования с нуля на боевых проектах

    Использования чего? Git? А что вам осталось непонятным?

    Т.е можно какоую-нибудь пошаговую инструкцию, типа

    1. Ставите на рабочих станциях клиент Git.
    2. Настраиваете доступ к общему репозиторию на сервере.
    3. Совместная работа организуется путём выбора существующей или выработки своей методики версионирования проекта и ветвления состояния репозитория. Git Flow обычно советуют как достаточно простую и универсальную модель, с которой лучше всего начать. Как поймёте, что такое Git на самом деле, поймёте и что вам от него нужно и как это получить (и выработаете эту модель сами).
    В любом случае так или иначе всё сводится к ветвлению/слиянию веток, а как конкретно это делать - см. выше. Гит лишь предоставляет концепцию ветвления и концепцию локальных/удалённых веток, т.е. децентрализованный репозиторий.
    Ответ написан
    2 комментария
  • Как организовать хранение библиотек и хидеров от которых зависит наш проект?

    Nipheris
    @Nipheris Куратор тега C++
    CMake решит большинство ваших проблем:

    https://cmake.org/cmake/help/v3.6/command/find_pac...
    CMake:How To Find Libraries

    Большинство - кроме проблемы установки/управления зависимыми библиотеками. Т.е. CMake попытается найти в системе нужную версию библиотеки, но установить вы её должны сами. В *nix - системах с этим неплохо справляется системный пакетный менеджер, в Винде всё плохо (т.е. делаем руками).
    Ответ написан
  • Как организовать репозитории для разных разработчиков?

    Если немного проще: есть один проект в котором верстальщику нельзя давать код бекэнда, а то еще понравиться и себе скопирует.

    Если вы не хотите давать код, то вы не хотите давать репозиторий. Чтобы работать, верстальщику понадобится локальная копия репы. Раз у него будет такая копия, захочет - вытащит файлы. Гит делает слепок всего дерева целиком, поэтому в принципе невозможно надежно ограничить доступ к содержимому файлов в других папках.

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

    Это и есть самое нормальное решение. Даже если бы не стоял вопрос разграничения доступа, это также было бы удобно с точки зрения деплоя. Раз вы говорите о фронте и бэке отдельно, значит вам удобно их отдельно разрабатывать, а раз удобно отдельно разрабатывать - то вероятно будет удобно и отдельно релизить. А это - прямой сигнал к разделению на разные репы.

    P.S. Посмотрел ваш скрин, странно много папок вне frontend и backend, что вы в них держите?)
    Ответ написан
    4 комментария
  • Правильно я понимаю как пользоваться Git-ом в команде разработчиков?

    Потому что может там уже кто-то другой внес изменения, сделал push и получится что я своим push затру его изменения?

    Нет, затереть можно только командой push с ключом -f, если у вас есть права на редактирование истории. При обычной команде push сервер не примет ваши коммиты в ветку, если те коммиты, что сейчас находятся на сервере, не являются родительскими к вашим. Иными словами, ваши коммиты и коммиты, которые сейчас на сервере, должны быть связаны отношением родитель-потомок.

    1) При индексации файла, мне индексировать только те что я менял?

    Если под индексацией вы понимаете staging area, то конечно только то, что вы изменяли (а также удалили/добавили). Суть staging area - подготовка содержимого коммита.

    как все таки будет происходить мое подключение к команде, для меня заведут логин и пароль для проекта, выдадут права на чтение и запись, а дальше все как обычно?

    Коротко - да. Подробно - у того, к занимается этим в компании.

    я так понимаю что и будут основные вещи сконфигурированы или все таки нет?

    Вам дадут логин/пароль или дадут логин и попросят сгенерить пару публичный/приватный ключ, и публичный вы должны будете передать администратору для связывания с вашим аккаунтом. git config поможет вам проставить корпоративные email и имя, под которыми вы должны будете делать коммиты в общую репу - это всё тоже можно уточнить у адмистратора.

    И еще, после git pull нужно ли делать git commit?

    Сейчас ваш вопрос сродни "нужно ли завтракать после того как почистил зубы?". Т.е. хоть и указанные действия конечно часто выполняются вместе друг с другом, они совершенно разные и ими достигаются разные цели. Поэтому рекомендация 1: поизучайте git еще, если вы такое спрашиваете, вы вообще еще ничего в нём не понимаете. Или задайте конкретный вопрос, если что-то конкретно осталось непонятным.

    И да, вы думаете, что вас уволят, если вы это все спросите у админа/тимлида? Я так не думаю, тем более раз вы - верстальщик. Рекомендация 2: перестать паниковать.
    Ответ написан
    Комментировать
  • Как правильно организовать проект, выкладываемый в open source?

    Да, возможно, это тоже важно. Библиотека написана на С++.

    Да, это важно. Мы тоже используем примерно ту же структуру проектов, и стараемся её придерживаться на всех используемых платформах, однако технические различия между ними диктуют и различия в структуре. Например, папка include в мире .net не нужна, т.к. вся необходимая информация о содержимом библиотеки находится в самой сборке. То же касается и Java-библиотек. В целом, я согласен с вами по структуре репозитория (единственная вкусовщина для меня - называть папки docs и tests во мн. числе :)).

    Другие папки - какие?

    Вот в последнее время считаю крайне полезной папку examples с кодом примеров по использованию библиотеки. Очень удобно, когда на основные сценарии использования либы есть по проекту/файлику с кодом примера. Очень быстро можно пробежаться по возможностям библиотеки, и оценить удобство использования (накануне сранивал таким образом json-либы для C++). И для вас это тоже своеобразные "тесты" на удобство. У этих "тестов" задача не покрыть логику на 100%, а показать, как взаимодействовать с библиотекой в основных, стандартных сценариях.

    Отмечу, что вы очень хорошо написали про API библиотеки в include. Многие разработчики почему-то кладут в эту папку и приватные хедеры тоже. Я лично в этом смысла не вижу - все приватные хедеры это часть основных исходников, а они находятся в /src.

    потом копи-пастой тащу папку include и папку с собранными бинами к себе в проект

    Вот это я не знаю честно говоря, зачем вы делаете - папки include и lib как раз на то и рассчитаны, чтобы их было удобно подключать к компилятору и линковщику - как раз пути к этим папкам и передаются при подключении зависимых библиотек. Единственное, что может быть нужно скопировать из папки библиотеки - собранные бинарники (dll/so) в случае динамической линковки, если нет возможности/желания прописывать пути к динамическим библиотекам. Ну и какие-нибудь файлы данных, если таковые есть.

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

    Вообще ваш вопрос сильно связан с организацией процесса сборки библиотеки и её подключения к другим проектам. В C++ к сожалению до сих пор нет стандартного или хотя бы популярного соглашения об управлении зависимостями, иными словами, пакетного менеджера. Многие библиотеки сегодня подключаются через системные пакетные менеджеры, если таковые присутствуют в ОС.

    Также, вы почему-то не указали используемую систему сборки. В том же CMake есть очень полезная фишка, называется find_package, которую грех не использовать.

    В целом, отмечу что копи-пасты должно быть минимум, include и lib копироваться не должны вообще, для этого у любого компилятора есть ключи (например, -I и -L). Даже если копирование неизбежно, его следует максимально автоматизировать в сборочных инструкциях. Многие системы сборки умеют определять, что некоторые файлы устарели (например, вы перекомпилили dll), и в этом случае их можно попросить скопировать эти файлы.

    Чем вы все-таки либу свою собираете? Это важно, т.к. даже для опытных разработчиков сборка незнакомой C++ библиотеки может стать целым делом.

    Да, кстати еще момент с include-ами: именно по причине того, что библиотеки обычно подключаются путем указания путей компилятору и линковщику (которые потом соберут содержимое всех include и lib-папок в единое пространство имён), есть популярная договоренность создавать в папке include подпапку с именем библиотеки, например: раз, два, три. Это даёт возможность инклудить так: #include <soci/blob.h>, а не так: #include <blob.h>. Это позволяет разработчику называть файлы коротко и так, как ему удобно (blob.h вместо soci_blob.h), и при этом сводить риск конфликта имен инклудов к минимуму.
    Ответ написан
    7 комментариев
  • Как выгрузить bower пакеты на удаленный сервер?

    Вам эту "задачу" надо запустить не при публикации, а при сборке, а собранный пакет уже деплоить на сервер. В нормальном workflow у вас перед деплоем в продакшн еще должно быть автоматическое тестирование и выкладывание на бету, и везде точно также надо загружать зависимости и собирать проект.
    Ответ написан
  • Почему нет последней версии git для Windows?

    Ой, да ладно вам, ребят. Это ж на комп разработчика - можно и ночной билд скачать, вон их сколько: https://github.com/git-for-windows/git/releases
    Ответ написан
    Комментировать
  • Как удалить коммиты из ветки?

    https://help.github.com/articles/about-git-rebase/
    https://git-scm.com/book/en/v2/Git-Tools-Rewriting...

    Это если вы хотите удалить коммиты из истории. Если историю нужно оставить, и просто перейти на состояние первого коммита, то см. ответ jcmvbkbc
    Ответ написан
  • Как из одной ветки перенести определённые файлы в другую ветку?

    > Есть две параллельные ветки разработки, которые работают с общими файлами. Но в одной и в другой ветки надо сделать изменения в этих файлах.
    > Соответственно надо вытащить из определённого коммита одной ветки только определённые файлы и залить их в другую ветку.
    не пойму где переход от первого ко второму. Ветки для того и есть, чтобы делать разные изменения в одних и тех же файлах. Если изменения одинаковые - смержите эти коммиты, сделанные в ветке А, в ветку B, или если мерж невозможен, то cherry-pick конкретных коммитов. Зачем что-то куда-то вытаскивать?
    Ответ написан
  • Можно ли смержить бинарные файлы с решением конфликтов, и если нет, почему нет решений на эту тему?

    Теоретически можно, ведь можно указывать mergetool, если хочется. Другой вопрос - как из этого построить что-то работающее. Текст - это такая удобно нормализованная штука - есть строчки, в нормальном тексте они короткие, делятся переводом строки - удобный элемент для квантования целого ресурса. С бинарниками так просто уже не поступишь: во-первых, для каждого формата свой подход (а для текста совершенно разного назначения вполне можно использовать одну и ту же тулзу), а во-вторых - нужно уметь собственно совмещать то, что в картинках различается. Некоторые форматы, например PSD, вполне можно было бы смержить в ситуациях, когда разные люди добавили разные слои и работали каждый в своих.
    Я думаю все дело в соотношении простота/спрос. Написать тулзу еще нужно суметь, ведь это в тексте достаточно просто вставить строки друг за другом, а в PSD нужно полностью всю служебную инфу обновить и вообще правильно записать весь формат, плюс нужно продумать естественное поведение в каждой конфликтной ситуации, а в сложных форматах их намного больше, чем в тексте - один дизайнер слой переименовал, а другой - нет, и оба чтото поменяли, нужно определить - мержить изменения в один слой или оставлять два разных. И еще миллион таких ситуаций со всем, что может храниться в PSD. А спрос-то не сильно велик - тут и программистам-то не всем нравится ветвление (и часто бывает оно и правда только усложняет процесс), а дизайнерам поди разжуй. Так что идея ваша вполне заслуживает внимания, просто при реализации она превращается во вполне конкретные частные решения, которые подаются вместе с основным инструментом, и не предназначены для работы с VCS общего назначения (Git, Mercurial).
    Вот под рукой отличный пример: команда Dr. Explain - тулзы для создания документации - недавно запустили сервис совместной работы. И фишка вся в том, что это более чем хорошая новость для пользователей этого продукта, т.к. их формат хранения практически не подлежит мержу средствами обычных VCS (это xml-ка, которая хранит внутри себя ВСЕ, в том числе картинки). Вот они и выкатили свой велосипед. Мы кстати пытались использовать это дело, сделали штук 6 коммитов в свой репозиторий, быстро поняли, что работать надо по-очереди, т.к. смержить просто нереально, а потом, пока еще не поздно, съехали на DocBook (с компиляцией в XSL-FO).

    P.S. Не так уж и не нужно - в перфорс есть оказывается такие приложения для мержа: www.perforce.com/helix-apps
    Ответ написан
    Комментировать
  • Проблема с git status. Куда копать?

    Вам уже ответили правильно на вопрос, но тем не менее добавлю: есть подозрения, что вы все это пытаетесь сделать в домашней директории (судя по тому, какие файлы git status вам предлагает добавить). Вы бы создали отдельную, перешли в нее и сделали бы там git init - тогда вы получите адекватный пустой работающий репозиторий.
    Ответ написан
    1 комментарий