2016-03-18 6 views
0

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

Как справиться с этой простой настройкой?

То, что я пробовал:

У меня есть клон, который «знает» как операции РЕПО и существуют на портативном жестком диске.

Допустим, кто-то создал новую ветку на «работе», и я хочу перенести ее в «дом» репо. Как это сделать?

Если я отображалась только git pull я получаю следующее на моем клоне:

$ git branch --list --all 
*master 
origin/HEAD -> origin/master 
origin/bugfix_component_condition_destruction_fail 
origin/master 
origin/remove_stoplist_copy_and_erase 

Q: это только означает, что мой местный клон «знает», что есть эти перечисленные отрасли где-то и нет реальных данных нет на моем клоне ожидают также локального существующего, названного «мастером»?

Легко тянуть/нажимать мастер на оба репозитория. Но любой другой, похоже, не существует на моем местном клоне. Должен ли я отслеживать каждую удаленную ветвь локальным моим клоном, а затем передавать его другому репо?

В: Существует ли какой-либо типичный способ иметь дело с двумя репозиториями, чтобы получить их как в синхронизации, так и на обоих репозициях?

В: Есть ли уловка, чтобы получить всю информацию И ТАКЖЕ СОДЕРЖАНИЕ всех удаленных ветвей.

Для меня это немного грязно, что означает «клон» репо? Кажется, это не настоящий клон, а только некоторые метаданные и главная ветвь. Это правильно?

EDIT:

Если я начинаю gitk --all я вижу все изменения, которые сделаны в отрасли. Похоже, что содержимое ветки находится в клоне.

Но если я:

$git checkout -b remove_stoplist_copy_and_erase --track remotes/origin/remove_stoplist_copy_and_erase 
error: Not tracking: ambiguous information for ref refs/remotes/origin/remove_stoplist_copy_and_erase 
Switched to a new branch 'remove_stoplist_copy_and_erase' 

Так что я сделал:

$git checkout origin/remove_stoplist_copy_and_erase 
$git checkout -b remove_stoplist_copy_and_erase 

и теперь толкать его: $ мерзавец толчок --set-вверх по течению экс remove_stoplist_copy_and_erase

Я боюсь должен сделать все это вручную для всех ветвей на обоих пультах, чтобы синхронизировать оба. Есть ли какая-то «лучшая практика» для этой работы?

ответ

1

Вы можете использовать для этого пакеты.Нет необходимости иметь полный репозиторий на переносном диске

Давайте назовем их repo1 и repo2

В repo1 вы звоните:

  • $ git fetch <bundle2> 'refs/heads/*:refs/remotes/repo2/*' импортировать изменения из расслоения файла, созданного в repo2
  • $ git bundle create <bundle1> --all --not --remotes=repo2 создать комплект для отправки на repo2

На repo2, корреспондент ondingly:

  • $ git fetch <bundle1> 'refs/heads/*:refs/remotes/repo1/*' и
  • $ git bundle create <bundle2> --all --not --remotes=repo1

manpage содержит больше информации и примеров.

0

A1: Да, вам нужно выполнить git fetch --all на вашем клоне, чтобы захватить все удаленные ветви.

A2: Существует несколько способов сделать это, но они все процедурные (не в смысле программного обеспечения).

A3: См. A1.

+0

Если я сделал «git fetch - all' ow, чтобы иметь дело с клоном после этого? См. Мое редактирование в моем вопросе. Ваша информация для A2 не очень полезна. «Есть несколько способов» - это не ответ на вопрос, как что-то сделать. Один способ помог бы мне :-) То, что есть способ, совершенно ясно перед вашим ответом! – Klaus

+0

@Klaus: Я согласен с тем, что мой A2 не был полезным ответом. Один из способов сделать это - заплатки (и извинения за связь за пределами площадки): https://ariejan.net/2009/10/26/how-to-create-and-apply-a-patch-with-git/ – TriskalJM

+0

I «Не знаете, что вы подразумеваете под действием клонирования?» Теперь клон должен содержать всю информацию, которую имел исходный репо, поэтому вы относитесь к нему так же, как к удаленному, за исключением того, что изменения, которые вы делаете в клоне, должны быть нажаты. – TriskalJM

Смежные вопросы