Category: Git

28
Сен
2022

📁 Настраиваем Git для правильной работы с опенсорс-проектами

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

Автор: Rose Judge. Данная статья является переводом. Ссылка на оригинал.

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

Форк-проект

После того как вы настроили свой профиль на GitHub, вам необходимо форкнуть проект, в который вы планируете внести свой вклад. Поскольку доступ на запись к проектам с открытым исходным кодом контролируется сопровождающим (сопровождающими), вы никогда не будете вносить прямые изменения в репозиторий проекта. Вместо этого, мы форкаем (или копируем) исходный код проекта в свой личный аккаунт, чтобы было куда вносить изменения, не затрагивая исходный репозиторий. Легче всего форкнуть проект через GitHub WebUI. Перейдя на страницу GitHub проекта, в который вы хотите внести свой вклад, найдите кнопку Fork в правом верхнем углу.

Клонируйте ваш форк

После форка основного репозитория проекта следующим шагом будет клонирование форка проекта в рабочую среду. Вы сделаете это в командной строке с помощью выбранной вами оболочки:

        git clone [email protected]:rnjudge/tern.git
cd tern
    

2. Настройка веток/окружения

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

Добавьте удаленный upstream-репозиторий

Удаленный репозиторий – это репозиторий Git, размещенный где-то в интернете. Когда вы клонируете свой форк проекта, вы создаете локальную копию вашего форка удаленного репозитория. Когда вы запускаете git clone (git clone), Git автоматически присваивает вашему удаленному репозиторию имя origin. Вы можете составить список своих удаленных хранилищ с помощью команды git remote. После выполнения вышеприведенной команды clone вы должны увидеть в списке ваше удаленное хранилище origin:

        $ git remote -v
origin    [email protected]:rnjudge/tern.git (fetch)
origin    [email protected]:rnjudge/tern.git (push)
    

Ваш форк удаленного репозитория origin, который вы клонировали, не обновляется автоматически вместе с основным проектом. Это означает, что если изменения будут слиты в основной репозиторий проекта, ваш клонированный форк не будет знать об этих изменениях по умолчанию. Это важно, когда мы хотим перебазировать PR, чтобы привести его в соответствии с репозиторием основного проекта. Чтобы облегчить эту задачу в будущем, мы добавим удаленный репозиторий с именем upstream, который будет указывать на основной проект.

Если у вас настроен SSH-ключ, запустите его:

        $ git remote add upstream [email protected]:tern-tools/tern.git
    

В противном случае добавьте пульт, используя https:

        $ git remote add upstream https://github.com/tern-tools/tern.git
    
Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека программиста»

Создайте «домашнюю базовую» ветвь для отслеживания изменений в основном проекте

«Домашняя базовая ветка» – это не технический термин Git или GitHub, а фраза, которую я использую для описания ветки, которую мы будем использовать для отслеживания изменений в репозитории, что поможет нам легко переделывать наши PR в будущем. Это означает, что вы не будете использовать свою домашнюю базовую ветку для разработки или внесения изменений в исходный код. Скорее, вы будете использовать её для перебазирования веток разработки и создания из неё новых рабочих веток. Ветка up помогает вам легко синхронизироваться с репозиторием upstream.

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

        $ git fetch upstream
$ git checkout -b up upstream/main
$ git push origin up:refs/heads/main
    

Обратите внимание, что вам нужно будет настроить ветку up только один раз.

3. Общий рабочий процесс (workflow)

Теперь, когда вы создали свою базовую ветвь, вы готовы приступить к кодированию! Следующий workflow поможет вам внести изменения, отправить новый PR и при необходимости обновить тот же PR.

Создайте рабочую ветвь

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

Во-первых, убедитесь, что ветка up является текущей.

        $ git checkout up
$ git pull --rebase
    

Затем создайте и переключитесь на свою рабочую ветку.

        $ git checkout -b working_branch_name
    

Рабочая ветвь может быть названа так, как вы захотите.

Внесите и зафиксируйте (commit) изменения

