Добавление файлов в проект GitLab из локального репозитория
Не могу разобраться с механикой действия, почему не получается. Есть файлы в локальном репозитории git . Есть проект в GitLab (уже содержит файлы, но они отличаются от файлов из локального репозитория). Создала удаленный репозиторий. Необходимо отправить файлы из локального в удаленный. При потытке сделать push выдает ошибку:
" ! [rejected] master -> master (non-fast-forward) error: failed to push some refs to 'ссылка на проект в GitLab'е' hint: Updates were rejected because the tip of your current branch is behind hint: its remote counterpart. Integrate the remote changes (e.g. hint: 'git pull . ') before pushing again. hint: See the 'Note about fast-forwards' in 'git push --help' for details."
Делаю pull — git выдает такую ошибку:
branch master -> FETCH_HEAD fatal: refusing to merge unrelated histories
Отслеживать
68k 218 218 золотых знаков 79 79 серебряных знаков 221 221 бронзовый знак
задан 9 апр 2018 в 6:55
Ekaterina Stebakova Ekaterina Stebakova
37 1 1 золотой знак 1 1 серебряный знак 7 7 бронзовых знаков
Предупреждение: если вы сделаете пулл из удаленного репозитория, то это заменит ваши локальные файлы (в случае успеха, конечно)
9 апр 2018 в 6:58
Я из вопроса не понял существенных деталей. Был изначально репозиторий локально, потом создали репозиторий в гитлабе и пытаетесь пропихнуть туда всё с локального компа? Или был проект гитлаб, его склонировали локально, поработали, потом попытались запушить, но оказалось, что репозиторий уехал на N коммитов вперёд?
9 апр 2018 в 7:02
@ЕвгенийШалаев, получается, что если я выполню pull, то файлы с сервера Gitlab скопируются в локальный репозиторий, а содержащиеся на тот момент в нем файлы, будут удалены?
9 апр 2018 в 7:12
@EkaterinaStebakova не удалены, а перезаписаны те, чтобы есть и на сервере и локально, новые файлы останутся) а чтобы было наоборот, нужно сделать push)
9 апр 2018 в 7:14
@ЕвгенийШалаев Дело в том, что файлы в локальном репозитории и удаленном разные. Зада состоит в том, чтобы на сервер добавить файлы из локального. Push не работает. Когда я заливала данные в пустой проект GitLab, всё было ОК
¶ Git и GitLab
Git — распределённая система контроля версий, которая даёт возможность разработчикам отслеживать изменения в файлах и работать совместно с другими разработчиками. Git выполняет все операции локально, что увеличивает его скорость. Кроме того, он локально сохраняет весь репозиторий в небольшой файл без потери качества данных.
GitLab — веб-приложение и система управления репозиториями программного кода для Git. Обычно GitLab используется вместе с Git и даёт разработчикам возможность сохранять их код онлайн, а затем взаимодействовать с другими разработчиками в разных проектах.
¶ Установка Git
Перед началом работы с GitLab установите себе на устройство приложение Git по ссылке.
Найти подробную инструкцию по установке Git можно здесь.
¶ Авторизация в GitLab
Авторизуйтесь в сервисе GitLab через корпоративную почту @miem.hse.ru.

Затем выберите в верхней панели раздел «Groups». Щелкните на «Your Groups». На этой странице должна находиться группа с номером и названием вашего проекта. Нажмите на нее, чтобы открыть.
Если после авторизации вы не видите группу своего проекта, то обратитесь в Техподдержку.
¶ Установка пароля
После авторизации нужно установить пароль для вашего аккаунта в GitLab.
- Нажмите на вашу иконку в правом верхнем углу и перейдите в раздел «Настройки» (settings).
- Затем перейдите во вкладку «Пароль» (password).

- Укажите ваш новый пароль и сохраните его.
¶ Создание репозитория
¶ Что такое репозиторий?
Репозиторий (хранилище) — место, где хранятся и поддерживаются данные. Чаще всего данные в репозитории хранятся в виде файлов.
В GitLab используются проекты — структура, включающая в себя репозиторий Git, настройки, обсуждения и другие сопутствующие инструменты.
Узнать более подробную информацию можно перейдя по ссылке: что такое репозиторий?
¶ Как создавать репозиторий?
Шаг 1. Зайдите в свой аккаунт на GitLab и нажмите на иконку «Groups» в верхней панели.

