Чтобы иметь возможность совместной работы над каким-либо Git-проектом, необходимо знать, как управлять удалёнными репозиториями. Удалённые репозитории — это модификации проекта, которые хранятся в интернете или ещё где-то в сети. Их может быть несколько, каждый из которых, как правило, доступен для вас либо только на чтение, либо на чтение и запись. Совместная работа включает в себя управление удалёнными репозиториями и помещение (push ) и получение (pull ) данных в и из них тогда, когда нужно обменяться результатами работы. Управление удалёнными репозиториями включает умение добавлять удалённые репозитории, удалять те из них, которые больше не действуют, умение управлять различными удалёнными ветками и определять их как отслеживаемые (tracked) или нет и прочее. Данный раздел охватывает все перечисленные навыки по управлению удалёнными репозиториями.
Чтобы разобрать примеры этой главы я создал удаленный репозитарий TestRemote на GitHub, а затем склонировал его себе.
Отображение удалённых репозиториев
Чтобы просмотреть, какие удалённые серверы у вас уже настроены, следует выполнить команду git remote . Она перечисляет список имён-сокращений для всех уже указанных удалённых дескрипторов. Если вы склонировали ваш репозиторий, у вас должен отобразиться, по крайней мере, origin — это имя по умолчанию, которое Git присваивает серверу, с которого вы склонировали:
Чтобы посмотреть, какому URL соответствует сокращённое имя в Git, можно указать команде опцию -v :
Добавление удалённых репозиториев
Чтобы добавить новый удалённый Git-репозиторий под именем-сокращением, к которому будет проще обращаться, выполните git remote add [сокращение] :
Теперь вы можете использовать в командной строке имя tr вместо полного URL.
Например, я сделал некоторые изменения файла README.md и теперь загрузим их себе в локальный репозиторий командой git fetch :
Теперь ветка изменений с сервера доступна локально как tr/mater. Вы можете слить (merge) её в одну из своих веток или перейти на эту ветку, если хотите её проверить.
Тут надо отметить, что между командами git pull и git fetch есть разница, но об этом чуть позже.
На данный момент, если мы посмотрим содержимое файла README.md в рабочем каталоге, то оно будет точно такое же, как было до команды git fetch. Это потому, что мы в данный момент находимся в ветке master локального репозитария, которая не была изменена.
Чтобы посмотреть все существующие ветки можно дать команду git branch с ключом –a , который покажет все ветки репозитория.
Здесь активная ветка обозначена звёздочкой. А так же мы видим ветку которую мы притянули командой git fetch – это ветка remotes/tr/master. Собственно об этом нам команда git fetch и сообщила после выполнения.
Переключится на ветку можно командой git checkout <имя ветки>
И так мы переключились на ветку которую стянули командой git fetch, о чем нам выдалось сообщение и рассказали какие файлы были обновлены. Это файл README.md. Теперь в рабочем каталоге мы можем посмотреть измененное содержимое этого файла (мы его меняли непосредственно на GitHub).
Мы так же можем переключится обратно на нашу ветку master
Теперь будем разбираться с разницей между fetch и pull .
Fetch и Pull
Как вы только что узнали, для получения данных из удалённых проектов, следует выполнить:
$ git fetch [имя удал. сервера]
Данная команда связывается с указанным удалённым проектом и забирает все те данные проекта, которых у вас ещё нет . После того как вы выполнили команду, у вас должны появиться ссылки на все ветки из этого удалённого проекта. Теперь эти ветки в любой момент могут быть просмотрены или слиты (объединены).
Когда вы клонируете репозиторий, команда clone автоматически добавляет этот удалённый репозиторий под именем origin . Таким образом, git fetch origin извлекает все наработки, отправленные (push ) на этот сервер после того, как вы склонировали его (или получили изменения с помощью fetch ) . Важно отметить, что команда fetch забирает данные в ваш локальный репозиторий, но не сливает (не объединяет) их с какими-либо вашими наработками и не модифицирует то, над чем вы работаете в данный момент . Вам необходимо вручную слить эти данные с вашими, когда вы будете готовы.
Если у вас есть ветка, настроенная на отслеживание удалённой ветки, то вы можете использовать команду git pull . Она автоматически извлекает и затем сливает (объединяет) данные из удалённой ветки в вашу текущую ветку . Этот способ может для вас оказаться более простым или более удобным. К тому же по умолчанию команда git clone автоматически настраивает вашу локальную ветку master на отслеживание удалённой ветки master на сервере , с которого вы клонировали (подразумевается, что на удалённом сервере есть ветка master). Выполнение git pull , как правило, извлекает (fetch ) данные с сервера , с которого вы изначально склонировали, и автоматически пытается слить (объеденить) (merge ) их с кодом, над которым вы в данный момент работаете .
$ git push origin master
Эта команда срабатывает только в случае, если вы клонировали с сервера, на котором у вас есть права на запись, и если никто другой с тех пор не выполнял команду push . Если вы и кто-то ещё одновременно клонируете, затем он выполняет команду push , а затем команду push выполняете вы, то ваш push точно будет отклонён. Вам придётся сначала вытянуть (pull ) их изменения и объединить с вашими. Только после этого вам будет позволено выполнить push .
Я выполнил команды pull и объединил изменения для файла README.md и затем залил их на сервер GitHub. Скрин привожу просто для информации чтобы было видно как это делается.
Более подробно как отправлять (push ) данные на удалённый сервер мы рассмотрим чуть позже.
Инспекция удалённого репозитория
Если хотите получить побольше информации об одном из удалённых репозиториев, вы можете использовать команду git remote show [удал. сервер] . Если вы выполните эту команду с некоторым именем, например, origin, вы получите что-то подобное:
Она выдаёт URL удалённого репозитория, а также информацию об отслеживаемых ветках. Эта команда любезно сообщает вам, что если вы, находясь на ветке master , выполните git pull , ветка master с удалённого сервера будет автоматически влита в вашу сразу после получения всех необходимых данных . Она также выдаёт список всех полученных ею ссылок.
Данная команда так же показывает какая именно локальная ветка будет отправлена на удалённый сервер по умолчанию при выполнении git push . Она также показывает, каких веток с удалённого сервера у вас ещё нет, какие ветки всё ещё есть у вас, но уже удалены на сервере.
Удаление и переименование удалённых репозиториев
Для переименования ссылок в новых версиях Git"а можно вылолнить git remote rename , это изменит сокращённое имя, используемое для удалённого репозитория. Например, если вы хотите переименовать tr в tstrmt, вы можете сделать это следующим образом:
Стоит упомянуть, что это также меняет для вас имена удалённых веток. То, к чему вы обращались как tr/master, стало tstrmt/master.
Если по какой-то причине вы хотите удалить ссылку (вы сменили сервер или больше не используете определённое зеркало, или, возможно, контрибьютор перестал быть активным), вы можете использовать git remote rm :
Как загрузить ветку с git? (4)
У меня есть проект на GitHub. Я создал ветку на одном компьютере, а затем переместил мои изменения в github с помощью
Git push origin branch-name
Теперь я на другом компьютере, и я хочу загрузить эту ветку. Поэтому я попробовал:
Git pull origin branch-name
Но все это означало переписывание моей ветви мастера изменениями в моей новой ветке.
Что мне нужно сделать, чтобы правильно потянуть мою удаленную ветку?
Git clone и cd в имени репо:
$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git Cloning into "iOS-AppleWach"... $ cd iOS-AppleWach
Перейдите на ветку (страница GitHub), которую я хочу:
$ git checkout -b gh-pages origin/gh-pages Branch gh-pages set up to track remote branch gh-pages from origin. Switched to a new branch "gh-pages"
И потяните ветку:
$ git pull Already up-to-date.
$ ls index.html params.json stylesheets
$ git clone https://github.com/lukeredpath/LRResty.git $ cd LRResty
Проверьте, какая ветка вы используете в данный момент (она должна быть главной ветвью):
$ git branch * master
Проверьте ветку, которую вы хотите, в моем случае она называется «arcified»:
$ git checkout -b arcified origin/arcified Branch arcified set up to track remote branch arcified from origin. Switched to a new branch "arcified"
Подтвердите, что вы используете ветку, которую хотите:
$ git branch * arcified master
Если вы хотите позже обновить код, запустите git pull:
$ git pull Already up-to-date.
Перейдите в папку на новой машине, которую вы хотите загрузить с git на git bash.
Используйте нижеприведенную команду для загрузки кода из любой отрасли, которая вам нравится
git clone "git ssh url" -b "Branch Name"
Он загрузит соответствующий код ветвления.
Очень часто появляется необходимость создать в локальном клоне проекта новую ветку , закинуть в нее уже созданные или измененные файлы, протолкнуть новую ветку в удаленный репозиторий, например в , чтобы коллега-программист мог стянуть ветку и посмотреть изменения или результат.
Создаем и проталкиваем новую ветку
Есть два равнозначных способа создать и переключиться на новую ветку. Первый односрочный:
Root@user: git checkout -b new_feature
Второй, аналогичный первому, но в две строки:
Root@user: git branch new_feature root@user: git checkout new_feature
Готово. Новая ветка создана в локальном репозитории и в нее включены все локальные изменения. И мы переключились на новую локальную ветку . Можем создать коммит и протолкнуть новую ветку в удаленный репозиторий:
Root@user: git commit -m "new feature" root@user: git push origin new_feature
Где origin — название вашего удаленного репозиторий (origin — значение по умолчанию при клоне проекта), new_feature — название вашей новой ветки.
Затягиваем новую ветку из удаленного репозитория
Созданная нами ветка уже находится в удаленном репозитории и теперь нам нужно изолированно ее затянуть из репы. Если сделать просто pull , то новая ветка не подтянется. Если сделать просто git pull origin new_feature, то ветка сольется с веткой master. Поэтому делаем следующую последовательность:
Root@user: git fetch root@user: git checkout -b new_feature root@user: git pull origin new_feature
На первой строке с помощью команды git fetch смотрим есть ли новые ветки, при этом загрузка удаленных изменений не происходит. Второй строкой создает локальную ветку с наким же названием и переключаемся на нее. В конец, на третьей строке, затягиваем удаленные изменения в новую ветку. Система предложить сделать merge-commit.
// echo get_the_post_thumbnail(get_the_ID(), "relatedthumbnail"); // вывожу свой размер миниатюры?>
Иногда при работе с локально и удаленной веткой нам требуется их удалять. Например эта ветка отдельной функциональности которая уже слита в develop или master. Или это ветка для устранения багов. Давайте посмотрим как можно легко и быстро удалять локальные (local) и удаленные (remote) ветки.
Быстрый ответ — финальное резюме
$ git push -dЗамечу, что в большинстве случаев удаленный репозиторий записан как origin .
Удаляем локальную ветку
Чтобы удалить локальную ветку используем одну из следующих команд:
$ git branch -d branch_name $ git branch -D branch_name
Пояснение: ключ -d это ярлык команды --delete , которая удаляет ветку, только если последняя полностью смержена в ее upstream ветку. Можно также использовать команду -D , которая является алиасом команды --delete --force , которая удаляет ветку «невзирая на ее мерж статус» (независимо объединяли вы ее с вышестоящей upsream веткой ли нет).
Удаление удаленной remote ветки
В Git версии v1.7.0 , вы можете удалить remote ветку используя
$ git push
что возможно легче запомнить, чем команду
$ git push
которая была добавлена в Git v1.5.0 «чтобы удалить удаленную remote ветку или тег tag.»
Начиная с Git v2.8.0 вы также можете использовать git push с опцией -d как ярлык вместо --delete .
Более того, версия гита которая у вас установлена будет определять какой синтаксис использовать, более легкий или более сложный.
Удалить удаленную remote ветку
Цитата из 3-ей главы книги Pro Git Скотта Чакона:
Удаление Удалённых Веток
Полагаю вы завершили с работой в удаленной ветке, вы и ваши сотрудники закончили с новой фичей и смержили ее в вашу mster ветку на удаленном репозитории. Вы можете удалить удаленную ветку используя довольно тупой синтаксис git push : . Если вы хотите удалить вашу bugfix ветку с фиксом багов на сервере, вы запускаете следующую команду:
$ git push origin:serverfix To :schacon/simplegit.git - serverfix
Бабах! И не больше такой ветки на вашем сервере. Наверное вам захочется поставить закладку на эту страницу, потому что вам еще понадобится эта команда, и вы скорее всего забудете как она пишется. Способ чтобы запомнить эту команду, вспомнить прошлую git push : синтаксис которой мы рассматривали немного ранее. Если вы оставите , тогда вы буквально скажите следующее “Возьми ничего с моей стороны и сделай это .”
Я использовал git push origin:bugfix и это отлично работает.
После, вам следует выполнить эту команду на других машинах разработчиков:
Git fetch --all --prune
чтобы распространить изменения.
Как загрузить ветку с git? (4)
Git clone и cd в имени репо:
$ git clone https://github.com/PabloEzequiel/iOS-AppleWach.git Cloning into "iOS-AppleWach"... $ cd iOS-AppleWach
Перейдите на ветку (страница GitHub), которую я хочу:
$ git checkout -b gh-pages origin/gh-pages Branch gh-pages set up to track remote branch gh-pages from origin. Switched to a new branch "gh-pages"
И потяните ветку:
$ git pull Already up-to-date.
$ ls index.html params.json stylesheets
У меня есть проект на GitHub. Я создал ветку на одном компьютере, а затем переместил мои изменения в github с помощью
Git push origin branch-name
Теперь я на другом компьютере, и я хочу загрузить эту ветку. Поэтому я попробовал:
Git pull origin branch-name
Но все это означало переписывание моей ветви мастера изменениями в моей новой ветке.
Что мне нужно сделать, чтобы правильно потянуть мою удаленную ветку?
$ git clone https://github.com/lukeredpath/LRResty.git $ cd LRResty
Проверьте, какая ветка вы используете в данный момент (она должна быть главной ветвью):
$ git branch * master
Проверьте ветку, которую вы хотите, в моем случае она называется «arcified»:
$ git checkout -b arcified origin/arcified Branch arcified set up to track remote branch arcified from origin. Switched to a new branch "arcified"
Подтвердите, что вы используете ветку, которую хотите:
$ git branch * arcified master
Если вы хотите позже обновить код, запустите git pull:
$ git pull Already up-to-date.
Перейдите в папку на новой машине, которую вы хотите загрузить с git на git bash.
Используйте нижеприведенную команду для загрузки кода из любой отрасли, которая вам нравится
git clone "git ssh url" -b "Branch Name"
Он загрузит соответствующий код ветвления.