Скопируйте репозиторий 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