Шаг 2. Затем перейдите во вкладку «Your group».
Шаг 3. Выберите команду с названием вашего учебного проекта.

Если вы не видите в разделе «Your group» команду вашего проекта, то обратитесь в Техподдержку.
Шаг 4. Вы перешли на страницу своей команды. Теперь нужно создать репозиторий. Для этого нажмите на кнопку «New project».
Если у вас уже есть нужный вам репозиторий, то перейдите к шагу 6.

Шаг 5. Напишите название вашего репозитория и добавьте нужные данные. Готово!
_%D1%80%D0%B5%D0%B4_0.png)
Рекомендуем установить галочку напротив «Инициализировать репозиторий файлом README» — в репозитории появится документ «README. md», в котором можно описывать файлы, содержащиеся в этом репозитории.
Если вы хотите залить сюда файлы из уже существующего репозитория, то можеть не создавать новый «README. md».
Шаг 6.
- Для этого зайдите на страницу нужного вам проекта. Далее перейдите в настройки.

- Опуститесь до раздела «Advanced» и разверните его с помощью кнопки «Expand«.

- Найдите внутри блок «Transfer project» и с помощью селектора выберите новое расположение.

Переместить проект может человек только с ролью «Maintainer»(подробнее в разделе участники и роли)
Перенос существующего репозитория с другой платформы
Если проект был создан на другой платформе (Github, Bitbucket и т.д.), то при создании нового репозитория откройте вверху вкладку «Import project» вместо «Blank project«, а затем выберите » Repo by URL«.

Нужно обязательно выбрать «Repo by URL«, в остальных случаях импорт не всегда проходит успешно
При этом вся информация по коммитам будет перенесена. Однако, чтобы она корректно отображалась и учитывалась в статистике, необходимо, чтобы коммиты были сделаны с почты @miem.hse.ru. Если коммиты были сделаны с другой почты, то необходимо добавить ее адрес в личном кабинете в Git.miem.hse.ru (подробнее в блоке «Коммит»)
¶ Локальная работа с репозиторием
Откройте нужный репозиторий и нажмите на кнопку «Clone». Скопируйте ссылку.

¶ Переход в консоль
Далее вам нужно перейти в консоль.
Как это сделать?
- Нажмите на значок поиска на Панели задач или кнопку Пуск.
- Далее нажимите «Выполнить».

- В строке поиска напечатайте «cmd».

- В результате вы увидите окно консоли.
Не на всех видах Windows консоль открывается так, как указано выше. НО на всех можно нажать Win+R и ввести cmd .
- В строке поиска Spotlight введите слово «Терминал» и нажмите Enter .
- В результате вы увидите окно терминала.
- Linux
Для открытия консоли (терминала) нажмите сочитание следующих клавиш: Alt+Ctrl+F1 .
¶ Клонирование репозитория
Для получения копии существующего Git-репозитория необходимо ввести в терминале команду git clone .
То есть мы просим Git создать копию репозитория, который находится по ссылке (), и можем указать путь к директории, в которую Git скопирует репозиторий (). Если его не указать, директория создастся в каталоге, где вы находитесь, когда выполняете команду и будет называться так же, как и сам репозиторий.
Клонирование репозитория осуществляется командой:
git clone
После вы должны ввести имя пользователя и пароль от своей учетной записи в GitLab.
Обратите внимание, что имя пользователя — это имя вашей корпоративной почты до символа «@», а пароль — это пароль, который мы ранее установили в GitLab.
Если у вас возникают ошибки авторизации, обязательно проверьте, какой у вас логин: нажмите на крайнюю кнопку справа сверху на главной странице GitLab и посмотрите, что указано под вашей фамилией.

Вы можете в любой момент перейти к папке с вашим репозиторием с помощью команды:
cd путь/к/директории
Следующая команда показывает, что файл «README.md» скачался и лежит в нашей папке:
dir (ls в Unix)

