Как использовать Git-Bundle для сохранения разработки в синхронизации?

StackOverflow https://stackoverflow.com/questions/3635952

  •  30-09-2019
  •  | 
  •  

Вопрос

Мне нужно сохранить свои деревья развития в синхронизации на разных компьютерах без сетевой связи между ними.

У нас есть репозиторий центрального GIT, и я обычно работаю над своим клоном на моем офисном компьютере. Иногда мне нужно сделать некоторое развитие на другом компьютере, который никогда не подключен к офисной сети. Ни один из компьютеров не подключен к Интернету. Разработка может быть выполнена на обоих компьютерах между синхронизацией.

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

Можете ли вы дать мне несколько советов или указателей?

Это было полезно?

Решение

Пакеты!

Рабочий процесс с Git Bundle будет по существу, так же, как любой другой рабочий процесс. Это, возможно, не похоже на ужасно полезные советы, но вот оно: Используйте любой рабочий процесс, который вы обычно используете, и замените «толчок / тянуть» с «нести связки здесь на флешку, затем потяните».

Страница человека на самом деле имеет довольно хорошее прохождение для того, чтобы идти с этим, хотя это более односторонний пример. Ради полноты, вот слегка модифицированная версия IT, показывающая, как перемещать информацию об обоих способах:

# on hostA, the initial home of the repo
hostA$ git bundle create hostA.bundle --branches --tags

# transfer the bundle to hostB, and continue:
hostB$ git clone /path/to/hostA.bundle my-repo
# you now have a clone, complete with remote branches and tags
# just to make it a little more obvious, rename the remote:
hostB$ git remote rename origin hostA

# make some commits on hostB; time to transfer back to hostA
# use the known master branch of hostA as a basis
hostB$ git bundle create hostB.bundle ^hostA/master --branches --tags

# copy the bundle back over to hostA and continue:
hostA$ git remote add hostB /path/to/hostB.bundle
# fetch all the refs from the remote (creating remote branches like hostB/master)
hostA$ git fetch hostB
# pull from hostB's master, for example
hostA$ git pull

# make some commits on hostA; time to transfer to hostB
# again, use the known master branch as a basis
hostA$ git bundle create hostA.bundle ^hostB/master --branches --tags
# copy the bundle to hostB, **replacing** the original bundle
# update all the refs
hostB$ git fetch hostA

# and so on and so on

Ключевое значение, чтобы заметить, что вы можете добавить пучок в качестве пульта и взаимодействовать с ним так же, как и с любым другим удаленным. Чтобы обновить этот пульт, просто брось в новый пакет, заменив предыдущий.

Я также принял немного другой подход к выбору основы. Страница человека использует теги, всегда содержащиеся в курсе последних ссылок, которые были переданы другому хозяину. Я просто использовал удаленные ветви, которые будут переданы последние Refs, переданными от другой хост. Это немного неэффективно; Вы в конечном итоге объединяют больше, чем вам нужно, так как он стоит позади. Но флэш-накопители большие, пакеты маленькие, а использование Refs у вас уже есть вместо того, чтобы сделать дополнительный шаг и быть осторожным о тегах экономит много усилий.

Одно, что делает пучки немного неприятностей, состоит в том, что вы не можете подтолкнуть к ним, и вы не можете «передать» их. Если вы хотите пакет на основе новой основы, вы должны воссоздать его. Если вы хотите новых коммитов в нем, вы должны воссоздать его. Этот хлопот приводит к моему следующему предложению ...

Репо на диске большого пальца

Честно говоря, если ваш репо действительно большой, это может быть так же просто. Положите голый клон на езды на большом пальце, и вы можете подтолкнуть и тянуть от него с обоих компьютеров. Относиться к этому как ваше сетевое соединение. Нужно перейти к центральному репо? Подключите!

Другие советы

@Jefromi ответ был отличным - 10x лучше, чем Git Docs, которые продолжаются по длине о непонятных требованиях и действиях.

Это все еще немного сложно, поэтому вот самый простой синхронизм дела один раз (в моем случае: от: автономного ноутбука со сломанной картой WiFi, чтобы: рабочий стол с сетевым доступом). Исходя из ответа @ Jefromi, это, кажется, работает нормально:

Впереди = машина, которая впереди некоторыми коммитатами. Позади = машина, которую вы хотите скопировать коммиты

1. AHEAD: git-bundle create myBundleName.bundle --branches --tags

Оба: скопируйте mybundlenam.bundle (используя электронную почту, USB, что угодно)

Позади: (поместите файл mybundname.bundle, где вы хотите за пределами Папка проекта)

2. BEHIND: cd [the project folder]
3. BEHIND: git pull [path to the bundle file]/myBundleName.bundle master

Пока вы включаете имя филиала на конце (по умолчанию, если вы не используете филиалы, «Master»), это, кажется, работает нормально, и не заменяет никаких внутренних ссылок на позади - так вы все еще можно синхронизировать в / из главного происхождения.

Т.е. если сзади имеет доступ в Интернет, это все равно безопасно:

(OPTIONAL) 4. BEHIND: git push

... И это обновит основной репозиторий, как если бы ваши изменения были сделаны локально, как обычно, назате.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top