Ответы пользователя по тегу Git
  • Как узнать хеш мержа в котором смержены изменения?

    git checkout R2
    git blame --first-parent <имя-файла>
    Ответ написан
    Комментировать
  • Какой формат (с изменениями) эффективнее хранится в Git?

    Хочется, чтобы при небольших изменениях контента в Git-репозитории тоже были небольшие (по размеру) изменения.

    Атомарная единица версионирования в Git - это файл. Изменения в разных файлах никогда не приводят к конфликту на уровне Git (это может быть конфликт на уровне структуры самого приложения, но Гита это вообще никак не касается). Изменения в одном и том же файле в разных ветках приводят к конфликту в момент слияния, который Гит может иногда разрулить сам, например если файл текстовый и изменения далеко друг от друга, а может и не разрулить.

    Если вы хотите какие-то элементы данных рассматривать независимо (например страницы Вики), кладите их в разные файлы, желательно текстовые.

    Посмотрите как Wiki реализована на Гитхабе - это ж тоже просто гитовая репа, где каждая статья - отдельный файл.
    Ответ написан
  • Как сделать push от своего аккаунта Git так, чтобы было видно имя другого пользователя?

    Какая разница с какого аккаунта вы делаете пуш? Вы можете закоммитить от одного пользователя, а запушить совершенно от другого. Собственно при коммите вы указываете почту и своё имя (можно даже отдельно указать имя и почту автора от имени и почты коммитера), а как эти почта связаны с акком на гитхабе, это вы настраиваете на самом гитхабе. При пуше вы аутентифицируетесь в гитхабе, поэтому и указываете акк гитхаба. Но запушить вы можете коммиты хоть с сотней разных почт/имён.
    Ответ написан
    Комментировать
  • Сделал merge в локальный develop из branch-1, потом push на origin, а теперь получается что нужно откатить develop. Что делать?

    оно ведь мне не даст запушить, или что?

    или --force
    Ответ написан
    Комментировать
  • Gitlab remote: HTTP Basic: Access denied?

    Откройте панель управления, в поиске введите Credential Manager (не помню точно как в русском интерфейсе, кажется Диспетчер учётных данных), откройте первое окно в результатах поиска, там выберите вкладку Windows Credentials, и поищите в этом окне креды, которые вы ввели. Найденное - удалите. И затем попробуйте ещё раз склонировать, пароль должен запроситься ещё раз.
    Ответ написан
    1 комментарий
  • Github, как сделать видимыми файлы внутри репозитория?

    https://github.com/ffancer/study_with_codewars/com... - вот тут вы всё и удалили. Нужно или откатить этот коммит, или вообще все коммиты удалить (включая этот) и перекоммитить заново. Только файлы забэкапьте куда-нибудь.
    Ответ написан
    Комментировать
  • Можно ли заставить git спрашивать под каким пользователем коммитить?

    У меня для разных систем - Github, Gitlab и т.д. разные учётные записи, как рабочие, так и личные.

    Может не совсем то, что вы хотите, что в GitKraken есть функциональность профилей, решение как раз для вашего случая. Пользуюсь именно для этого - несколько "рабочих" учёток с корпоративной почтой в author/commit email, и личная. Переключаться нужно заранее, перед коммитом (просто обновляется глобальный .gitconfig).
    Ответ написан
  • Почему большой/объемный pull request это плохо (или хорошо)?

    было много ПР в промежуточную ветку, их ревьюила команда, к которой принадлежит разраб который сделал ПР;
    далее эти все коммиты/изменения были объединены в один ПР и он стал похож на страницу с содержанием книги с десятками коммитов, в то же время к ревью подключились разрабы из других комманд и ревью затягивается еще на несколько дней;

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

    Почему вы повторно ревьюите этот же код, ещё и теперь объединённый в один большой ПР? Какой смысл? У вас что-то не так с организацией ответственности.
    Ответ написан
    4 комментария
  • Почему сервер не принимает проект?

    Git-сервер не принимает ваш бранч. Там выше не написано, почему это происходит? Может быть Heroku пытается выполнить деплой, но у него не удаётся это сделать, и он отфутболивает бранч?

    Поищите логи какие-то деплойские чтоли, а лучше это всё текстом, а не фотографией.
    Ответ написан
    1 комментарий
  • Git. Как подтянуть изменения из мастер-бранч в рабочую ветку?

    Подмёржить мастер или заребейзиться на свежий мастер. Предпочитайте первый вариант, пока не разберётесь с гитом получше.
    Ответ написан
    Комментировать
  • Как большие компании организовывают совместную работу и контроль версий в Unreal Engine?

    Git LFS?

    Не исходный же код у вас 50 гигов весит, не так ли?
    Ответ написан
    Комментировать
  • Стоит ли углубляться в изучение git и тп?

    Стоит ли изучить гит глубоко ?

    Да, стоит. Гит - это один из инструментов, который требует времени, чтобы с ним разобраться, и оно почти всегда окупается.
    Гит очень прост по своей архитектуре - намного проще чем может показаться со стороны. Но у гита очень сложный CLI - куча команд, многие вещи можно сделать несколькими способами, многие команды несвязаны друг с другом. Некоторые команды с более высокого уровня, некоторые - с более низкого.

    Большинство начинают изучать гит по всяким туториалам и "спискам команд для работы с гит на первое время", и это ОЧЕНЬ пагубно сказывается на качестве знаний. Из-за не очень логичного и прямолинейного командного интерфейса, у человека создаётся не очень хорошее впечатление о гит как об инструменте. Ну т.е. большинство судит о книге по её "обложке", машинально запоминая последовательности команд для работы, и в панике потом разгребают свою историю коммитов при малейшей ошибке в заученных командах.

    Однако нужно не команды запоминать, а понимать как что работает, и, самое главное, что ВЫ ХОТИТЕ от гита. Тогда вы будете подбирать команды под свои задачи и пожелания, а не наоборот.

    Я вот например довольно фигово знаю гитовский CLI, прямо скажу постоянно заглядываю в документацию. Но это не мешает мне заниматься довольно сложными задачами, связанными с ним (например, отвечать в данный момент за перенос истории из SVN), только потому, что я понимаю его базовую философию (которая, повторюсь, реально проще, чем кажется, ну если конечно вы не первый день видите компьютер).
    Ответ написан
    1 комментарий
  • Сборка проекта из рабочей копии и из архива - best practices?

    Передавать эту информацию через переменную окружения? И подставлять вручную/иными способами при сборке вне СКВ?

    Считаю, что номер ревизии (т.е. хэш коммита/имя тэга и пр.) должны извлекаться не сборочным скриптом, а передаваться через окружение. Большинство CI-серверов имеют хорошо документированные переменные окружения, которые задаются перед началом сборки. Эти же переменные окружения можно задать и вручную.
    Ответ написан
    Комментировать
  • Как отменить git rebase?

    git rebase --abort, если процесс ребейза ещё не прерван. А дальше - доки.
    Ответ написан
    2 комментария
  • Почему после удаления файла из локального репозитория GitHub пишет ошибку с наличием этого файла?

    Видимо файлы остались в истории? (пришло же вам в голову их коммитить). Делайте интерактивный ребейз или любым другим способом вычищайте историю.
    Ответ написан
  • Как удалить смерженную ветку?

    1. Вы хотите плохого.
    2. Чтобы это сделать, вам нужно заребейзить коммиты 91d2463, 3e391bf с 3a0067f на 8b04f4d.
    Ответ написан
    Комментировать
  • Зачем перед слиянием ветки f1 в ветку develop, нужно сливать ветку develop в ветку f1?

    Или я что то не правильно понял?

    Да, вы не понимаете сути слияния веток в Git.

    Начнём с того, что когда вы сливаете ветки, по большому счёту не так уж важно какую ветку в какую вы будете сливать. Вы В ЛЮБОМ случае создаёте мёрж-коммит, и создание этого мёрж-коммита (и соответственно разрешение конфликтов которое происходит при создании этого коммита) подразумевает, что вы соединили вместе две ветки. Это значит что начиная с мёрж-коммита все последующие коммиты (дочерние к нему) будут иметь изменения из ОБОИХ веток. Уже не будет разницы между тем что было сделано в первой и во второй ветке, отныне "они едины" (c).

    Другой вопрос в том, в какую ветку поместить этот мёрж-коммит и УКАЗАТЕЛЬ какой из веток СДВИНУТЬ на новый мёрж-коммит. Теоретически, мы можем сдвинуть оба указателя, но в большинстве случаев нам достаточно сдвига лишь в одной ветке (и нередко только в одной из веток, в вашем случае f1, мы имеем право двигать указатель).

    Когда вы попытаетесь сделать "обратное сливание f1 в develop", если в develop ещё не успело появиться новых коммитов (не являющихся предками созданного вами мёрж-коммита), то на самом деле никакого сливания и НЕ БУДЕТ. Ведь у вас УЖЕ есть коммит, учитывающий изменения в ОБОИХ ветках. Достаточно лишь передвинуть указатель ветки develop на этот коммит. Другое дело, что решение о том, что это можно и нужно сделать, приняв тем самым изменения в ветке f1 в ветку develop, принимает мейнтенер ветки develop, а это вовсе не обязательно тот же человек, что и работающий с веткой f1.

    Почему мы сначала сдвигаем указатель ветки f1? Ну очевидно потому, что это ветка в которой ведётся разработка, и обычно принято принимать в общую ветку (коей видимо у вас является develop) уже полностью готовые правки. Готовые - это в том числе интегрированные с текущим состоянием кодовой базы. Обычно это задача работающего в ветке f1 - порезолвить все конфликты и интегрироваться со свежим состоянием develop, чтобы мейнтейнер проекта мог максимально быстро и безболезненно вмёржить f1 в develop.
    Ответ написан
    Комментировать
  • Как получить изменения из родительского репозитория без pull-request'ов?

    использует команду pull, подразумевающую слив своей ветки с изменениями в исходный репозиторий

    Не путайте ситуации, когда pull делаете ВЫ, и когда вы отправляете pull request, чтобы pull (или аналогичную операцию) сделал тот, кто имеет доступ к родительскому репозиторию.

    Почитайте про remotes в гите. Вы можете добавить любое количество remote-репозиториев в свой локальный. Тогда вы сможете спуливать не только ветки из своего форка, но и из родительского.

    Вот классическая и простейшая инструкция как это сделать, странно что вы не нашли на самом гитхабе, т.к. ситуация действительно стандартная вообще для любого кто форкает что-либо: https://help.github.com/articles/configuring-a-rem...
    Ответ написан
    Комментировать
  • Верно ли сформулировано определение конфликта в git?

    Формальный (потенциальный) конфликт в Git в контексте слияния веток - ситуация, возникающая при создании коммита слияния (merge commit), когда один и тот же файл (один или более) имеет различное состояние в снимках (snapshots) сливаемых веток. Такие конфликты можно классифицировать на разрешаемые автоматически и не разрешаемые автоматически.

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

    Конфликт, не разрешамый автоматически - формальный конфликт, при котором Git не может самостоятельно сформировать снимок для коммита слияния. Обычно именно такие автоматически неразрешаемые конфликты и называют просто конфликтами. В таком случае для формирования снимка требуется ручное вмешательство (что и называется "разрешением конфликтов" в бытовом смысле).
    Ответ написан
    Комментировать