клонирование репозитория прошло успешно
¶ Заполнение данных
Первое, что вам следует сделать после установки Git — указать ваше имя и адрес электронной почты. Каждый коммит в Git, сделанный вами, будет содержать эти данные. Это информация о разработчике, который вносит изменения.
Используем следующие команды:
git config —global user.name «Иван Иванов»
git config —global user.email ivivanov@miem.hse.ru
Если указана опция —global , то эти настройки достаточно сделать только один раз, поскольку в этом случае Git будет использовать эти данные для всего, что вы делаете в этой системе. Если для каких-то отдельных проектов вы хотите указать другое имя или электронную почту, можно выполнить эту же команду без параметра —global в каталоге с нужным проектом.
Если вы хотите проверить используемую конфигурацию, можете использовать команду git config —list , чтобы показать все настройки, которые Git найдёт:

¶ Добавление файлов в репозиторий
Одной из важнейших команд является git status . Система отслеживает изменения, и с помощью этой команды мы узнаем о состоянии системы. Если выполнить эту команду сразу после клонирования, то можно увидить что-то вроде этого:

Это означает, что у вас чистый рабочий каталог. Другими словами, в нем нет отслеживаемых измененных файлов. Git также не обнаружил неотслеживаемых файлов, в противном случае они бы были перечислены здесь.
Если у вас уже есть некоторые файлы, которые нужно перенести в репозиторий, вы можете скопировать их в рабочий каталог.
¶ Встроенный редактор GitLab
GitLab предоставляет простой способ внести небольшие изменения в файлы проекта. Это среда разработки, встроенная в сайт GitLab. Чтобы её запустить, найдите файл, который нужно отредактировать и щелкните по его названию. На открывшейся странице вы увидите содержимое файла и две кнопки: Edit и Web IDE . Первая кнопка откроет файл для простого редактирования, вторая запустит встроенную среду разработки.
Также на сайте предусмотрена возможность создавать новые файлы. Для этого на странице репозитория нажмите на кнопку «+» и выберите «New file» . В открывшемся редакторе введите имя файла и нужное содержимое. Не забудьте нажать на кнопку Commit changes по завершении редактирования.
Кроме того, для частых типов файлов предусмотрены отдельные кнопки. Вы найдёте их над списком файлов на странице репозитория. Так вы, например, сможете быстро добавить файл README.md в ваш проект. Просто нажмите на кнопку Add README .
¶ Изменения в существующем файле
Чтобы внести изменения в файл, который скопировался вместе с репозиторием, просто перейдите в папку с копией репозитория на компьютере и откройте этот файл. В нашем случае, это файл «README.md». Он должен содержать описание репозитория, отображаемое на его странице на сайте. Добавьте в него новую строку и сохраните:

Если вы выполните команду git status , то увидите свои неотслеживаемые изменения в файле:
_0.png)
Мы видим, что у нас есть недобавленные изменения.
Для добавления изменений используется команда git add . Команда git add . добавляет все изменения в рабочей директории в индекс для последующего коммита.
¶ Что такое коммит?
Коммит — это сохранение, фиксация (в архиве, репозитарии и т.д.) изменений в программном коде.
Команда git commit берёт все данные, добавленные в индекс с помощью git add , и сохраняет их слепок во внутренней базе данных, а затем сдвигает указатель текущей ветки на этот слепок.
При коммите данных их необходимо комментировать, чтобы в дальнейшем каждое изменение в проекте было с описанием действий. Для этого используется команда
git commit -m «комментарий»

Теперь все нужные изменения добавлены в наш локальный репозиторий.
¶ Добавление нового файла в удаленный репозиторий
Для того чтобы залить изменения в удаленный репозиторий, который находится на git.miem.hse.ru, нужно использовать команду git push .
Рассмотрим пример:
Создадим новый файл «text.txt» в папке «main» и выполним следующие действия:
Шаг 1. Добавим файл в нашу папку main;
Шаг 2. Зафиксируем изменения и узнаем текущее состояние файла;
_0.png)
Шаг 3. Отправим изменения в локальное хранилище (то есть выполним коммит).
_0.png)
С помощью команды git push отправим данные локального репозитория на удаленный репозиторий (Origin — это наш репозиторий).
_0.png)
Заходим в GitLab и видим, что отправка данных прошла успешно.