Любые изменения, которые вы вносите в исходный код проекта, будут связаны с рабочей веткой, на которой вы находитесь (чтобы узнать, на какой ветке вы находитесь, выполните команду git checkout и посмотрите на звездочку). Когда вы посчитаете, что ваших изменений достаточно и они готовы к отправке в upstream-проект, вам сначала нужно добавить файлы для подготовки. Подготовка изменённых файлов для коммита – это способ сообщить Git’у, что файлы готовы быть зафиксированы. Для этого выполните:

        $ git add <file/directory>
    

Если вы изменили много файлов в одном конкретном каталоге, вы можете добавить в git целые каталоги. Обратите внимание, что Git выделит только те файлы, которые были изменены, если вы добавляете целый каталог, в котором некоторые файлы остались неизменными. Чтобы проверить, какие файлы были подготовлены для коммита, вы можете выполнить команду git status. Если вы хотите удалить файл, являющийся частью коммита, выполните git rm file, чтобы одновременно удалить файл и подготовить процесс удаления для коммита.

Зафиксируйте поэтапные изменения

После того как вы подготовили все нужные файлы, настало время зафиксировать изменения. Использование опции -s подпишет ваш коммит, используя информацию о конфигурации git, которую вы указали в разделе Общая настройка.

        $ git commit -s


    

Важное замечание: я не рекомендую использовать опцию -m с опцией git commit. git commit -m<msg> позволяет вам использовать заданное <msg> в качестве сообщения коммита в то же время, когда вы фиксируете изменения в коде. Однако это не позволяет писать подробные или грамотно оформленные сообщения о фиксации, поскольку сообщения коммита при использовании опции -m обычно представляют собой короткие однострочные фразы. Я выступала на конференции All Things Open и рассказывала о том, зачем и как писать хорошие сообщения коммита (этот доклад также был преобразован в blog форму). Многие проекты с открытым исходным кодом также имеют требования к сообщениям коммита для проекта. Перед началом работы обязательно ознакомьтесь с ними. Как только вы закончите писать сообщение коммита, сохраните его и выйдите из окна сообщения.

Внесите свои изменения

После того как вы сохранили и вышли из окна сообщения коммита, пришло время перенести изменения в удаленный форк. До сих пор ваши изменения находились в локальной копии удаленного репозитория origin. Дальше происходит отправление и загрузка изменений в удаленный репозиторий на GitHub.

        $ git push origin <working_branch_name>
    

Открытие пулл-реквеста

После публикации изменений вы можете использовать GitHub WebUI для открытия PR. Просто перейдите на главную страницу проекта, и GitHub автоматически предложит открыть PR из изменений, которые были недавно перенесены в ваш форк.

4. Редактирование своего коммита после того, как вы уже открыли PR

Перезалейте свои изменения в upstream

Если вас просят внести изменения в ваш PR, возможно, что с момента отправки изменений в репозиторий upstream были слиты другие коммиты. Чтобы быть уверенным, что вы не загружаете устаревший код или файлы при обновлении вашего PR, лучше всего перебазировать ваши изменения в удаленный репозиторий upstream. Чтобы сделать это легко, используйте домашнюю базовую ветку. Имейте в виду, что домашняя базовая ветвь названа up для этого примера, но вы можете назвать ее по-другому.

Следующий набор команд сначала позволит получить все изменения из upstream, а затем применить их к вашей ветке up. Это означает, что вы обновите свою ветвь up, чтобы она соответствовала последним изменениям в репозитории, в который вы отправляете свой PR. После того как вы переключитесь обратно на свою рабочую ветвь, команда git rebase up обновит вашу рабочую ветвь (содержащую изменения вашего PR), чтобы она включала в себя последние изменения из репозитория (через ветвь up), сохраняя при этом изменения, сделанные вами в рабочей ветви. Этот процесс позволяет вам получить изменения из репозитория upstream, чтобы ваш PR мог быть объединен с данным репозиторием без конфликтов. Это также гарантирует, что все тесты непрерывной интеграции, запускаемые после обновления или отправки вашего PR, будут работать с последними изменениями в кодовой базе.

        $ git checkout up
$ git pull --rebase
$ git checkout <existing_pr_working_branch_name>
$ git rebase up
    

