Quiero usar el control de versiones pero, por razones de seguridad, el servidor en el que estoy trabajando no tiene acceso a Internet: solo puedo mover archivos en una unidad flash USB. ¿Puedo seguir usando Git con esta configuración? ¿Puedo crear pequeños parches que puedo aplicar en un repositorio de Git?
84
server
para una máquina que no está conectada a ninguna red. Podría ser una red local incluso sin acceso a Internet, pero aún así es una red.Respuestas:
Claro, no hay nada sobre Git que requiera un protocolo particular. Recién salido de la caja, el cliente estándar admite HTTP (S), SSH, el protocolo Git personalizado y, lo que es más importante, el protocolo local . Eso solo toma una ruta a un
.git
directorio local , que puede estar dentro del directorio de trabajo (/path/to/project/.git
) o solo un directorio simple (/path/to/project.git
), aunque la denominación es solo una convención.Esto significa que, por supuesto, puede agregar una unidad flash como control remoto:
o en Windows:
O incluso agréguelo como un control remoto adicional con un nombre diferente (si prefiere
origin
apuntar hacia un servidor de Internet en algún lugar):Luego puede simplemente empujar / tirar hacia / desde este control remoto como cualquier otro.
Si lee la documentación , notará que también hay un
file://
protocolo que se comporta de manera ligeramente diferente. Se recomienda usar una ruta local, ya que hará uso de algunas optimizaciones adicionales: si usa elfile://
protocolo, git usará algunos componentes de red estándar (para comunicarse con el disco local), que es más lento.fuente
file://
también es un poco más flexible. Le permite usar algunas características (como clones poco profundos) que no puede utilizar con una ruta local.En una sola computadora, no se necesita nada especial. Ejecute
git init
en su directorio deseado y trabaje con Git como lo haría normalmente.Para sincronizar un repositorio en varias computadoras, hay varios métodos.
Método 1a (sin red en absoluto): puede crear un 'repositorio desnudo' en el dispositivo USB, luego empujarlo y extraerlo como lo haría con cualquier otro repositorio remoto. En otras palabras, las operaciones de repositorio a través de rutas locales no son diferentes de las operaciones a través de URL SSH o HTTPS.
Cree un repositorio 'remoto':
En la computadora 1, empuje todo hacia ella:
En la computadora 2, bueno, igual que siempre.
(También puede insertar / recuperar / extraer directamente de una URL o ruta).
Método 1b (red interna): si tiene un servidor interno con SSH disponible, y si tiene instalado Git, puede hacer lo mismo que anteriormente , solo especifique una dirección SSH usando la sintaxis
[user@]host:path
ossh://[user@]host/path
.Cree un repositorio 'remoto' ejecutándose
git init --bare <somepath.git>
en el servidor designado (a través de SSH).En la computadora 1, de la misma manera que se demostró anteriormente.
O si lo prefieres:
En la computadora 2, nuevamente lo mismo que el método 1a.
Método 2: puede crear 'paquetes de transferencia' que archiven una lista dada de confirmaciones en un solo archivo.
Desafortunadamente, los comandos de paquete no recuerdan automáticamente lo que ya se incluyó la última vez, por lo que se necesita etiquetado manual o mantenimiento de notas. Solo tomaré los ejemplos del manual de git-bundle.
En la computadora 1, cree un paquete de toda la rama:
En la computadora 2, extraiga del paquete como si fuera un repositorio:
Los paquetes subsiguientes no necesitan empacar el conjunto
master
, sino que pueden empacar solo los commits recién agregadoslast-bundled..master
.En la computadora 1, cree un paquete de los commits recién agregados:
Lo mismo que arriba.
fuente
manual tagging or note-keeping is needed
, una opción a menos que el repositorio sea muy grande es:git bundle create my.bundle --all
debería contener todo.git/
carpeta oculta), sin un 'árbol de trabajo' (los archivos editables). Es la forma preferida para los repositorios que usted tienegit push
.git bundle create
Uno de los métodos es usar almacenamiento externo para intercambiar datos entre repositorios es git bundle . De esta manera, solo tiene archivos únicos para cada transferencia, no repositorios intermedios de Git.
Cada "git push" se convierte en la creación de un archivo, "git fetch" recupera cosas de ese archivo.
Sesión de demostración
Crear el primer repositorio y hacer el primer "empuje"
"clonación" al segundo repositorio (es decir, la segunda computadora):
Haciendo algunos cambios y "empujándolos" a otro archivo de paquete:
"tirar" cambia al primer repositorio:
A diferencia del primer paquete, el segundo contiene solo un historial parcial de Git y no es directamente clonable:
Hay una desventaja en el uso de paquetes que necesita para especificar manualmente qué rango de confirmaciones debe contener cada paquete. A diferencia
git push
,git bundle
no realiza un seguimiento de lo que estaba en el paquete anterior, debe ajustarlo manualmenterefs/remotes/origin/master
o los paquetes serían más grandes de lo que podrían ser.fuente
--all
bandera para obtener todo. Si el repositorio es lo suficientemente pequeño, este es el proceso más simple, ya que simplemente transfieres todo cada vez. Simplemente no pierda el dispositivo de memoria, ¡probablemente el mayor problema de seguridad!Primero debes instalar Git . Luego, para crear un nuevo repositorio, ejecute dentro de la carpeta que ha copiado:
Luego, puede agregar los archivos con los que desea controlar la versión
git add
(agregar-a
para todos los archivos) y comenzar a confirmar los cambios (git commit
).No tiene que presionar a ningún control remoto, ya que puede trabajar en su historial local (
git log
).Para más información, consulte:
git
- la guía simpleEmpujar / tirar sin internet
Usando el
git push
comando, es posible pasar SSH (usando conexión local, intranet):o empujando a la carpeta:
Esto supone que tiene dos copias de su repositorio.
Lo mismo con tirar, p. Ej.
Parchear
Para aplicar parches, puede usar el
patch
comando ogit apply
.Consulte: Crear parches o archivos diff desde el repositorio git y aplicarlo a otro repositorio git diferente .
fuente
Puedes usar Git localmente también. Luego, sus confirmaciones solo se almacenan localmente, y todavía tiene control de versiones (y puede diferir / fusionar, etc.), pero simplemente no puede acceder al repositorio desde cualquier otra computadora.
Puede iniciar un repositorio local de Git ejecutándose
git init
en su carpeta local. Como se describe aquí .fuente