¶ Отмена действий
Если вы добавили файлы в состояние ожидания, но передумали и не хотите добавлять некоторые из них, то нужно использовать команду:
git rm —cached «название файла»
Укажите, какой файл необходимо удалить из ожидания на коммит.
¶ Проблемы при входе
- Если вы ввели неправильно пароль (на Windows), а во второй раз ваши данные не запрашиваются, то вам нужно сделать следующие действия:
панель управления -> учетные записи -> диспетчер учетных данных -> удалить данные GitLab
После чего заново повторить первые шаги с вводом ваших данных. - Чтобы на устройствах Linux/Mac каждый раз не запрашивался пароль, нужно использовать следующую команду:
git config credential.helper store
¶ Полезные ссылки:
- Основные понятия: Ветки
- Основные понятия: Зеркалирование репозитория
- Управление командой: Различия прав доступа
- Навигация: Уровень видимости проекта
Push options
In Git 2.18 and later, you can use either the long format ( —push-option ) or the shorter -o :
git push
In Git 2.10 to 2.17, you must use the long format:
git push For server-side controls and enforcement of best practices, see push rules and server hooks.
Push options for GitLab CI/CD
You can use push options to skip a CI/CD pipeline, or pass CI/CD variables.
Push options for merge requests
Git push options can perform actions for merge requests while pushing changes:
Formats for push options
If your push option requires text containing spaces, enclose the text in double quotes ( » ). You can omit the quotes if there are no spaces. Some examples:
git push git push To combine push options to accomplish multiple tasks at once, use multiple -o (or --push-option ) flags. This command creates a new merge request, targets a branch ( my-target-branch ), and sets auto-merge:
git push
Create Git aliases for common commands
Adding push options to Git commands can create very long commands. If you use the same push options frequently, create Git aliases for them. Git aliases are command-line shortcuts for longer Git commands.
In your terminal window, run this command:
git config
To use the alias to push a local branch that targets the default branch ( main ) and auto-merges, run this command:
git mwps origin
Related topics
- Git aliases in the Git documentation
GitLab для начинающих: как и для чего используется

В материале подробно разбираем, что такое GitLab, для чего используется, чем отличается от аналогов и как с ним работать.
Что такое GitLab
GitLab представляет собой веб-приложение и систему управления репозиториями программного кода для распределенной системы контроля версий Git. GitLab, как правило, используется с Git, что позволяет разработчикам сохранять написанный код в онлайн-формате и работать с другими разработчиками над разными проектами.
GitLab позволяет взаимодействовать с репозиториями, управлять правами доступа и пользователями, отслеживать ошибки, автоматизировать процессы и выполнять многие другие операции. Установить и использовать его можно на собственном сервере или же в облаке.
Для чего нужен GitLab
GitLab имеет множество возможностей, основные из них представлены ниже.
Планирование
GitLab способен эффективно поддерживать различные модели коллективной работы вне зависимости от выбранной методологии разработки. Гибкие инструменты управления проектами GitLab позволяют делать процесс разработки наглядным, координировать его, отслеживать и назначать приоритеты.
Создание
С Gitlab команда разработчиков может консолидировать исходный код в общей распределенной среде контроля версий. Веб-сервис позволяет управлять и поддерживать распределенную среду, не нарушая процессы разработки.
GitLab имеет целый арсенал инструментов для управления ветками и доступом к проектам, создавая общую достоверную среду для совместной работы команды разработчиков.
Тестирование
В GitLab реализованы инструменты ревью кода, его тестирования и оценки качества, что позволяет разработчикам быстрее находить ошибки и сокращать цикл их исправления.
Можно персонально настраивать модель приемки качества, тестировать код в автоматическим режиме и назначать изменения в среды тестирования для каждой версии кода.
Сборка
Репозиторий контейнеров GitLab дает возможность создавать безопасное хранилище кастомных образов контейнеров Docker. Причем для этого не придется задействовать дополнительные инструменты — возможности скачивания и загрузки образов внедрены в среду управления репозиторием Git по умолчанию.
Релиз
Компоненты поддержки технологий непрерывной доставки и развертывания позволяют эффективно автоматизировать операции, связанные со сборкой, автоматическим тестированием и установкой релизов. Установка релиза как на один сервер, так и на множество, будет занимать минимум времени.
Конфигурирование
GitLab позволяет автоматизировать весь процесс разработки приложения. Для этого предоставляются готовые шаблоны моделей, с которыми начать работу можно без сложных предварительных настроек — достаточно добавить специфику приложения на каждом этапе сборки и развертывания.
В качестве сервиса с предварительно настроенными шаблонами приложений для разработки можно использовать GitLab CE Virtual Appliance.
Мониторинг
С GitLab можно отслеживать время, затраченное на каждый этап, проверять работоспособность приложения, собирать и просматривать метрики, а также анализировать, как изменения кода влияют на производительность среды.