Теперь, когда ваша рабочая ветвь актуальна, вы можете вносить свои изменения. Чтобы внести изменения в файлы исходного кода, вы должны отредактировать файл(ы) и запустить git add, чтобы подготовить их для коммита, как вы это делали раньше. Чтобы обновить ваш PR для добавления этих изменения, вы можете внести правки в предыдущий коммит. Внесение изменений в ваш коммит также даст вам возможность отредактировать сообщение коммита, если вам это необходимо. Если вам нужно внести изменения только в сообщение коммита, а не в файлы исходного кода, пропустите git add и просто выполните:

        $ git commit --amend
    

Если вам не нужно обновлять сообщение коммита, просто сохраните и выйдите из окна сообщения после выполнения правок. Если вы хотите обновить сообщение, внесите изменения перед сохранением и выходом из окна сообщения.

Ре-пуш изменений

Убедитесь, что вы всё ещё находитесь на рабочей ветке, где вы только что внесли изменения в свой коммит. Внесение изменений в локальный коммит не обновляет коммит в удаленном репозитории и не изменяет пулл-реквест. Чтобы обновить свой PR, вам нужно будет повторно отправить изменения в форк удаленного репозитория:

        $ git push -f origin <existing_pr_working_branch_name>
    

Опция -f/force push может быть опасной при неправильном использовании, так как она может переписать историю коммитов в удаленном репозитории вашей собственной локальной истории. Однако в данном случае она необходима, поскольку вы вносите изменения в старый коммит и намеренно переписываете историю git в вашем форке, чтобы включить в неё свои последние правки. Когда вы выполняете принудительный push после внесения изменений в свой коммит, вы создаёте новый git commit ID, чтобы связать его с вашими изменениями.

Если вы посмотрите на исходный PR, который вы открыли, вы увидите, что теперь он содержит ваши последние изменения. Если CI/CD-тесты настроены для репозитория, в который вы отправляете PR, вы увидите, что они снова будут запущены для повторного выполнения последнего набора изменений.

Продолжая вносить свой вклад

Помните, что ваша ветка up – это ваша домашняя базовая ветка, которую вы будете использовать для отслеживания изменений. Вы не будете использовать ее для разработки или внесения изменений в исходный код. Если вы хотите начать работу над новой задачей для того же проекта, вы можете начать выполнять действия, описанные в шаге 3, Общий рабочий процесс, поскольку ваша домашняя базовая ветка уже будет создана на этом этапе.

***

Материалы по теме

23
Сен
2022

serverinfo для дискорд бота discord.py

