Чтобы иметь возможность совместной работы над каким-либо 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 :

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

Создаем и проталкиваем новую ветку

Есть два равнозначных способа создать и переключиться на новую ветку. Первый односрочный:

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.

Я клонировал его в локальную копию, используя Eclipse EGit.

Затем я создал ветвь в исходном репозитории git на сервере.

Как скопировать ветку в мою локальную копию с помощью Eclipse EGit?

Когда я открываю Git Repositories внутри EGit, я вижу:

Local -- master - Remote Tracking -- origin/development -- origin/master

Как я могу получить происхождение / развитие в моем местном использовании с помощью EGit?

Я знаю, что могу создать новый клон, но я не хочу этого делать, поскольку считаю, что должен быть способ получить только новую ветку.

Второй вопрос – где команда pull внутри EGit? Мне удалось найти команду fetch, но когда я запустил ее, она говорит, что ничего не нужно. RefSpec:

Refs/heads/*:refs/remotes/origin/*

Третий вопрос – есть ли способ обработать команды git из командной строки внутри Eclipse в моей системе Windows? Я думал о попытке сделать вывод из командной строки, но я не могу найти его в своей локальной системе.

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

Git checkout -b development origin/development

Я также искал несколько часов, чтобы узнать, как получить удаленную ветвь в Eclipse EGit …

Решение изложено в этом Bugreport . И это очень просто, если вы знаете, как это сделать – не нужно использовать версию командной строки git, которая, даже если она работает в 99% всех случаев, может быть рискованной, поскольку у меня уже были проблемы, которые она мешала Eclipse и EGit.

Просто выполните следующие действия:

  1. Сначала убедитесь, что вы открыли представление EGit Repository view . Если вы еще не открыли его, перейдите в «Window → Show View → Other …» и оттуда выберите «Git → Git Repositories».
  2. В представлении « Repository view выберите «Филиалы → Удаленное отслеживание». Вы должны увидеть там свои удаленные ветви (пример: origin/new_feature).
  3. Щелкните правой кнопкой мыши на удаленной ветке, которую вы хотите иметь с локальными ветвями. Выберите «Создать ветвь» …
  4. Значения по умолчанию должны быть в порядке. Обычно вы ничего здесь не должны менять. Обратите внимание, что вы не должны изменять стратегию «Потянуть» на что-то другое, чем «Объединить», если вы не знаете, что делаете. В противном случае вытягивание изменений в восходящем потоке может привести к потере данных.
  5. Нажмите «ОК», и вы закончите 🙂

Я столкнулся с той же проблемой, и вот как я ее решил:

    Open Git Perspective

    Сначала у вас должна быть ветка, которую вы хотите проверить, в вашем репозитории под удаленным отслеживанием . Моя проблема заключалась в том, что я не мог видеть удаленную ветку здесь, поэтому, чтобы решить эту проблему – выполните Pull on the repository, и эта команда должна предоставить вам все ветки под удаленным отслеживанием

  1. щелкните правой кнопкой мыши (удаленный) Branch, Check Out, проверьте как новое локальное ветвь


Как загрузить ветку с 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"

Он загрузит соответствующий код ветвления.



Как загрузить ветку с 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"

Он загрузит соответствующий код ветвления.