Есть проект локально, я на GitHub сделал репозиторий. Теперь нужно залить с него на сервер.
Не пойму вот что: вроде инструмент для упрощения, но почему так сложно? Я создал папку на сервере, инициализировал там репозиторий Git, прописываю команду git remote add origin https://github.com/...потом git pull — запрашивает логин и пароль. Пароль не подходит, как оказалось что нужно создать токен. Где создать токен я кое-как нашел. (Вообще в настройках в самом самом низу, почему — не понятно), внутри тьма прав — что из этого выбирать тоже не понятно. Вроде выбрал на pull на чтение, так как я с сервера ничего не собираюсь передавать, но мне пишет что не хватает прав.
Разве так должно быть сложно?
Позже планировал написать скрипт который останавливает мой веб-сервер, затягивает данные с гита из мастера, устанавливает чего не хватает из requirements, запускает веб-сервер обратно. Но пока у меня с самого начала затык.
Подскажите правильные последовательности команд, я про них почитаю для понимания, а просто копипаст.
P.S.: а токен еще максимум на год, не забывать новый создавать...
Inviz Custos, приходилось) но не мне лично, косвенно касался. Я не разработчик, программирование - моё хобби. Работаю в IT сфере, кое что разрабатывал, но с репозиториями дело не имел, только в веб интерфейсе смотрел нужную информацию. Сейчас так вообще руковожу. Поэтому знаний нужных нет, учусь самостоятельно.
1. Идете на https://github.com/username/repo_name/settings/keys , жмете "Add deploy key"
Добавляете публичный ключ своего сервера, на который собираетесь деплоить (его можно посмотреть выполнив на сервере что-то типа: cat ~/.ssh/id_rsa.pub )
2. Идете в директорию с проектами на своем сервере и выполняете:
git clone git@github.com:username/repo_name.git
Не создавайте пустой репозиторий, а клонируйте сразу с гитхаба.
И замените в вашем алгоритме https на ssh и всё заработает.
Только ссылка ssh выглядит чуть иначе и придется создать ключи.
Такой вопрос: если не создавать пустого репозитория, то и при необходимости всегда придётся клонировать всё полностью? А если хочется только изменения, то я так понимаю нужно создать пустой репозиторий, связать его с моим на гитхабе и делать pull из мастера? Ход мыслей моих верен?
Elvis, по вашим формулировкам чувствуется что вы вообще не читали учебник по Git. Надо осознать что связываем мы не репозитории а конкретные ветки. Создавая пустой репозиторий вы создаёте новую ДРУГУЮ ветку. Понятие «изменение» возникает только внутри одной цепочки связанных коммитов. А создавая новый репозиторий вы создаёте совершенно новое дерево коммитов и там нечего сравнивать с гитхабом. Команда git pull вам это и скажет, после того как вы решите вашу проблему с авторизацией — ветки не имеют общей истории и всё равно придётся скачивать всю ветку целиком.
У вас локально пустая папка, а на гитхабе готовый проект. Что в данном случае является изменением? Наверное весь проект, который всё равно придётся скачивать.
Если не нужна вся история, а только конечное состояние, то можно скачать только его. И это тоже делается через git clone.
Elvis, вы хоть пробовали так делать? Что получилось?
Ещё раз прошу, почитайте наконец учебник.
Там вы узнаете что pull = fetch + merge
Fetch скачивает весь репозиторий со всеми ветками
Merge применяет скачанные изменения к локальной версии ветки.
По итогу заменились 2 файла, остальные не тронуты. ну и скачивался уж точно не вся репа, так как там достаточно много картинок и качается явно дольше. Команды гита я и так изучаю. просто пока не всегда понятна разница и логика действий. но в целом картина ясна.
Elvis, такая картинка возможно только если вы делали git init внутри уже существующего репозитория и/или во время pull там уже были коммиты.
Подозреваю что вы скопировали рабочий каталог проекта вместе с папкой .git внутри.
Об этом говорит
Updating 7928c2f..ba04b3d
Fast-forward
Указатель ветки просто передвинулся от 7928c2f к ba04b3d
А откуда мог взяться первый коммит, если репозиторий пустой?
Было бы интересно посмотреть git status и git remote -v
Кстати, зачем вы назвали свой remote мастером? Обычно используют origin или upstream.
Команды гита я и так изучаю
Изучать команды не достаточно. Надо понять как оно работает, разобраться что такое рабочий каталог, индекс и репозиторий. Что такое быстрая перемотка (fast-forward)
Сергей Кузнецов, Делал ровно то что и писал, 3 команды подряд: init, remote, pull. Делал это в пустом каталоге. да хоть еще раз создам пустой и там сделаю - сработает, так и тренировался. первый пулл скачивает всё, дальше только изменения. Я, честно, не понимаю что именно вы хотите доказать. что это не может работать?
Я просто вам указал, что вы делаете ненужные действия, которые можно сократить.
git remote add origin git@github.com:username/repo_name.git
— Зачем создавать remote если вы его не используете в дальнейшем?
git pull git@github.com:username/repo_name.git master
— почему не пишете проще? git pull origin master
Ведь для этого и придуманы переменные remote.
Но все эти команды делают почти то же самое что одна команда git clone git@github.com:username/repo_name.git
Одна команда проинициализирует репо. Создаст ссылку remote origin.
Скачает master. Свяжет локальный master с внешним master
В дальнейшем достаточно будет просто команды git pull чтобы подгрузить обновления.
Сергей Кузнецов, вот! вот этих знаний и понимания мне не хватало. в моем понимании было что clone просто скачивает репозиторий и никак не связывает с локальным репозиторием. То есть я думал что это типо wget, скачал и всё. Не понимал что дальше можно использовать pull.
почему не пишете проще?
Опять же - не до конца понимание git. теперь понятнее, спасибо, буду использовать укороченную версию.
Дальше хочу автоматизировать сборку моего сервера по команде, однако, в терминале, у меня каждый раз спрашивает пароль от ключа. Буду искать варианты чтобы не спрашивал.