GIT clona a unidad externa para respaldo

No me molestes, no soy un gran hombre de línea de command … Tenemos GIT configurado dentro de nuestra networking de Windows (usando msysgit y GitExtensions). Cada uno de nosotros tiene nuestros propios repositorys y lo enviamos a un repository remoto "vacío" en uno de nuestros serveres. Todo bien.

Estoy tratando de configurar un trabajo progtwigdo en el server, que clonará un repository de la unidad C a una unidad externa (en F), lo que dificulta que esto funcione. Puedo hacer esto en GIT bash con relativa facilidad, pero no estoy seguro de cómo save esto en un file de process por lotes que luego puedo crear.

Lo que tengo hasta ahora

rmdir F:\GitClone /s /q mkdir F:\GitClone mkdir F:\GitClone\Repo1 CD /DF:\GitClone\Repo1\ GIT CLONE /c/GIT/Repo1/ 

También intenté lo siguiente para la última línea:

 GIT CLONE C:\GIT\Repo1\ 

Pero esto tampoco funciona … Estoy un poco perplejo y agradecería algo de ayuda. La unidad C contiene nuestros repositorys desnudos y la unidad F es nuestra unidad externa que intercambiamos diariamente …


Varias respuestas aquí que han sido muy útiles, gracias. Mi respuesta resultante es probablemente una combinación de estos, por lo que señala cómo ejecutar un script bash y cómo crear el script del pull / push.

Necesitamos unirlos para que funcionen, por lo que es bueno cuando se intercambian y se desconectan varias unidades (es decir, clonar un repository si no existe en el disco externo y luego solo extraer las diferencias), pero eso debería ser factible. Gracias a todos.

Tenga en count que el propio git es excelente para copyr solo los cambios necesarios en un repository clonado.

Si desea que se actualice periódicamente una copy de su repository, haga lo siguiente: Crea un repository desnudo como repository de respaldo y luego inserta repetidamente todos los cambios nuevos (no es necesario eliminar el respaldo anterior).

Ok, comencemos creando tu repository

 $ cd /tmp $ mkdir myrepo && cd myrepo $ touch hi && git add . && git commit -m "bla" 

Entonces, este es tu repository. Ahora creamos el clon:

 $ cd /tmp $ mkdir backup && cd backup $ git --bare init Initialized empty Git repository in /tmp/backup/ 

Ahora, configuremos su repository para copys de security regulares …

 $ cd /tmp/myrepo $ git remote add backup /tmp/backup $ git config remote.backup.mirror true 

Luego copie todo a la copy de security:

 $ git push backup Counting objects: 3, done. Writing objects: 100% (3/3), 206 bytes, done. Total 3 (delta 0), reused 0 (delta 0) Unpacking objects: 100% (3/3), done. To /tmp/backup * °new branch§ master -> master 

Y mira si funcionó:

 $ cd /tmp/backup $ git log commit d027b125166ff3a5be2d7f7416893a012f218f82 Author: Niko Schwarz <niko.schwarzàgmail.com> Date: Fri Dec 11 12:24:03 2009 +0100 hi 

Tada, estás listo. Por lo tanto, todo lo que su script necesita hacer es emitir git push backup . No hay necesidad de tirar repetidamente la copy de security anterior.

La alternativa es que puede hacer que rsync lo haga todo por usted:

 rsync -av rsync://rsync.samba.org/ftp/unpacked/rsync /dest/dir/ 

El usuario Offby agrega : desde la versión 1.5.4, "git remote add" toma la opción "–mirror", que le ahorra a ambos tener que "git config remote.origin.mirror true", y tener que pasar –mirror a "git push".

Debido a que el command git es un poco raro, debes usar call para ejecutar cualquier command de git desde un file por lotes:

 rmdir F:\GitClone /s /q mkdir F:\GitClone CD /DF:\GitClone\ call GIT CLONE c/GIT/Repo1/ 

Siempre puedes simplemente progtwigr bash.exe mybashbackupscript.sh

De todos modos, en términos de Windows:

 rmdir F:\GitClone /s /q mkdir -p F:\GitClone\Repo1 copy c:\GIT\Repo1\.git F:\GitClone\Repo1\.git 

git clone realidad no hace nada más elegante que eso.

editar: como señaló otra persona, probablemente sea mejor hacer un nuevo repository de copy de security y simplemente extraer / search en eso. Evitará cualquier problema de acceso con .git 🙂

Lo siento, no puedo comentar publicaciones, pero también estaba pensando en copyr el .git, pero ¿qué sucede si el .git se copy durante un tirón?

De todos modos, ¿por qué copyr todo el material como podría get los deltas de vez en cuando?

Inicialización de la copy de security: (en F: \ GitClone \ Repo1 vacía)

 git init git add remote origin /c/GIT/Repo1 

Entonces su "script de copy de security delta" simplemente haría:

 cd /f/GitClone/Repo1 git fetch origin 

¿Por qué eliminas el clon todo el time? ¿Cuál es el punto de clonar un repository existente cuando solo quiere copyr el file?

Simplemente crea el repository en la unidad externa (usando git clone una vez ), y luego ejecuta git pull on regularmente.

Problema resuelto:

 h: (flash drive) cd \ mkdir YourProject cd YourProject git init git remote add origin git@github.com:user/YourProject.git git remote add local C:\w\YourProject git pull origin master git push local master