Git, GitLab и GitHub
Каждому разработчику важно знать и понимать, чем отличаются и схожи Git, GitLab и GitHub.
Git представляет собой распределенную систему контроля версий. Она позволяет разработчикам контролировать изменения в файлах и работать совместно с другими специалистами. Git также локально сохраняет весь репозиторий в файл небольшого объема, не снижая качества данных.
GitHub, как и GitLab, представляет собой онлайн-сервис для размещения репозиториев, удаленного управления ими и других задач разработки. В нем предусмотрены багтрекинг, вики для каждого проекта, история коммитов, графика, вложенные списки задач и многое другое.
Оба сервиса предназначены для использования группами разработчиков, поэтому многие функции и возможности GitHub и GitLab дублируются. Вместе с тем, есть и отличия:
- В GitLab реализована встроенная бесплатная непрерывная интеграция. В GitHub есть инструмент Actions. Он позволяет запускать бесплатные непрерывные интеграции в публичных репозиториях, а что касается частных репозиториев — стоимость указана здесь.
- GitLab задействует Kubernetes для беспроблемного развертывания. В GitHub встроенной платформы развертывания нет.
- В GitLab есть бесплатные репозитории частного формата для проектов, имеющих открытый исходный код. В GitHub такого нет.
Подробнее о том, чем еще отличается GitLab, можно прочитать на официальном сайте веб-приложения.
Еще одним решением для разработки является Cloud Container Engine от SberCloud — сервис для автоматизации развертывания, масштабирования и управления приложениями в высокопроизводительных кластерах Kubernetes. Он обеспечивает высокую производительность, корпоративную надежность и безопасность, а также открытость и совместимость.
Калькулятор виртуальных машин
Виртуальная машина+диск от 96 копеек/час

Как пользоваться GitLab
Рассмотрим основные этапы работы с GitLab:
Создание аккаунта
На GitLab простая процедура регистрации. На главной странице официального сайта есть форма входа, в которой надо ввести только имя пользователя или адрес электронной почты и придумать пароль. После отправки запроса остается только подтвердить регистрацию в письме, отправленном на указанную почту.

Для входа можно использовать аккаунты в других сервисах и социальных сетях.
Создание репозитория
Для создания нового проекта надо нажать на значок «+» по центру экрана и выбрать соответствующий пункт.

