tipos tag repositorio que example etiquetas eliminar crear git offline-mode

tag - que es un repositorio git



Cómo sincronizar dos repositorios git (4)

En lugar de hacer un clon desnudo, prefiero hacer un bundle (ver " ¿Cómo puedo enviar a alguien un repositorio git? "), Que genera un archivo, más fácil de copiar (en un dispositivo USB, por ejemplo)

La ventaja es que tiene algunas de las características de un repositorio simple: puede extraerlo o clonarlo.
Pero solo tienes que preocuparte por un archivo.

machineB$ git clone /home/me/tmp/file.bundle R2

Esto definirá un control remoto llamado " origin " en el repositorio resultante que le permite buscar y extraer del paquete. El $GIT_DIR/config en R2 tendrá una entrada como esta:

[remote "origin"] url = /home/me/tmp/file.bundle fetch = refs/heads/*:refs/remotes/origin/*

Para actualizar el repositorio mine.git resultante, puede recuperar o extraer después de reemplazar el paquete almacenado en /home/me/tmp/file.bundle con actualizaciones incrementales.

Después de trabajar un poco más en el repositorio original, puede crear un paquete incremental para actualizar el otro repositorio:

machineA$ cd R1 machineA$ git bundle create file.bundle lastR2bundle..master machineA$ git tag -f lastR2bundle master

A continuación, transfiere el paquete a la otra máquina para reemplazar /home/me/tmp/file.bundle y /home/me/tmp/file.bundle de allí.

machineB$ cd R2 machineB$ git pull

Tengo dos repositorios git en diferentes PC. Tengo algunas sucursales locales en cada uno de ellos. No quiero enviar estas sucursales al servidor remoto, solo mantenlas localmente. ¿Cómo puedo sincronizar sin usar una web? ¿Puedo comprimir el repositorio en una PC y pasar a otra? ¿Eso es seguro? ¿Tal vez puedo exportar los cambios más nuevos de todas las ramas?


La copia directa de un repositorio al otro sistema de archivos es una alternativa al clon desnudo o al paquete. Después de copiar, puede configurar el repositorio copiado directamente como un control remoto local - no intuitivo como puede parecer el control remoto local - para captar e integrarse en el primer repositorio.

Es decir, para fusionar repo2 de una segunda computadora en ~ / repo1, primero copie repo2 en el sistema de archivos repo1 en ~ / repo2 (dispositivo de memoria, copia de red, etc.) y luego puede usar la respuesta a Git para realizar cambios entre dos repositorios locales :

~/repo1 $ git remote add repo2 ~/repo2 ~/repo1 $ git fetch repo2 ~/repo1 $ git merge repo2/foo

Esto funciona porque el artículo de wikipedia en git dice: "Un repositorio de Git - datos y metadatos - está completamente contenido dentro de su directorio, por lo que una copia normal del sistema (o renombrar, o eliminar) de un repositorio completo de Git es una operación segura La copia resultante es independiente y no conoce el original ".


Solo me gustaría agregar un pequeño giro a las cosas. La información en otras publicaciones parece correcta, pero me gustaría mencionar algunas cosas adicionales que hago en la práctica.

Si lo hago

git remote -v

Obtengo información como esta

USB_F file:///f/Git_repositories/projectname.git (fetch) USB_F file:///f/Git_repositories/projectname.git (push) USB_G file:///g/Git_repositories/projectname.git (fetch) USB_G file:///g/Git_repositories/projectname.git (push)

Básicamente, he definido varios controles remotos con nombres de USB en lugar de uno solo, ya que la letra de la unidad asignada a mi dispositivo USB cambia dependiendo del puerto en el que lo inserte.

Luego ejecuto un script con contenidos como este

cd /path/to/projectname if [ -d /f/Git_repositories/projectname.git ] then git push USB_F --all git push USB_F --tags fi if [ -d /g/Git_repositories/projectname.git ] then git push USB_G --all git push USB_G --tags fi

La intención es enviar todas las ramas y todas las etiquetas al repositorio USB, si existe y donde sea. (El distintivo -d comprueba la existencia del directorio del repositorio git y el código condicional solo se ejecuta si el directorio existe).

La pregunta original decía: tengo algunas sucursales locales en cada uno de ellos. No quiero enviar estas sucursales al servidor remoto, solo mantenlas localmente. ¿Cómo puedo sincronizar ...

El comando push -all y push --tag realiza esta sincronización, asegurándose de que todas las ramas y etiquetas se envían al repositorio USB, incluso aquellas nuevas que el repositorio USB desconocía. No hay incumplimiento para dominar o la necesidad de conocer los nombres de las ramas y manejarlas una a una.

Ejecuto esto con fines de copia de seguridad, así que solo he mostrado el lado positivo de las cosas y he reducido el número de proyectos y repositorios. En realidad, realizo una copia de seguridad de múltiples proyectos en varias ubicaciones, pero son solo los elementos USB repetidos los que son relevantes aquí.

Otra cosa que es bastante obvia pero que no he visto mencionar, es que para sincronizar PC A y PC B, necesitarías

1. sync PC A and the USB device 2. sync PC B and the USB device 3. sync PC A and the USB device again!

O visto de manera diferente, ve

PC A -> USB -> PC B PC B -> USB -> PC A

de modo que, en última instancia, las ramas y las etiquetas son las mismas en las dos máquinas.


Vea esta publicación en el blog "Sincronización de repositorios de Git sin servidor" (por Victor Costan ).

Esta publicación describe un método para impulsar cambios entre dos repositorios sin usar un servidor con conexiones de red a ambos hosts que tienen repositorios

Comienza creando un repositorio en la memoria USB.

mkdir /path/to/usb/stick/repository.git git clone --local --bare . /path/to/usb/stick/repository.git

Luego, registre el repositorio en la memoria USB como un repositorio remoto, y presione la rama deseada hacia él (si no desea enviar el maestro, sustituya la rama que desee).

git remote add usb file:///path/to/usb/stick/repository.git git push usb master

En el futuro, puede tratar el repositorio USB como cualquier otro repositorio remoto. Solo asegúrese de que esté montado :) Por ejemplo, lo siguiente empuja nuevos cambios al repositorio USB.

git push usb

En el extremo receptor, monte la memoria USB y use una URL de archivo para el repositorio

file:///path/to/usb/stick/repository.git

Algunos comandos útiles:

# cloning the repository on the USB stick git clone file:///path/to/usb/stick/repository.git # updating a repository cloned from the USB stick using the above command git pull origin # adding the USB stick repository as a remote for an existing repository git remote add usb file:///path/to/usb/stick/repository.git # updating from a remote repository configured using the above command git pull usb master