Итак, хотел сделать слэш команду serverinfo для своего дискорд бота, но при запуске команды выдает ошибку
await ctx.send(embed=embed)
^
invalid syntaxix
Вот мой код для справки, кто поможет буду благодарен
`async def serverinfo(ctx):
owner…

15
Сен
2022

IntelliJ IDEA перестал при коммите игнорировать предупреждения, связанные с особеностями работы Spring

При использовании возможностей Spring (@Autowired и т.п.) обычно появляются варнинги например:
Class "ClassName" is never used.

Которые обычно сами подавляются и при попытке коммита не всплывают.
Однако теперь они не подавляютс…

02
Авг
2022

Не работает сохранение в phpstorm

Впервые воспользовался git в phpstorm.
Сейчас не работает сохранение файлов в проекте, произошло это после применения гита. Почему так может происходить?
В терминале вводил следующее:
git init
git add .
git commit -m "Push existing pr…

27
Июл
2022

Как переключить проект на свой форк в intelij idea?

Суть в том, что забыл форкнуть проект и склонировал оригинальный репозиторий, теперь по понятным причинам при попытка запушить проект мне выбивает "отказано в доступе", ведь это не мой репозиторий:
remote: Permission to TwitchRec…

25
Июл
2022

ложиться бот на хероку

Написал телеграм бота на пайтоне с деплоем на хероку, но из-за неизвестной мне причине он ставит статус crash, а не up
bot.py

import asyncio
import logging

from aiogram import Bot, Dispatcher
from config import BOT_TOKEN
from aiogram.con…

02
Июл
2022

Как убрать все обновления проекта в Pycharm Git

Всем привет, сегодня первый раз загрузил свой проект на гитхаб.
И столкнулся с такой проблемой, что теперь все изменения моего проекта отображаются в Pycharm(зеленая полоска рядом с изменением и подсвечивается файл, который был изменен), к…

26
Июн
2022

Как полностью переустановить git с проекта или удалить комиты?

У меня есть проект django в pycharm. Изначально я не шифровал пароли и секретные ключи, из-за чего у меня в комитах они теперь видны. Мне нужно либо полностью переустановить git или как-то удалить все комиты. Просто если я его буду пушить …

17
Май
2022

🔑 Чем полезен Git Credential Manager? Обзор менеджера аутентификации для новичков и профессионалов

Обзор популярного менеджера аутентификации Git Credential Manager (GCM), обеспечивающего безопасную и удобную аутентификацию к репозиторию.

Универсальная аутентификация Git

Аутентификация – это сложно. Сложно отлаживать, сложно тестировать, сложно получать доступ.
Matthew John Cheetham

Эти слова были правдой как в июле 2020 года, так и сегодня. Цель Git Credential Manager (GCM) – сделать аутентификацию к удаленному репозиторию Git легкой и безопасной, вне зависимости от того, где хранится код или как вы предпочитаете работать. Коротко: GCM хочет стать универсальной аутентификацией Git.

В предыдущей статье писалось о риске распространения универсальных стандартов и о том, что внедрение Git Credential Manager Core (GCM Core) будет означать появление еще одного помощника в работе с мандатами. Удалось заменить GCM для Windows, Mac и Linux на новый GCM! Исходный код старых проектов заархивирован и больше не поставляется с такими дистрибутивами как Git для Windows.

Поэтому моникер Core был убран из названия проекта, чтобы стать Git Credential Manager или сокращенно GCM.

GCM
GCM

У GCM появился новый дом на GitHub https://github.com/GitCredentialManager.

Размещение на github.com/microsoft или github.com/github не совсем соответствовало этике GCM как открытого, универсального и агностического проекта. Текущие проблемы и запросы на исправление были перенесены, и по-прежнему приветствуются желающие внести вклад в проект.

Страница GCM в GitHub
Страница GCM в GitHub

Взаимодействие с удаленными HTTP-серверами без помощника по учетным данным, такого как GCM, усложняется с удалением аутентификации по логину/паролю в GitHub и BitBucket. GCM упрощает эту задачу, а благодаря разработкам, таким как GitHub Mobile для двухфакторной аутентификации и поддержка потока кода устройства OAuth, аутентификация становится лучше.

Больше полезных материалов вы найдете на нашем телеграм-канале «Библиотека программиста»

Привет Linux!

GCM❤Linux
GCM❤Linux

В стремлении получить универсальное решение для аутентификации в Git, выполнена работа над тем, чтобы GCM одинаково работал на различных дистрибутивах Linux с упором на дистрибутивы на базе Debian.

Доступны пакеты Debian, которые можно загрузить со страницы выпусков GitHub, а также tar-архивы для других дистрибутивов (только для x64 версии Intel). Построение на платформе .NET облегчает сборку и запуск везде, где работает среда выполнения .NET. Со временем планируется расширить матрицу поддержки дистрибутивов и процессорных архитектур (например, добавить поддержку ARM64).

В связи с широкой и многообразной природой дистрибутивов Linux важно, что GCM предлагает много вариантов хранения учетных данных. В дополнение к зашифрованным GPG файлам добавлена поддержка Secret Service API через libsecret (также см. GNOME Keyring), которая дает опыт схожий с тем, что предоставляется в GCM на Windows и macOS.

Подсистема Windows для Linux

В дополнение к дистрибутивам Linux также реализована специальная поддержка GCM для подсистемы Windows для Linux (WSL). Использование GCM с WSL означает, что все ваши установленные WSL могут совместно использовать учетные данные Git друг с другом и с хостом Windows, что разрешает вам легко смешивать и сочетать среды разработки.

GCM для WSL
GCM для WSL

Смотрите больше о GCM для WSL здесь.

Привет, GitLab

Универсальность означает не только работу с большим количеством мест, но и любую службу хостинга Git. Благодаря активному сообществу, GCM постоянно становится лучше. И теперь GCM поддерживает GitLab.

GCM и Git хостинг
GCM и Git хостинг

Никаких терминалов!

Несмотря на любовь к терминалу, не всем удобно вводить команды и отвечать на подсказки с помощью клавиатуры. Кроме того, многие инструменты и IDE, предлагающие интеграцию с Git, делают это путем передачи исполняемого файла git, что означает, что GCM может быть вызван для аутентификации из GUI-приложения, где нет терминала.

GCM предлагает полноценные графические подсказки аутентификации в Windows, благодаря проекту Avalonia, предоставляющего кросс-платформенный .NET XAML фреймворк. Также предоставляются графические подсказки на macOS и Linux.

GCM интерфейс на разных платформах
GCM интерфейс на разных платформах

GCM продолжает поддерживать подсказки в терминале в качестве опции по умолчанию для подсказок. Известны среды, где нет графического интерфейса (например, при подключении по SSH без переадресации дисплея), и вместо этого представляются эквивалентные текстовые подсказки. При желании можно вручную отключить подсказки GUI.

Обеспечение безопасности цепочки поставок программного обеспечения

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

В 2020 году была раскрыта масштабная кибератака, затронувшая часть федерального правительства США, а также несколько крупных компаний-разработчиков программного обеспечения. Недавний указ президента США в ответ на эту кибератаку актуализирует важность таких механизмов, как многофакторная аутентификация, политика условного доступа и общая защита цепочки поставок программного обеспечения.

Храните ВСЕ учетные записи

Git Credential Manager создает и хранит учетные данные для доступа к репозиториям Git на множестве платформ. Учетные данные хранятся с помощью стандартных промышленных API шифрования и хранения.

GCM использует менеджер учетных данных Windows и связку ключей для входа в систему в macOS.

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

GCM для всех платформ
GCM для всех платформ

Также GCM теперь может использовать помощник Git git-credential-cache, который собирается и доступен во многих дистрибутивах Git. Этот вариант подходит для облачных оболочек или эфемерных сред, когда нет желания постоянно сохранять учетные данные на диске, но при этом избежать запроса при каждом git fetch или git push.

Современная проверка подлинности Windows (экспериментальная)

Еще один способ обеспечения безопасности учетных данных – поддержка на аппаратном уровне с помощью таких технологий, как Trusted Platform Module (TPM) или Secure Enclave. Кроме того, предприятия, желающие убедится в том, что устройство или учетные данные не скомпрометированы, могут использовать политики условного доступа.

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

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

GCM и брокеры аутентификации
GCM и брокеры аутентификации

GCM получил экспериментальную поддержку брокерской аутентификации (пока только для Windows)!

В Windows брокер проверки подлинности – компонент, который впервые появился в Windows 10 и известен как Web Account Manager (WAM). WAM разрешает таким приложениям, как GCM поддерживать современные способы аутентификации, такие как, Windows Hello и применять политики условного доступа, установленные на работе или учебе.

Обратите внимание, что поддержка брокера Windows пока экспериментальна и ограничивается проверкой подлинности рабочих и учебных учетных записей Microsoft в Azure DevOps.

Больше о GCM и WAM рассказывается по этой ссылке, в том числе о том, как зарегистрироваться и о текущих известных проблемах.

Что такое условный доступ?

Условный доступ – это идея предоставления доступа к системе или ресурсу только при соблюдении критериев. Эти критерии могут включать такие вещи, как: проверка актуальности и работоспособности антивирусного программного обеспечения на устройстве, безопасное соединение через VPN, использование 2FA или динамическое обнаружение подозрительной активности из учетной записи пользователя.

Условный доступ
Условный доступ

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

Храня учетные данные репозитория Git, GCM имеет возможности для содействия внедрению методов для доступа к исходному коду. Вопросы использования новейших технологий и средств защиты активно и постоянно изучаются.

Еще больше улучшений

За последние 18 месяцев в GCM появилось много функций и улучшений. Вот краткое изложение дополнительных обновлений после публикации в июле 2020 года:

  • Автоматическое определение локальных/самостоятельно размещенных экземпляров.
  • Поддержка GitHub Enterprise Server и GitHub AE.
  • Общие кэши токенов Microsoft Identity с другими инструментами разработчика.
  • Улучшенная поддержка сетевых прокси.
  • Поддержка пользовательских корневых сертификатов TLS/SSL.
  • Установщик Windows без администратора.
  • Улучшенная обработка и вывод командной строки.
  • Поддержка корпоративных настроек по умолчанию в Windows.
  • Многопользовательская поддержка.
  • Улучшенная диагностика.

Планы на будущее

Несмотря на значительный прогресс в достижении цели универсального опыта, снижение темпа в ближайшее время не планируется и GCM будет развиваться.

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

***

Материалы по теме

13
Май
2022

Организация хранения настроек с помощью переменных окружения

Подскажите, пожалуйста, как хранить конфиги (логин/пароль/url к бд) в переменных окружения?
Я сейчас разрабатываю приложение на Spring Boot. Приложение работает с базой данных, поэтому для локального тестирования в файле application.yml пр…

12
Май
2022

Переместить указатель пустой ветки на мастер без добавления коммитов

Есть ветка, которая не содержит в себе новых коммитов, но указывает на некий старый коммит мастера. Как перенести её указатель на текущий последний коммит мастера, не добавляя коммиты в ветку? Если делать ребейз/ресет ветки на мастер, то к…

02
Апр
2022

Удалились локальные файлы с remote ветки git

Работаю в VScode, при change изменения я решил проверить на какой ветке я нахожусь, оказался в origin/master, не подумал, переключился обратно на свою основную ветку, и все изменения, которые я делал, пропали. Переключился обратно на remot…

10
Мар
2022

Ошибка импорта файлов python после скачивания с github

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

17
Фев
2022

Как корректно перенести проект python с Windows на Linux [закрыт]

Как корректно перенести проект python?
Список библиотек перенес с помощью ‘pip freeze’, с помощью git перенес проект
Потом накатил venv, активировал его, после закачал библиотеки, запускаю скрипт в окружении
python3 SM_774.py

Выдает ошибк…

10
Фев
2022

Как сделать так, чтобы программа выдавала по одному слову? Т.е. выдает слово – я ввожу перевод, выдает следующее слово – я ввожу перевод и т.д

Не пойму почему при запуске программа выдает вначале сразу два слова?
https://github.com/Grauen1989/Anglijskij.git
int quantityWords = words.size();
System.out.println("Эта программа выводит случайные английские слова, начиная с 14.04…

29
Дек
2021

Работа с проектом на удаленном/виртуальном сервере из PHPStorm и других IDE

Народ, подскажите пожалуйста как лучше и правильнее работать. Раньше всегда работал с локальным проектом и через PHPStorm фиксировал изменения в GIT и т.п. Сейчас проекты все на виртуальном сервере (Ubuntu), доступ к нему по SSH. Как прави…

26
Дек
2021

Как запушить изменения одной ветки в другую не принимая изменения второй ветки, но иметь возможность модифицировать её?

У меня есть ветка main и ветка deploy. На деплое есть отдельные файлы для деплоя. Я сделал изменения в главной ветке и теперь хочу их запушить и в главную ветку, и в ветку деплой. Но проблема в том, что я должен принять сначало изменения в…

18
Окт
2021

В чем проблема выполнения git команды через php?

Не могу побороть одну проблемку.
В терминале делаю git clone [email protected]:xxx/yyy.git – все корректно клонируется (ssh ключи установлены, все ок.) в том же каталоге пробую это сделать через php:
passthru(‘git clone [email protected]:x…

17
Окт
2021

🛠 Всё, что нужно знать начинающему о Git: рассмотрим за 15 минут

Распределенная система контроля версий Git – популярный инструмент для координации параллельной работы и управления проектами в мире ИТ. Умение им пользоваться хотя бы на уровне основных команд необходимо даже начинающему разработчику.

17
Окт
2021

🛠 Всё, что нужно знать начинающему о Git: рассмотрим за 15 минут

Распределенная система контроля версий Git – популярный инструмент для координации параллельной работы и управления проектами в мире ИТ. Умение им пользоваться хотя бы на уровне основных команд необходимо даже начинающему разработчику.