Скопируйте репозиторий git на автономный компьютер и нажав/потянув через карту памяти

Мне нужно работать в автономном компьютере, где я не могу получить доступ к моему репозиторию. Теперь я также не хочу пропустить использование Git вообще.

Вопросы:

  • Каков наилучший способ скопировать мой репозиторий на автономный компьютер с помощью карты памяти?
  • Есть ли способ скопировать исправления через файловую систему?

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

Ответ 1

Чтобы скопировать полный репозиторий Git, вам просто нужно скопировать папку .git; он содержит все. Git использует безопасные имена файлов и игнорирует отметки времени внутри репо, поэтому эти данные безопасны от обычных припадок к файловой системе.

На целевой машине создайте папку, скопируйте папку .git внутри. Теперь git checkout <branch> предоставит вам рабочую копию.

Если вы хотите перемещать патчи назад и вперед вместо всего репо, то git format-patch <branch> создает их. Команда создаст все исправления, необходимые для обновления удаленного репо (т.е. Выход будет содержать все, что еще не было нажато). вы также можете указать идентификаторы фиксации (= начать с этой фиксации) или диапазоны.

Чтобы применить их, используйте git am < 0001.... в удаленном репо.

по теме:

Ответ 2

Для копирования вашего репо на карту памяти просто используйте git clone, а затем используйте git pull для его обновления.

Например, на вашем онлайн-компьютере с установленной палочкой памяти сделайте

cd <memory-stick-mount-point>
git clone <local-path-to-git-repo>

теперь <local-path-to-git-repo> будет пустом origin для репо на вашей USB-карте, так что позже вы сможете просто используйте git push/pull (при установке на онлайн-машине) для синхронизации автономной работы.

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

Изменить, повторно: не разрешается самостоятельно устанавливать палку:

Если вы можете запросить у администратора git clone репо на карту памяти, это нормально. В противном случае ваш администратор может просто скопировать всю директорию project.git(если это голый репо) или project/.git(иначе) на вашу карту памяти, и вы можете работать против этого, что нужно следить за тем, что пульты дистанционного управления, и т.д. будут работать в онлайн-машине.

Тогда вытаскивание не является проблемой, но нажатие может потребовать дополнительной работы, если вы не доверяете своему системному администратору, чтобы разрешить конфликты слияния для вас. Если у вас есть собственные ветки, то слияние не является проблемой. В противном случае чтобы выполнить слияние "offline", у вас может быть две автономные копии репо, с которыми вы работаете, и с вашим "происхождением", а когда вы вернетесь, попросите sysadm git потянуть на "начало" "repo", а затем, на автономном компьютере, выполните слияние между двумя репозиториями на карте памяти, а затем попросите sysadm объединить ваше исходное репо в онлайн файл.

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

Ответ 3

Команда git bundle предназначена для этого. Например, чтобы клонировать главную ветвь хранилища в автономном режиме,

cd my-repository
git bundle create offline-repos master

Это будет хранить всю ветку master в файле с именем offline-repos. Скопируйте файл на другой компьютер. На этом компьютере введите

git clone -b master offline-repos new-repos

Это создаст папку new-repos, извлеченную из offline-repos. Файл комплекта, из которого вы клонировали, будет считаться удаленным хранилищем. Вы даже можете создать пакет, в котором хранятся изменения, начиная с ссылки, например:

git bundle create offline-repos e45ad329..master

Если вы замените файл пакета offline-repos на пакет, содержащий новые изменения, вы можете git pull из него, как показано в:

cd new-repos
git pull