Я хочу использовать контроль версий, но из-за соображений безопасности сервер, на котором я работаю, не имеет доступа к Интернету: я могу перемещать файлы только с USB-накопителя. Могу ли я использовать Git с этой настройкой? Могу ли я создать небольшие патчи, которые я могу применить к Git-репозиторию?
84
server
для машины, не подключенной к какой-либо сети. Это может быть просто локальная сеть, даже без доступа к Интернету, но, тем не менее, это сеть.Ответы:
Конечно, в Git нет ничего, что требовало бы определенного протокола. Просто из коробки стандартный клиент поддерживает HTTP (S), SSH, протокол пользовательских Git и, что важно, местный протокол. Это просто берет путь к локальному
.git
каталогу, который может быть в рабочем каталоге (/path/to/project/.git
) или просто в пустом каталоге (/path/to/project.git
), хотя именование - это просто соглашение.Это означает, что вы можете, конечно, добавить флешку в качестве пульта:
или в Windows:
Или даже добавьте его как дополнительный пульт с другим именем (если вы предпочитаете
origin
указывать на интернет-сервер где-то):Затем вы можете просто нажать / вытащить в / из этого пульта, как и любой другой.
Если вы прочитаете документацию , вы заметите, что есть
file://
протокол, который ведет себя немного по-другому. Рекомендуется использовать локальный путь, так как он будет использовать некоторые дополнительные оптимизации - если вы используетеfile://
протокол, то git будет использовать некоторые стандартные сетевые компоненты (для связи с локальным диском), что медленнее.источник
file://
также немного более гибко. Это позволяет вам использовать некоторые функции (например, мелкие клоны), которые вы не можете использовать с локальным путем.На одном компьютере ничего особенного не требуется. Запустите
git init
нужный каталог и работайте с Git, как обычно.Для синхронизации хранилища на нескольких компьютерах существует несколько способов.
Метод 1a (сети вообще нет). Вы можете создать «пустой репозиторий» на USB-накопителе, затем нажать на него и извлечь из него, как если бы это было с любым другим удаленным репозиторием. Другими словами, операции с хранилищем через локальные пути ничем не отличаются от операций через URL-адреса SSH или HTTPS.
Создайте «удаленный» репозиторий:
В компьютере 1 нажмите на него все:
В компе 2 ну так же как всегда.
(Вы также можете нажать / извлечь / извлечь из URL или пути напрямую.)
Метод 1b (внутренняя сеть): если у вас есть внутренний сервер с доступным SSH, и если на нем установлен Git, вы можете сделать то же, что и выше , просто укажите адрес SSH с помощью синтаксиса
[user@]host:path
илиssh://[user@]host/path
.Создайте «удаленный» репозиторий, запустив его
git init --bare <somepath.git>
на указанном сервере (через SSH).В компьютере 1 так же, как продемонстрировано ранее.
Или, если вы предпочитаете:
В компьютере 2 опять то же самое, что и в методе 1а.
Способ 2: Вы можете создать «пакеты передачи», которые заархивируют данный список коммитов в один файл.
К сожалению, команды связки не запоминают автоматически то, что уже было упаковано в прошлый раз, поэтому необходимо ручное тегирование или ведение заметок. Я просто возьму примеры из руководства по git-bundle.
На компьютере 1 создайте связку всей ветви:
На компьютере 2 вытащите из пакета, как будто это хранилище:
Последующие пакеты не должны упаковывать все целиком
master
-last-bundled..master
вместо этого они могут упаковывать только что добавленные коммиты .На компьютере 1 создайте пакет недавно добавленных коммитов:
То же, что и выше.
источник
manual tagging or note-keeping is needed
, один вариант, если репо не очень большой, это:,git bundle create my.bundle --all
он должен содержать все.git/
скрытой папке), без «рабочего дерева» (редактируемые файлы). Это предпочтительная форма для репозиториев, что выgit push
.git bundle create
Одним из методов является использование внешнего хранилища для обмена данными между репозиториями - это git bundle . Таким образом, у вас есть только отдельные файлы для каждой передачи, а не промежуточные репозитории Git.
Каждый «git push» превращается в создание файла, «git fetch» выбирает вещи из этого файла.
Демо сессия
Создание первого репозитория и выполнение первого «толчка»
«клонирование» во второй репозиторий (т.е. на второй компьютер):
Делаем некоторые изменения и «помещаем» их в другой пакетный файл:
«вытягивание» изменений в первый репозиторий:
В отличие от первого пакета, второй содержит только частичную историю Git и не может быть напрямую клонирован:
Недостатком использования пакетов является то, что вам нужно вручную указывать, какой диапазон коммитов должен содержать каждый пакет. В отличие от этого
git push
,git bundle
не отслеживает то, что было в предыдущем пакете, вам нужно вручную настроить,refs/remotes/origin/master
иначе пакеты будут больше, чем могли бы быть.источник
--all
флаг, чтобы получить все. Если репо достаточно мало, это самый простой процесс, так как вы просто все переносите каждый раз! Только не теряйте карту памяти - вероятно, самая большая проблема безопасности!Вам нужно сначала установить Git . Затем, чтобы создать новый репозиторий, запустите в папке, которую вы скопировали:
Затем вы можете добавить файлы, для которых вы хотите управлять версиями
git add
(добавить-a
для всех файлов), и начать фиксировать изменения (git commit
).Вам не нужно нажимать на какие-либо пульты, так как вы можете работать с вашей локальной историей (
git log
).Для получения дополнительной информации, проверьте:
git
- простое руководствоТяни / тянем без интернета
Используя
git push
команду, можно передать SSH (используя локальное соединение, интранет):или нажать в папку:
Это предполагает, что у вас есть две копии вашего хранилища.
То же самое с потянув, например,
Заделка
Чтобы применить патчи, вы можете использовать
patch
команду илиgit apply
.Смотрите: Создайте файл патча или diff из репозитория git и примените его к другому другому репозиторию git .
источник
Вы также можете использовать Git локально. Тогда ваши коммиты хранятся только локально, и у вас все еще есть контроль версий (и вы можете различать / объединять и т. Д.), Но вы просто не можете получить доступ к хранилищу с любого другого компьютера.
Вы можете запустить локальный Git-репозиторий, запустив его
git init
в локальной папке. Как описано здесь .источник