Як отримати з сховища іншого комп'ютера в Git?


77

Наприклад, я клонував сховище джерел на двох комп’ютерах. Потім я продовжую вносити деякі зміни та прив'язую до локального сховища комп'ютера А. Як мені тепер перенести ці зміни на комп'ютер B? І комп'ютер A і B підключені до мережі.

Те, що я шукаю, буде еквівалентом того, як хтось вручну створив виправлення та надіслав його мені, що я можу застосувати до своєї робочої копії / локального репо.


4
на самому ділі не локальний репозиторій , якщо він знаходиться на іншому комп'ютері, на мій погляд: таким чином @ Антуана відповідь краще відповідає назва вашого питання в ...
RubyTuesdayDONO

... тоді як відповідь @ Amber відповідає уточнюючим деталям розповіді вашого запитання.
RubyTuesdayDONO

1
Я хотів би, щоб на це запитання була відповідь Windows
Брендон

Відповіді:


109

Якщо машина, з якої ви хочете отримати доступ, доступна через ssh, ви можете додати до неї сховище як пульт дистанційного керування через ssh, а потім витягнути з нього, як і будь-який пульт:

$ git remote add repo_b username@host:path/to/repository.git
$ git pull repo_b master

(Ви можете пропустити крок додавання віддаленого і просто вказати повну URL-адресу в git pullкоманді замість віддаленого імені, але якщо ви збираєтеся регулярно витягувати зі сховища, додавши його як віддалений, ви заощадите багато набору тексту.)


1
А як щодо натискання від computer_b? Computer_b просуне зміни як зазвичай? "git push"?
Obaid Maroof

15
Для локального репо можна використовувати те саме, але встановити віддалений шлях, якfile:///local/path/to/repo/.git/
точне

2
Це не працює для мене, URL-адреса повинна бути /path/to/repository/.git/.
Айберк Озгюр,

35

Погляньте git pull --help

Це дало б щось на зразок git pull /my/other/repository


7
В Зокрема, в розділі GIT URLS , він говорить: «Для локальних сховищ, також підтримується мерзотником спочатку, можуть бути використані наступні синтаксис: /path/to/repo.git/, file:///path/to/repo.git/»
jemmons

11

Ви можете налаштувати справжній сервер з git daemon . В іншому випадку ви можете використовувати git bundle , який об’єднує внутрішнє представлення git у файл, який можна розділити git pullна іншому кінці.

Наприклад, з git docs, об’єднуючи все:

git bundle create file.bundle master

Потім, з іншого боку, ви можете зробити щось на зразок:

git pull file.bundle HEAD

7

Якщо ви можете підключитися до комп’ютера B за допомогою ssh, ви можете використовувати:

git clone user@host:/path/to/repo

Це дозволить віддалене відстеження через це з'єднання ssh і дозволить вам використовувати git pull / push.


2

Трохи пізно, але все-таки це варто і, щоб розширити відповідь Антуана Пелісса, ви також можете витягнути з ssh-хосту, який має те саме репо, з кількома додатковими комітами в ньому, не додаючи пульт до конфігурації:

git pull user@host:/path/to/repo  # while in the local repo folder

Щоб зрозуміти - одне з можливих застосувань цього - це коли у вас є два хости (A і B), які клонували одне і те ж репо з віддаленого пристрою , і ви внесли деякі зміни на хості A і не хочете надсилати їх на віддалений (поки що), але замість цього потрібно витягнути ці коміти з хосту B. Наведена вище команда з синхронізує ваші репозиторії, не натискаючи на віддалений .


Звичайно, ви можете мати кілька пультів дистанційного керування. Отже, на хості А я б налаштував два пульти дистанційного керування: один, який називається джерелом, звідки ви клонували, і той, що називається В, який є репо на хості В
Мартін Боннер підтримує Моніку

@MartinBonner Я знаю, що ти можеш, що чітко зазначено у прийнятій відповіді. Я просто заявляю, що вам не потрібно. Схоже, прийняту відповідь було оновлено з урахуванням того самого.
Олексій

1
Я вважаю це насправді неймовірно корисним
Барт ван Куїк,

2

У мене це працювало для локального сховища з іншим комп’ютером:

git remote add origin_username username@10.0.0.2:/home/username/dev/project/main/.git/

git pull origin_username master

або

git pull origin_username some_branch

Ви можете перерахувати всі видалені гілки з допомогою: Git LS-дистанційного origin_username
МакКвейд

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.