При создании надо указать имя, описание репозитория и определить уровень доступа: приватный, доступный всем зарегистрированным или публичный.
После указания всех данных и нажатия на кнопку «Create repo», репозиторий будет создан, а на его странице будет доступен стартовый набор действий.
Также GitLab позволяет настроить работу удаленного репозитория. Это значит, что продвинутые пользователи смогут решать большинство рутинных задач через консольные команды или графических клиентов.
Загрузка файлов проекта
В интерфейсе предусмотрены удобные варианты загрузки проектов. На главной странице репозитория можно загрузить файл, создать новый файл, добавить лицензию и файл Readme. При этом загрузка файлов с компьютера выполняется быстро, не требует переформатирования или других операций.
SSH-ключи
Чтобы во время загрузки данных репозитория не приходилось вводить логин и пароль, для авторизации можно использовать SSH-ключи. Они создаются в несколько шагов:
- открывается терминал и выполняется «ssh-keygen»;
- указывается путь к файлу для сохранения ключа.
После этого создается два файла — закрытый и открытый. Для создания ключей нужен открытый. Его нужно открыть в текстовом редакторе и скопировать содержимое в буфер обмена. Затем нужно перейти в GitLab и выбрать «Настройки» (Settings). В меню настроек в пункте «SSH Keys» в поле «Key» надо вставить скопированный ранее текст и сохранить изменения. Далее нужно перейти в репозиторий и нажать на кнопку «Clone». После этого нужно вернуться к локальному репозиторию, удалить адрес https и добавить ssh. На этом настройка SSH-ключей будет завершена.
Ветки репозитория
По умолчанию в репозитории GitLab предусмотрена только одна ветка — master(main). При этом для реализации вспомогательных функций отдельные этапы разработки можно выносить в независимые ветки. В веб-интерфейсе сервиса ветки отображаются слева, что упрощает переход между ними. Ветки создаются в пару кликов — нужно выбрать «+» по центру экрана и нажать «New branch». Кроме того, после обновления изменений в репозитории в GitLab отображаются и новые ветки, созданные в Git. Все операции с ветками можно выполнять через настройки.
Слияние веток
В ветках разрабатывается функциональность, поэтому может потребоваться их перенос — для этого предназначены запросы слияния («Merge request gitlab»). Для использования этой возможности в интерфейсе GitLab нужно нажать кнопку «Create merge request», задать описание «Merge Request», выбрать исходную и целевые ветки. После одобрения запроса на слияние надо нажать на кнопку «Merge». В результате файлы ветки преемника будут заменены файлами из ветки источника.
Добавление пользователей
В GitLab можно добавлять неограниченное количество разработчиков даже к приватным репозиториям. Чтобы сделать это, надо перейти в меню «Настройки» (Settings) и выбрать пункт «Участники» (Members). В этом пункте в поле «Выбрать участника для приглашения» (Select members to invite) надо указать адрес электронной почты пользователя или его никнейм. Перед отправкой приглашения также указывается уровень доступа. Для добавления надо нажать «Добавить в проект» (Add to project).
Удаление проекта
Для удаления проекта нужно перейти в «Настройки» (Settings) -> «Главные» (General) -> «Продвинутые» (Advanced) и выбрать пункт «Удалить проект» (Remove Project). Перед удалением проекта потребуется ввести его имя.
Возможные проблемы
При работе с GitLab могут возникать проблемы, для каждой из которых есть решение:
- Ошибка при выполнении pull-запросов. Причиной может быть длительная фаза SSH-аутентификации или низкая скорость обработки запросов. Решается перенастройкой репозиториев.
- Ошибка при входе. Может появляться после некорректного введения логина и пароля учетной записи. Решается удалением данных через панель управления.
- Ошибка при запуске. Система может указывать на отсутствие GitLab-серверов по заявленным IP-адресам. Причиной проблемы может быть неверное введение команды запуска, использование динамического IP или ошибки при назначении порта. Решается перенастройкой.
Итог
Веб-приложение GitLab является отличным решением для построения рабочих процессов CI/CD в облаке, в том числе если системы контроля и разработки надо установить на личном сервере.
GitLab имеет множество сфер применения и широкие возможности, что в сочетании с удобным инструментарием делает его удобным сервисом как для начинающих разработчиков, так и для профессионалов.
GitLab активно развивается как продукт, подстраиваясь под актуальные потребности разработчиков, поэтому его применение оправдано в проектах любого масштаба.
Gitlab — это великолепный веб-инструмент, который можно использовать для разработки проектов любого размера и сложности. Каждый разработчик или компания может найти в Gitlab для себя подход, который сделает разработку более надежной, качественной и быстрой. Я считаю, что Gitlab CI, разграничение ролей, автоматическое тестирование и мониторинг незаменимы для разработки в командах и оценки эффективности Кирилл Шеховцов Технический лидер в SberCloud.
Источники
- Что такое GitLab, как и для чего он используется
- GitLab и GitHub: в чем различия?
- GitLab
- GitLab vs GitHub
Запросите бесплатную консультацию по вашему проекту